У меня есть изображение, и я хочу установить для него определенную ширину и высоту (в пикселях)
Но если я установлю ширину и высоту с помощью css ( width:150px; height:100px
), изображение будет растянуто, и это может быть некрасиво.
Как заполнить изображения до определенного размера с помощью CSS, а не растягивать его?
Пример заливки и растяжения изображения:
Исходное изображение:
Растянутое изображение:
Заполненное изображение:
Обратите внимание, что в приведенном выше примере с заполненным изображением: сначала размер изображения изменяется до 150x255 (с сохранением соотношения сторон), а затем обрезается до 150x100.
width
иheight
следует настроить соответственноОтветы:
Если вы хотите использовать изображение в качестве фона CSS, есть элегантное решение. Просто используйте
cover
илиcontain
вbackground-size
свойстве CSS3.Пока
cover
даст вам уменьшенное изображение,contain
даст вам уменьшенное изображение. Оба сохранят пропорции пикселя.http://jsfiddle.net/uTHqs/ (используя обложку)
http://jsfiddle.net/HZ2FT/ (с использованием содержимого)
Этот подход имеет преимущество в том, что он дружелюбен к дисплеям Retina согласно краткому руководству Thomas Fuchs
Стоит отметить, что поддержка браузером обоих атрибутов исключает IE6-8.
источник
background-repeat: no-repeat;
? Если изображение покрывает его контейнер, оно все равно не повторится.Вы можете использовать свойство css
object-fit
.Смотрите пример здесь
Есть полифилл для IE: https://github.com/anselmh/object-fit
источник
img
тегов (не толькоbackground-image
методом, описанным в ответе выше). Спасибо :)object-fit
не поддерживается во многих браузерах .background-size
в моих проектах редко бывает приемлемым решением. Вы с меньшей вероятностью получите какую-либо выгоду от SEO и не можете предоставить тег ALT, заголовок и т. Д., Сопровождающие изображение, где вы можете предоставить дополнительный контекст для программ чтения с экрана.object-fit: cover;
делает это. Большое спасибоУлучшение в ответе выше @afonsoduarte ( НЕ принятый) .
если вы используете загрузчик
Есть три различия:
Обеспечение
width:100%
по стилю.Это полезно, если вы используете загрузчик и хотите, чтобы изображение растягивалось на всю доступную ширину.
Указывать
height
свойство необязательно, Вы можете удалить / оставить его по своему усмотрению.Кстати, нет никакой необходимости , чтобы обеспечить
height
иwidth
атрибуты наimage
элементе , поскольку они будут переписаны стилем.так что достаточно написать что-то вроде этого.
источник
Единственный реальный способ - создать контейнер вокруг изображения и использовать
overflow:hidden
:HTML
CSS
В CSS трудно делать то, что вы хотите, и центрировать изображение, в jquery есть быстрое решение, такое как:
http://jsfiddle.net/x86Q7/2/
источник
margin-top
изображений, например50px
(см. Это: jsfiddle.net/x86Q7/1 ), но как обрезать его из реального центра ? (Без jQuery?)Решение CSS без JS и без фонового изображения:
Метод 1 «маржинальное авто» (IE8 + - НЕ FF!):
http://jsfiddle.net/5xjr05dt/
Способ 2 «преобразования» (IE9 +):
http://jsfiddle.net/5xjr05dt/1/
Метод 2 можно использовать для центрирования изображения в контейнере с фиксированной шириной / высотой. Оба могут переполниться - и если изображение меньше контейнера, оно все равно будет отцентрировано.
http://jsfiddle.net/5xjr05dt/3/
Способ 3 «двойная обертка» (IE8 + - НЕ FF!):
http://jsfiddle.net/5xjr05dt/5/
Метод 4 «Двойная обертка И двойное изображение» (IE8 +):
http://jsfiddle.net/5xjr05dt/26/
Методы 1 и 3 не работают с Firefox
источник
Другое решение состоит в том, чтобы поместить изображение в контейнер с желаемой шириной и высотой. Используя этот метод, вам не нужно устанавливать изображение в качестве фонового изображения элемента.
Затем вы можете сделать это с помощью
img
тега и просто установить максимальную ширину и максимальную высоту для элемента.CSS:
HTML:
Теперь, когда вы измените размер контейнера, изображение будет автоматически увеличиваться в размере, не выходя за границы и не искажая.
Если вы хотите центрировать изображение по вертикали и горизонтали, вы можете изменить контейнер css на:
Вот JS Fiddle http://jsfiddle.net/9kUYC/2/
источник
Основываясь на ответе @Dominic Green, используя jQuery, вот решение, которое должно работать для изображений, которые шире, чем они высоки, или выше, чем они широки.
http://jsfiddle.net/grZLR/4/
Вероятно, есть более элегантный способ сделать JavaScript, но это работает.
источник
Будьте осторожны, если вы используете тему или что-то, они часто объявляют img max-width на 100%. Вы должны сделать ничего. Проверьте это :)
https://jsfiddle.net/o63u8sh4/
источник
Я помог создать плагин jQuery под названием Fillmore , который обрабатывает
background-size: cover
браузеры, которые его поддерживают, и имеет шим для тех, кто этого не делает. Посмотри!источник
Я думаю, что уже довольно поздно для этого ответа. В любом случае, надеюсь, это поможет кому-то в будущем. Я столкнулся с проблемой позиционирования карт в угловом положении. Есть карты, отображаемые для массива событий. Если ширина изображения события велика для карты, изображение должно быть показано обрезкой с двух сторон и высотой 100%. Если высота изображения длинная, нижняя часть изображения обрезается, а ширина составляет 100%. Вот мое чистое решение CSS для этого:
HTML:
CSS
источник
Попробуйте что-то вроде этого: http://jsfiddle.net/D7E3E/4/
Использование контейнера с переполнением: скрыто
РЕДАКТИРОВАТЬ: @ Доминик Грин избил меня.
источник
Это позволит заполнить изображения до определенного размера, не растягивая его или не обрезая его
источник
Чтобы разместить изображение в полноэкранном режиме, попробуйте это:
повторение фона: круглый;
источник
источник