Cover img css: object-fit — CSS | MDN

Содержание

css — Сложности со свойством object-fit внутри flex

Я хочу сделать первый раздел страницы, совпадающий по размеру с окном. В нем присутствует шапка и блок с картинкой, которая, сохраняя пропорции, заполняет место, оставшееся от шапки. Я использую flex для растягивания контейнера с картинкой до нужного размера, но свойство object-fit: cover у картинки при этом не работает. Для примера, без флекса — всё ок. (если подвигаете ширинур вьюпорта — сразу видно)

html,
body {
  height: 100%;
}

header {
  height: 100px;
  background-color: beige;
}

.first-screen {
  display: flex;
  flex-direction: column;
  height: 100vh;
  background-color: blue;
}

.first-show {
  background-color: #ccc;
  flex: auto;
}

.second-screen {
  height: 100vh;
}

.second-show {
  height: 100%;
}

img {
  object-fit: cover;
  object-position: center;
  width: 100%;
  height: 100%;
}
<div>
  <header>header
  </header>
  <div>
    <img src="http://bipbap. ru/wp-content/uploads/2017/09/Cool-High-Resolution-Wallpaper-1920x1080.jpg" alt="First slide">
  </div>
</div>
<div>
  <div>
    <img src="http://bipbap.ru/wp-content/uploads/2017/09/Cool-High-Resolution-Wallpaper-1920x1080.jpg" alt="First slide">
  </div>
</div>

Собственно вопросы: почему и как обойти?

  • css
  • flexbox
  • адаптивность

Пока увидел один способ решения: обернуть картинку в блок с position: absolute; top: 0; bottom: 0; Это больше похоже на хак, поэтому надеюсь на альтернативные способы.

html,
body {
  height: 100%;
}

header {
  height: 100px;
  background-color: beige;
}

.first-screen {
  display: flex;
  flex-direction: column;
  height: 100vh;
  background-color: blue;
}

.first-show {
  position: relative;
  background-color: #ccc;
  flex: auto;
}

.
img-container { position: absolute; top: 0; bottom: 0; } img { object-fit: cover; object-position: center; width: 100%; height: 100%; }
<div>
  <header>header
  </header>
  <div>
    <div>
      <img src="http://bipbap.ru/wp-content/uploads/2017/09/Cool-High-Resolution-Wallpaper-1920x1080.jpg" alt="First slide">
    </div>
  </div>
</div>

img динамически не растягивается на высоту элемента. Решения: если блок состоит только из картинки, то обертка div не нужна, а если в блоке будет контент — лучше картинку задавать через background(опять же поддержка ie11). Ниже приведу пример с сохранением img.

html,
body {
  height: 100%;
}

header {
  height: 100px;
  background-color: beige;
  flex:0 0 auto;
}

.first-screen {
  display: flex;
  flex-direction: column;
  height: 100vh;
  background-color: blue;
}

. first-show {
  background-color: #ccc;
  flex: 1 1 auto;
}

.second-show {
  height: 100vh;
}
img {
  width:100%;
  object-fit: cover;
  object-position: center;
}
<div>
  <header>header
  </header>
    <img src="http://bipbap.ru/wp-content/uploads/2017/09/Cool-High-Resolution-Wallpaper-1920x1080.jpg" alt="First slide">
</div>
<div>
    <img src="http://bipbap.ru/wp-content/uploads/2017/09/Cool-High-Resolution-Wallpaper-1920x1080.jpg" alt="First slide">
</div>

6

Ваш ответ

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Css свойства object-fit и object-position

Свойства object-fit и object-position используют для указания размеров и позиционирования медиа-контента указанного непосредственно в HTML. В основном это картинки выведенные с помощью тега img, но может быть и контент который выводится с помощью тегов video, iframe или embed.

Эти свойства не поддерживаются в Internet Explorer, поэтому их можно использовать только на тех проектах, где его поддержка не нужна.

Свойства object-fit и object-position в какой-то мере схожи со свойствами background-size

и background-position, только они применяются не в фону, а элементам вставленным непосредственно в HTML.

Свойства object-fit and object-position определяют как будет вести себя медиаконтент когда пространство выделенное под него будет становиться больше или меньше.

Давайте рассмотрим это на простом примере.
У нас есть следующий HTML и Css:

<img src="image-300x300.jpg"
  alt="Image…">
.img--cut {
  object-fit: cover;
  object-position: bottom;
}

Давайте разбираться:

  • наша картинка имеет исходный размер 300*300 пикселей, но в HTML указано, что она может занимать высоту 200 пикселей, при этом ее ширина задана в 300 пикселей.
  • в css стилях object-fit:cover указывает, что изображение должно быть растянуто по всей области элемента img так, чтобы не осталось свободного места.
  • а свойство object-position:bottom указывает, что при этом изображение должно выравниваться по нижнему краю элемента img

