css — Как вписать картинку в блок с сохранением пропорций
Вопрос задан
Изменён 2 года 1 месяц назад
Просмотрен 300 раз
Есть слайдер (не мною написанный). В нем есть родительский блок, который содержит флек-итемы. Этот блок прокручивается за пределы дисплея при нажатии на стрелки. В флекс-итемах (div, они расширены во весь дисплей) есть картинки обернутые в . Нужно вписать в блок картинку неизвестного размера (размер может быть гораздо больше размера дисплея или гораздо меньше). Блок же тоже может быть разного размера — по размеру дисплея (1920, 1200, 1024, 800 и т. д.). Это нужно для того чтобы этот блок использовался для десктопного и мобильного вида. Пропорции картинки тоже могут быть разные. Нужно чтобы картинка вписывалась в этот блок целиком (если размер картинки больше размера блок — сжималась, если меньше — расширялась до размеров блока), но с сохранением пропорций. Причем может быть так 3600px * 200px — нужно чтобы картинка вписалась в виде тонкой полоски (пропорционально уменьшившись).
Сейчас так:
.imageLink: { max-height: 100%; margin: auto; display: flex; justifyContent: center; overflow: hidden; } .image: { object-fit: contain; },
На больших дисплеях картинка хорошо вписывается, но если ширина больше мобильного дисплея — обрезается по краям
1Впишите картинку как background-image, no-repeat cover center, а родителю выставьте требуемый размер.
Зарегистрируйтесь или войдите
Регистрация через Google Регистрация через Facebook Регистрация через почтуОтправить без регистрации
ПочтаНеобходима, но никому не показывается
Отправить без регистрации
ПочтаНеобходима, но никому не показывается
By clicking “Отправить ответ”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.
object-fit — CSS | MDN
Свойство object-fit
определяет, как содержимое заменяемого элемента, такого как <img>
или <video>
, должно заполнять контейнер относительно его высоты и ширины.
Для object-fit
можно указать одно из нижеперечисленных свойств.
Значения
fill
Смещаемый контент меняет свой размер таким образом, чтобы заполнить всю область внутри блока: используется вся ширина и высота блока.
contain
Смещаемый контент меняет свой размер таким образом, чтобы подстроиться под область внутри блока пропорционально собственным параметрам: окончательный размер контента будет определён как «помещённый внутрь» блока, ограничиваясь его шириной и высотой.
cover
Смещаемый контент меняет свой размер таким образом, чтобы сохранять свои пропорции при заполнении блока: окончательный размер контента будет определён как «покрытие» блока, ограничиваясь его шириной и высотой.
none
Смещаемый контент не изменяет свой размер с целью заполнить пространство блока: конечный размер контента будет определён с использованием алгоритма изменения размера по умолчанию, а также размер объекта по умолчанию равен ширине и высоте смещаемого контента.
scale-down
Контент изменяет размер, сравнивая разницу между
none
иcontain
, для того, чтобы найти наименьший конкретный размер объекта.
Правильный синтаксис
object-fit =
fill | (en-US)
contain | (en-US)
cover | (en-US)
none | (en-US)
scale-down
HTML Контент
<div> <h3>object-fit: fill</h3> <img src="mdn_logo_only_color.png" alt="MDN Logo"/> <img src="mdn_logo_only_color.png" alt="MDN Logo"/> <h3>object-fit: contain</h3> <img src="mdn_logo_only_color.png" alt="MDN Logo"/> <img src="mdn_logo_only_color.png" alt="MDN Logo"/> <h3>object-fit: cover</h3> <img src="mdn_logo_only_color.png" alt="MDN Logo"/> <img src="mdn_logo_only_color.png" alt="MDN Logo"/> <h3>object-fit: none</h3> <img src="mdn_logo_only_color.png" alt="MDN Logo"/> <img src="mdn_logo_only_color.png" alt="MDN Logo"/> <h3>object-fit: scale-down</h3> <img src="mdn_logo_only_color.png" alt="MDN Logo"/> <img src="mdn_logo_only_color.png" alt="MDN Logo"/> </div>
CSS Контент
h3 { font-family: Courier New, monospace; font-size: 1em; margin: 1em 0 0.3em; } div { display: flex; flex-direction: column; flex-wrap: wrap; align-items: flex-start; height: 940px; } img { width: 150px; height: 100px; border: 1px solid #000; } .narrow { width: 100px; height: 150px; margin-top: 10px; } .fill { object-fit: fill; } .contain { object-fit: contain; } .cover { object-fit: cover; } .none { object-fit: none; } .scale-down { object-fit: scale-down; }
Результат
Specification | Status | Comment |
---|---|---|
CSS Images Module Level 4 Определение ‘object-fit’ в этой спецификации. | Рабочий черновик | Добавлены ключевые слова from-image и flip |
CSS Images Module Level 3 Определение ‘object-fit’ в этой спецификации. | Кандидат в рекомендации | Первоначальное определение |
Начальное значение | fill |
---|---|
Применяется к | заменяемые элементы |
Наследуется | нет |
Обработка значения | как указано |
Animation type | discrete |
BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
- Другие свойства CSS, связанные с изображениями (картинками):
object-position
,image-orientation
(en-US),image-rendering
(en-US),image-resolution
(en-US). background-size
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on by MDN contributors.
html — заставить изображение соответствовать размеру и сохранить соотношение сторон
Задавать вопрос
спросил
Изменено 4 года, 9 месяцев назад
Просмотрено 74к раз
Я хочу, чтобы изображение заполняло 100% ширины своего контейнера, и я хочу, чтобы для него было установлено свойство max-heigth, сохраняя соотношение сторон, но позволяя потерять любую часть изображения.
изображение { максимальная высота: 200 пикселей; ширина:100%; }
Я знаю, что подобное можно сделать со свойством background-size
.Любая идея о том, как я могу добиться этого с помощью CSS? или джаваскрипт?
- HTML
- CSS
Вы можете попробовать CSS3 object-fit
и увидеть поддержку браузера таблицы .
CSS3
object-fit
/object-position
Метод определения того, как объект (изображение или видео) должен помещаться внутри его коробка. параметры объектной подгонки включают «содержать» (подгонка в соответствии с аспектом соотношение), «заливка» (растягивает объект до заполнения) и «обложка» (переполняет поле но сохраняет соотношение), где положение объекта позволяет объекту быть перемещается, как это делает background-image.
JSFIDDLE ДЕМО
.контейнер { ширина: 200 пикселей; /*любого размера*/ высота: 200 пикселей; /*любого размера*/ } .object-fit-cover { ширина: 100%; высота: 100%; объект подходит: обложка; /*магия*/ }
<дел>
Связанная информация:
Изучение соответствия объекта ★ Взломы Mozilla
Polyfill для свойства соответствия объекту CSS
Вы можете добиться этого, используя свойства css flex. См. приведенный ниже код
.img-container { ширина: 150 пикселей; высота: 150 пикселей; граница: 2 пикселя сплошного красного цвета; выравнивание содержимого: по центру; дисплей: гибкий; flex-направление: строка; переполнение: скрыто; } .img-контейнер .img-to-fit { гибкий: 1; высота: 100%; }
<дел> pexels.com/photos/8633/nature-tree-green-pine.jpg" /> дел>0
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google Зарегистрироваться через Facebook Зарегистрируйтесь, используя электронную почту и парольОпубликовать как гость
Электронная почтаТребуется, но никогда не отображается
Опубликовать как гость
Электронная почтаТребуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.
html — автоматическое масштабирование изображения с сохранением соотношения сторон
Задавать вопрос
спросил
Изменено 3 года, 10 месяцев назад
Просмотрено 4к раз
У меня есть img внутри тега div, и в настоящее время я использую CSS
img { максимальная высота: 100%; максимальная ширина: 100%; }
В настоящее время изображения помещаются внутри div, чего я и хотел. Однако, если файл изображения меньше, чем div, изображение не будет иметь максимально возможный размер. Есть ли простой способ максимизировать изображение, сохраняя при этом изображение внутри div и сохраняя исходное соотношение сторон?
Я пытался установить высоту 100% с максимальной шириной 100%, но это искажает изображение, а это не то, что мне нужно. я тоже пробовал подходит для объекта: содержит;
, но это, похоже, ничего не делает.
Спасибо 🙂
- HTML
- CSS
Ответ @Michelangelo — еще один способ достичь цели. Если вы хотите, чтобы ваше изображение было внутри тега img
(как и ваш исходный пост), сохраните значения max-width
и max-height
и поместите одно из них в свой класс CSS:
1) Keep соотношение сторон по ширине:
ширина: 300 пикселей; /* Ваша предпочтительная ширина */ высота: авто;
2) Сохранить соотношение сторон в зависимости от высоты:
ширина: авто; высота: 300 пикселей; /* Ваша предпочтительная высота */
Я бы также посоветовал вам взглянуть на свойство object-fit
здесь:
https://www.w3schools.com/css/css3_object-fit.asp
Это своего рода свойство background-size
, когда вы вводите такие значения, как , содержат
или , покрывают
, плюс вы можете указать ширина
и высота
без усложнения макета/иерархии DOM. Это очень удобно при работе с внутренними размерами элементов.
Попробуйте добавить его в качестве фона, тогда вы можете сделать это:
div { фон: url(images/bg.jpg) фиксированный центр без повторов; -webkit-background-size: обложка; -moz-background-size: обложка; -o-background-size: обложка; размер фона: обложка; }6
Если вы хотите сохранить изображение как элемент HTML, а не как фон CSS, я бы использовал объектную подгонку. Существуют ограничения поддержки этого свойства CSS в браузерах.
https://caniuse.com/#search=object-fit
Для борьбы с этим можно использовать полифилл. Такой как: https://github.com/fregante/object-fit-images
Примером того, что, как мне кажется, вам нужно, может быть: https://codepen.io/bin-man/pen/NWKNWLm
.image-контейнер img { объект подходит: обложка; }
Вы можете поэкспериментировать с размерами изображения и удалить объектную подгонку, чтобы посмотреть, как оно себя ведет.
Надеюсь, это поможет.
Думаю, это то, что вам нужно… Пожалуйста, запустите фрагмент кода…
раздел { ширина: 100 пикселей; высота: 100 пикселей; } раздел > изображение { максимальная ширина: 100%; максимальная высота: 100%; объект-подгонка: уменьшение масштаба; }
<дел>