У меня есть сайт с большим количеством страниц и различными фоновыми изображениями, и я отображаю их из CSS, например:
body.page-8 {
background: url("../img/pic.jpg") no-repeat scroll center top #000;
background-size: cover;
}
Однако я хочу показать разные (полноэкранные) изображения на одной странице, используя <img>
элементы, и я хочу, чтобы они имели те же свойства, что и указанное выше background-image: cover;
свойство (изображения не могут отображаться из CSS, они должны отображаться из документа HTML).
Обычно я использую:
div.mydiv img {
width: 100%;
}
Или:
div.mydiv img {
width: auto;
}
сделать картинку полной и отзывчивой. Однако изображение слишком сильно сжимается ( width: 100%
), когда экран становится слишком узким, и отображает фоновый цвет тела на нижнем экране. Другой метод, width: auto;
только делает изображение полноразмерным и не реагирует на размер экрана.
Есть ли способ отобразить изображение так же, как это background-size: cover
делается?
Ответы:
Решение № 1 - Свойство подгонки объекта (отсутствует поддержка IE )
Просто установите
object-fit: cover;
на img.Смотрите MDN - относительно
object-fit: cover
:Кроме того, посмотрите эту демонстрацию Codepen, которая сравнивает
object-fit: cover
примененный к изображению сbackground-size: cover
приложенным к фоновому изображениюРешение № 2 - заменить IMG на фоновое изображение с CSS
источник
На самом деле существует довольно простое решение CSS, которое работает даже в IE8:
источник
Предполагая, что вы можете организовать элемент контейнера, который хотите заполнить, это работает, но выглядит немного хакерским. По сути, я просто использую
min/max-width/height
большую область, а затем масштабирую эту область обратно в исходные размеры.источник
Я нашел простое решение для эмуляции обложки и содержимого, которое является чистым CSS и работает для контейнеров с динамическими размерами, а также не накладывает никаких ограничений на соотношение изображений.
Обратите внимание, что если вам не нужно поддерживать IE или Edge до 16, то вам лучше использовать подгонку объекта.
Размер фона: обложка
Здесь используется 1000%, если естественный размер изображения больше, чем размер отображаемого изображения. Например, если изображение имеет размер 500x500, а контейнер - только 200x200. При таком решении размер изображения будет изменен до 2000x2000 (из-за минимальной ширины / минимальной высоты), а затем уменьшен до 200x200 (из-за
transform: scale(0.1)
).Коэффициент x10 можно заменить на x100 или x1000, но, как правило, не идеально, чтобы изображение 2000x2000 отображалось с разрешением 20x20 дел. :)
background-size: содержит
Следуя тому же принципу, вы также можете использовать его для эмуляции
background-size: contain
:источник
transform
во многих ответахНет , вы не можете получить это совсем как,
background-size:cover
но ..Этот подход чертовски близок: он использует JavaScript, чтобы определить, является ли изображение альбомным или портретным, и соответственно применяет стили.
JS
CSS
http://jsfiddle.net/b3PbT/
источник
Мне нужно было подражать
background-size: contain
, но я не мог использоватьobject-fit
из-за отсутствия поддержки. У моих изображений были контейнеры с определенными размерами, и это помогло мне:источник
min-height: 100%; max-height:100%;
и получить эквивалент background-size: cover;min-height: 100%; max-height:100%;
не будет сохранять соотношение сторон, поэтому не совсем эквивалентно.Попробуйте установить как
min-height
иmin-width
сdisplay:block
:( скрипка )
При условии, что содержащий элемент вашего изображения является
position:relative
илиposition:absolute
, изображение покроет контейнер. Однако это не будет центрировано.Вы можете легко центрировать изображение, если знаете, будет ли оно переполнено по горизонтали (установлено
margin-left:-50%
) или вертикально (установленоmargin-top:-50%
). Может быть возможно использовать медиа-запросы CSS (и немного математики), чтобы понять это.источник
С помощью CSS вы можете моделировать
object-fit: [cover|contain];
. Это использоватьtransform
и[max|min]-[width|height]
. Это не идеально. Это не работает в одном случае: если изображение шире и короче контейнера.источник
Что вы можете сделать, это использовать атрибут 'style', чтобы добавить фоновое изображение к элементу, таким образом, вы все равно будете вызывать изображение в HTML, но вы все равно сможете использовать поведение background-size: cover css:
HTML:
CSS:
Вот как я добавляю поведение background-size: cover к элементам, которые мне нужно динамически загружать в HTML. Затем вы можете использовать классные классы CSS, такие как background-position: center. бум
источник
Для IE вам также нужно включить вторую строку - ширина: 100%;
источник
Мне не разрешено «добавлять комментарии», так что это делает, но да, то, что сделал Эру Пенкман, в значительной степени замечательно, чтобы получить его в качестве фонового покрытия, все, что вам нужно сделать, это изменить
К
источник
Я знаю, что это старо, однако многие решения, которые я вижу выше, имеют проблему с изображением / видео, которое слишком велико для контейнера, поэтому фактически не действует как крышка размера фона. Однако я решил создать «служебные классы», чтобы они работали с изображениями и видео. Вы просто передаете контейнеру класс .media-cover-wrapper, а сам элемент мультимедиа - класс .media-cover
Тогда у вас есть следующий jQuery:
При звонке не забудьте позаботиться об изменении размера страницы:
Тогда следующий CSS:
Да, это может потребовать jQuery, но он реагирует довольно хорошо и действует точно так же, как background-size: cover, и вы можете использовать его на изображениях и / или видео, чтобы получить дополнительную ценность для SEO.
источник
Мы можем принять ZOOM подход. Мы можем предположить, что максимум 30% (или больше до 100%) может быть эффектом масштабирования, если высота изображения ИЛИ ширина меньше желаемой высоты ИЛИ ширины. Мы можем скрыть оставшуюся ненужную область с переполнением: скрыто.
Это позволит настроить изображения с различной шириной или высотой.
источник
встречал такие же точные симптопы. выше работал для меня.
источник