Значения свойства object-fit

Свойство object-fit указывает как именно нужно размещать встроенный медиа-контент в области размеры которой заданы свойствами в Css или HTML.

Значения object-fit применяются к картинке размером 150*150 пикселей.

Это очень похоже на то, как мы применяем свойство background-size для того, чтобы задать расположение фона элемента.

Вот варианты значений для свойства object-fit:

  • fill (default) — изображение заполняет всю выделенную область, при этом изображение может быть искажено, но не обрезано
  • contain — изображение не всегда заполняет всю выделенную область, контент не обрезается и не искажается и отображается полностью
  • scale-down
    — то же самое, что и свойство contain, но изображение никогда не будет увеличено больше. чем его реальный размер
  • cover — заполняет всё выделенное пространство не оставляя свободного места, не искажая контент, только обрезая его
  • none — сохраняет оригинальный размер и соотношение сторон, иногда обрезает изображение. иногда оставляет свободное пространство

На практике чаще всего применяется значение object-fit: cover.

Значения свойства object-position

Свойство object-position определяет относительно чего будет позиционироваться изображение при применении свойства object-fit. Оно имеет те-же значения, что и свойство background-size.

Варианты значений для свойства object-position.

Давайте рассмотрим значения с примеров:

  • 50% 50% (default) — располагает изображение по центру контейнера
  • 0 0 — располагает изображение в верхнем левом углу
  • 0 -50px — располагает изображение со смещением 0px относительно верха контейнера и смещает его влево на 50px за пределы контейнера
  • top right — располагает изображение в верхнем правом углу
  • bottom — располагает относительно нижнего края. Вторым значением берется значение по умолчанию, то есть center

Использование на практике

Оба свойства очень полезны для избежание искажений картинки, когда на сервере содержаться картинки с разным соотношением сторон и разных размеров.

Свойство object-fit для тега video работает очень хорошо, что может очень пригодиться при использовании видео для фона на сайте. К сожалению для iframe оно не работает.

Поддержка браузерами

Поскольку Edge был обновлен и теперь работает на движке Chromium, на данный момент только Internet Explorer 11 не поддерживает эти свойства.

На момент написания этой статьи, Internet Explorer все еще имеет существенную долю пользователей в некоторых странах (например здесь, в Чешской Республике), поэтому необходимо предусмотреть запасной вариант кода.

caniuse.com/object-fit

Как решать проблемы с поддержкой свойств в Internet Explorer

  1. Вместо использования object-fit/object-position для объекта, используйте изображение в качестве фона и примените к нему background-size/background-position.
    В качестве альтернативного варианта можн использвать свойства трансформации в сочетании с абсолютным позиционированием (решение на StackOverflow)
  2. Для IE11 можно использовать полифил fregante/object-fit-images. Но я не очень рекомендую использовать этот вариант, потому что это замедлит рендеринг в итак не самом быстром браузере.
  3. Определять браузеры, которые не поддерживают наши свойства (например с помощью библиотеки Modernizr) и применять к ним отдельный вариант кода. Например на StackOverflow есть решение, в котором предлагают изменять тег img на svg и решать проблему адаптации уже с ним.

Больше статей тут

fit — Свойство object-fit CSS устанавливает,как содержимое заменяемого элемента,такого как

В object-fit CSS наборы свойств , как содержание в замещаемых элементов , таких как <img> или <video> , должен быть изменен , чтобы соответствовать его контейнера.

Вы можете изменить выравнивание объекта содержимого заменяемого элемента в поле элемента, используя свойство object-position .

Try it

Syntax

object-fit: contain;
object-fit: cover;
object-fit: fill;
object-fit: none;
object-fit: scale-down;
/ * Глобальные значения * /
object-fit: inherit;
object-fit: initial;
object-fit: revert;
object-fit: revert-layer;
object-fit: unset;

Свойство object-fit объекта указывается как одно ключевое слово, выбранное из списка значений ниже.

Values

contain

Заменяемое содержимое масштабируется, чтобы сохранить его соотношение сторон и вписаться в поле содержимого элемента. Весь объект заполняет поле, сохраняя при этом его соотношение сторон, поэтому объект будет помещен в «почтовый ящик» , если его соотношение сторон не соответствует соотношению сторон поля.

cover

Размер заменяемого содержимого сохраняет соотношение сторон и заполняет все поле содержимого элемента. Если соотношение сторон объекта не совпадает с соотношением сторон его поля,то объект будет обрезан по размеру.

fill

Размер заменяемого содержимого позволяет заполнить поле содержимого элемента.Весь объект полностью заполняет поле.Если соотношение сторон объекта не совпадает с соотношением сторон его поля,то объект будет растянут до нужного размера.

none

Замененное содержимое не изменяет размер.

scale-down

Содержание имеет такой размер , как если бы none , или contain не были указаны, в зависимости от того приведет к меньшему размеру конкретного объекта.

Formal definition

Initial valuefill
Applies toreplaced elements
Inheritedno
Computed valueas specified
Animation typediscrete

Formal syntax

fill | contain | cover | none | scale-down

Examples

Установка объектной подгонки для изображения

HTML
<section>
  <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">
</section>
CSS
h3 {
  font-family: Courier New, monospace;
  font-size: 1em;
  margin: 1em 0 0.3em;
}
img {
  width: 150px;
  height: 100px;
  border: 1px solid #000;
  margin: 10px 0;
}
.narrow {
  width: 100px;
  height: 150px;
}
.fill {
  object-fit: fill;
}
. contain {
  object-fit: contain;
}
.cover {
  object-fit: cover;
}
.none {
  object-fit: none;
}
.scale-down {
  object-fit: scale-down;
}
Result

Specifications

Specification
Модуль изображений CSS, уровень 3
# the-object-fit

Browser compatibility

DesktopMobile
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebView AndroidChrome AndroidFirefox для AndroidOpera AndroidSafari на IOSSamsung Internet
object-fit

32

79

16-79

Поддерживается только для элементов <img> .

36

No

19

11.6-15

10

4. 4.3

32

36

19

12-14

10

2.0

See also

  • Другие изображения , связанные свойства CSS: object-position , image-orientation , image-rendering , image-resolution .
  • background-size

© 2005–2021 Авторы MDN.
Лицензия Creative Commons Attribution-ShareAlike License v2.5 или более поздняя.
https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit

Как установить фоновое изображение в CSS

Создание веб-сайта — отличный способ выразить себя. Хотя существует множество инструментов для создания веб-сайтов, написание их самостоятельно — это интересный способ узнать больше о том, как веб-сайты работают за кулисами. Хорошим проектом для начинающих является создание веб-сайта и добавление фонового изображения с помощью CSS. Этот проект научит вас работать как с HTML, так и с CSS.

Что такое CSS?

CSS означает каскадную таблицу стилей. Это язык программирования, который позволяет вам стилизовать языки разметки. Одним из таких языков разметки является HTML или язык гипертекстовой разметки. HTML используется для создания веб-сайтов. Хотя вы можете управлять некоторыми стилями веб-сайта с помощью HTML, CSS предлагает гораздо больше возможностей управления и дизайна.

Создание базового веб-сайта с помощью HTML

Поскольку CSS — это всего лишь язык стилей, чтобы его использовать, нам сначала нужно что-то для стиля. Нам будет достаточно очень простого веб-сайта, чтобы начать играть с CSS. На нашей странице будет отображаться «Hello World».

 Указанный язык: HTML не существует. 
 Генерация кода не удалась!! 
'

Если вы не знакомы с HTML, давайте быстро рассмотрим, что делают все элементы. Как уже упоминалось, HTML — это язык разметки, что означает, что он использует теги для обозначения того, что представляет собой текст. Всякий раз, когда вы видите слово, окруженное <> это тэг. Существует два типа тегов: тег, который отмечает начало раздела с помощью <>, и тег, который отмечает конец раздела с помощью . Текст внутри раздела также предназначен для облегчения понимания этого различия.

В нашем примере у нас есть четыре тега. Тег html указывает, какие элементы являются частью веб-сайта. Тег head содержит информацию заголовка, которая не отображается на странице, но необходима для ее создания. Все отображаемые элементы находятся между тело теги. У нас есть только один отображаемый элемент, тег p . Он сообщает веб-браузеру, что текст является абзацем.

Связано: 10 простых примеров кода CSS, которые вы можете изучить за 10 минут

Добавление CSS в HTML

Теперь, когда у нас есть простая страница, мы можем настроить стиль с помощью CSS. Наша страница сейчас довольно проста, и мы мало что можем сделать, но давайте начнем с выделения нашего абзаца, чтобы мы могли отличить его от фона, добавив границу.

 Указанный язык: HTML не существует. 
 Генерация кода не удалась!! 
'

Теперь наш абзац будет обведен черной рамкой. Добавление описания стиля в CSS к нашему тегу абзаца сообщает веб-сайту, как стилизовать абзац. Мы можем добавить больше описаний. Давайте увеличим пустое пространство или отступы вокруг нашего абзаца и отцентрируем наш текст.

 Указанный язык: HTML не существует. 
 Генерация кода не удалась!! 
'

Наш веб-сайт выглядит лучше, но наш HTML начинает выглядеть беспорядочно со всеми этими описаниями в теге абзаца. Мы можем переместить эту информацию в наш заголовок. Наш заголовок предназначен для информации, которая необходима нам для правильного отображения веб-сайта.

 Указанный язык: HTML не существует. 
 Генерация кода не удалась!! 
'

Теперь наш HTML легче читать. Вы заметите, что нам действительно пришлось изменить некоторые вещи. Тег стиля сообщает информацию о стиле веб-браузера, а также то, что нужно стилизовать. В нашем примере мы использовали два разных способа указать, что нужно стилизовать. p в теге стиля указывает веб-браузеру применить этот стиль ко всем тегам абзаца. Раздел #ourParagraph сообщает, что только элементы стиля с идентификатором наш пункт . Обратите внимание, что информация id была добавлена ​​к тегу p в нашем теле.

Импорт файла CSS на ваш веб-сайт

Добавление информации о стиле в заголовок делает наш код намного легче для чтения. Однако, если мы хотим оформить множество разных страниц одинаковым образом, мы должны добавить этот текст вверху каждой страницы. Это может показаться не таким уж трудоемким, в конце концов, вы можете скопировать и вставить его, но это создает много работы, если вы хотите изменить элемент позже.

Вместо этого мы сохраним информацию CSS в отдельном файле и импортируем этот файл для оформления страницы. Скопируйте и вставьте информацию между тегами стиля в новый файл CSS ourCSSfile. css .

 Указанный язык: HTML не существует. 
 Генерация кода не удалась!! 
'

Затем импортируйте файл в файл HTML.

 Указанный язык: HTML не существует. 
 Генерация кода не удалась!! 
'

Добавление фонового изображения с помощью CSS

Теперь, когда у вас есть прочная база в HTML и CSS, добавление фонового изображения не составит труда. Во-первых, определите, какому элементу вы хотите присвоить фоновое изображение. В нашем примере мы добавим фон на всю страницу. Это означает, что мы хотим изменить стиль корпуса на . Помните, что теги body содержат все видимые элементы.

 Указанный язык: HTML не существует. 
 Генерация кода не удалась!! 
'

Чтобы изменить стиль тела в CSS, сначала используйте тело ключевое слово. Затем добавьте фигурные скобки, как мы делали до {}. Вся информация о стиле для тела должна быть заключена в фигурные скобки. Атрибут стиля, который мы хотим изменить, — background-image . Атрибутов стиля много. Не надейтесь запомнить их все. Добавьте в закладки шпаргалку свойств CSS с атрибутами, которые вы хотите запомнить.

Связано: 8 классных HTML-эффектов, которые каждый может добавить на свой веб-сайт

После атрибута используйте двоеточие, чтобы указать, как вы будете изменять атрибут. Чтобы импортировать изображение, используйте URL() . это указывает на то, что вы используете ссылку для указания на изображение. Поместите местоположение файла в скобки между кавычками. Наконец, завершите строку точкой с запятой. Хотя пустое пространство не имеет значения в CSS, используйте отступы, чтобы облегчить чтение CSS.

Наш пример выглядит так:

Если ваше изображение отображается неправильно из-за размера изображения, вы можете изменить изображение напрямую. Однако в CSS есть атрибуты стиля фона, которые можно использовать для изменения фона. Изображения, которые меньше фона, будут автоматически повторяться в качестве фона. Чтобы отключить это, добавьте background-repeat: без повтора; к вашей стихии.

Также есть два способа сделать так, чтобы изображение покрывало весь фон. Во-первых, вы можете установить размер фона равным размеру экрана с помощью background-size: 100% 100%; , но это растянет изображение и может слишком сильно его исказить. Если вы не хотите, чтобы пропорции изображения менялись, вы также можете установить background-size равным cover . Обложка заставит фоновое изображение закрывать фон, но не искажать изображение.

Изменение цвета фона

Давайте изменим последнюю вещь. Теперь, когда у нас есть фон, наш абзац трудно читать. Сделаем его фон белым. Процесс аналогичен. Элемент, который мы хотим изменить, это #ourParagraph. # указывает, что «ourParagraph» является именем идентификатора. Затем мы хотим установить для атрибута background-color белый цвет.

 Указанный язык: HTML не существует.  
 Генерация кода не удалась!! 
'

Гораздо лучше.

Теперь, когда вы знаете, как изменить стиль различных HTML-элементов, предела нет! Основной метод изменения атрибутов стиля тот же. Определите элемент, который вы хотите изменить, и опишите, как изменить атрибут. Лучший способ узнать больше — поиграть с различными атрибутами. Испытайте себя, чтобы изменить цвет вашего текста дальше.

Обрезать изображения, встроенные в HTML

Опубликовано 12 февраля 2020 г.

Купить электронную книгу

Получите мою электронную книгу, посвященную разработке современного веб-интерфейса CSS3 и
.

Учить больше

Свойства object-fit и object-position используются для указания размера и положения внешних медиафайлов, вставленных в HTML, в основном изображений в теге , а также содержимого тега < видео> ,