- Краткий обзор «object-fit» и «object-position»
- Для начала, подробнее про object-fit
- Перейдём к следующему из моих любимых свойств: object-position .
- Свойства object-fit и object-position
- 1. Свойство object-fit
- Поддержка браузерами
- 2. Свойство object-position
- Css свойства object-fit и object-position — адаптация картинок встроенных в HTML
- Значения свойства object-fit
- Значения свойства object-position
- Использование на практике
- Поддержка браузерами
- object-position
- Синтаксис
- Значения
- Формальное определение
- Формальный синтаксис
- Примеры
- Позиционирование изображений
- Отзывчивые изображения: CSS-приёмы, которые помогают экономить время
- Подход №1: background-image
- Подход №2: object-fit
- ▍О поддержке object-fit
- Подход №3: способ, которым пользуется Netflix
- Подход №4: height
- Подход №5: управление изображениями и производительность
- Итоги
Краткий обзор «object-fit» и «object-position»
Последнее время object-fit и object-position — мои любимые CSS-свойства. С ними разработчики могут управлять содержимым внутри img или video , подобно манипулированию содержимым background с помощью background-position и background-size .
Для начала, подробнее про object-fit
Это свойство определяет, как элемент вроде img подстраивается под доступные ширину и высоту своего содержимого. С object-fit можно приказать содержимому заполнить этот бокс различными способами, например, «сохранить эти пропорции!» или «растянуться и занять как можно больше места!»
Это изображение 400х260px. Если добавить к нему…
… то в итоге получим неуклюжее искажение, поскольку изображение сплющивается, чтобы уместиться в эти рамки:
Содержание в нашем img займёт всё доступное пространство в своём новом боксе, созданном при изменении его высоты и ширины, «ломая» тем самым его исходные пропорции.
Чтобы и сохранить пропорции изображения и заполнить всю доступную область, воспользуемся object-fit :
Слева исходное изображение, а справа — изображение обрезанное по бокам, которое теперь сохраняет наши пропорции! Может в таком масштабе это и не выглядит впечатляющим, но как только мы столкнёмся с разработкой более реалистичных интерфейсов, вот тогда-то object-fit и проявит себя во всей красе.
Возьмём другой пример:
Здесь у нас два изображения, которые должны занимать 50% ширины окна браузера (чтобы они стояли бок о бок) и 100% высоты. Для этого воспользуемся единицами области просмотра.
Проблема всплывает, когда при изменении размера экрана меняются и пропорции изображения, что приводит к всевозможным странностям. А нам бы хотелось сохранить их пропорции, как и в предыдущем демо, так что для этого можно использовать тот же метод. object-fit: cover , выручай!
Попробуйте снова изменить размер экрана. Странности с пропорциями исчезли, так ведь? Это также весьма полезно для изображений с различными размерами, поскольку они фактически будут обрезаны по границам бокса.
cover — лишь одно из многих значений для object-fit , о которых более подробно можно почитать в справочнике, но пока что это единственное значение, которое кажется мне наиболее полезным для повседневной разработки интерфейсов.
Перейдём к следующему из моих любимых свойств: object-position .
Воспользуемся уже знакомым изображением и этими стилями:
Здесь стоит отметить пару вещей: для правильной работы object-position нужно объявить размеры для изображения, а чтобы изображение не заполняло весь бокс (как это происходит по умолчанию), а его можно было сдвинуть, нужно установить ему object-fit: none . Это может показаться странным, но всё дело в том, что по умолчанию для изображения устанавливается object-fit: fill , даже если не объявлять его специально.
Что касается поведения по умолчанию, без значения object-position центрирует все объекты по горизонтали и вертикали:
Первое значение смещает изображение влево или вправо, а второе — вверх или вниз. Здесь можно поэкспериментировать с этими значениями:
Мы можем даже «протолкнуть» изображение внутрь его области контента, так что можно будет увидеть background-color , который мы задали раньше
Но насколько это полезно? Хороший вопрос! Вот в недавнем проекте мне потребовалось сдвинуть к центру конкретный участок изображения, и тем самым привлечь внимание читателя. Загрузка нового изображения не требуется, поэтому в этом случае не понадобится элемент
, всё, что мы хотели — немного сдвинуть изображение.
Помимо смещения фокуса на нужную часть изображения, не очень представляю, для чего еще это может быть полезно на практике. Но я повозился с object-position , чтобы продемонстрировать, как можно скрыть части изображения, а затем по клику показывать его по кусочкам, как в этом демо:
Я не эспериментировал, как и для чего можно использовать это для элементов . Может быть, видео на весь экран, заполняющее его без черных полос по краям? Чтобы полностью раскрыть потенциал этих свойств, изучить предстоит ещё очень много.
Источник
Свойства object-fit и object-position
1. Свойство object-fit
Свойство object-fit определяет, каким образом содержимое замещаемых элементов будет подогнано к краям контейнера тега в случае, когда для элемента заданы ширина и высота, отличные от его собственных размеров.
Замещаемыми элементами являются элементы, чьи размеры и внешний вид определяются внешним ресурсом. К ним относятся элементы , , , , и в случае когда они содержат встраиваемое содержимое, а также элемент , использующий пользовательские элементы управления.
Свойство object-fit масштабирует, обрезает или растягивает содержимое замещаемых элементов. Свойство хорошо поддерживается в последних версиях Chrome, Firefox и Safari. Для браузера IE8-11 можно использовать полифил (библиотеку, добавляющую в старые браузеры поддержку свойств, работающих в современных браузерах).
Поддержка браузерами
IE: не поддерживает
Firefox: 36.0
Chrome: 31.0
Safari: 7.1 только object-fit, 10.0 полная поддержка
Opera: 19.0
iOS Safari: 8.0 только object-fit, 10.1 полная поддержка
Opera Mini: -o-
Android: 4.4.4
Chrome for Android: 54.0
| object-fit | |
|---|---|
| fill | Значение по умолчанию. Содержимое замещаемого элемента полностью заполняет область контейнера тега, используя его высоту и ширину. |
| contain | Содержимое элемента масштабируется, выравниваясь по центру с сохранением пропорций таким образом, чтобы полностью поместиться внутри контейнера. |
| cover | Содержимое элемента обрезается, выравниваясь по центру с сохранением пропорций таким образом, чтобы полностью заполнить область контейнера. |
| scale-down | Содержимое элемента выбирает из двух значений none и contain то значение, которое даёт меньшие размеры. |
| none | Замещаемое содержимое не изменяет свои собственные размеры, чтобы поместиться и заполнить область контейнера. |
| initial | Устанавливает это свойство в значение по умолчанию. |
| inherit | Наследует значение свойства от родительского элемента. |
2. Свойство object-position
Свойство object-position используется в сочетании с object-fit и задаёт положение содержимого замещаемого элемента внутри контейнера относительно координатных осей X и Y. Значение по умолчанию 50% 50% . Свойство анимируется. Не наследуется.
Источник
Css свойства object-fit и object-position — адаптация картинок встроенных в HTML
Свойства object-fit и object-position используют для указания размеров и позиционирования медиа-контента указанного непосредственно в HTML. В основном это картинки выведенные с помощью тега img, но может быть и контент который выводится с помощью тегов video, iframe или embed.
Эти свойства не поддерживаются в Internet Explorer, поэтому их можно использовать только на тех проектах, где его поддержка не нужна.
Свойства object-fit и object-position в какой-то мере схожи со свойствами background-size и background-position, только они применяются не в фону, а элементам вставленным непосредственно в HTML.
Давайте рассмотрим это на простом примере.
У нас есть следующий HTML и Css:
- наша картинка имеет исходный размер 300*300 пикселей, но в HTML указано, что она может занимать высоту 200 пикселей, при этом ее ширина задана в 300 пикселей.
- в css стилях object-fit:cover указывает, что изображение должно быть растянуто по всей области элемента img так, чтобы не осталось свободного места.
- а свойство object-position:bottom указывает, что при этом изображение должно выравниваться по нижнему краю элемента img
Значения свойства object-fit
Свойство object-fit указывает как именно нужно размещать встроенный медиа-контент в области размеры которой заданы свойствами в Css или HTML.
Это очень похоже на то, как мы применяем свойство background-size для того, чтобы задать расположение фона элемента.
Вот варианты значений для свойства object-fit:
- fill (default) — изображение заполняет всю выделенную область, при этом изображение может быть искажено, но не обрезано
- contain — изображение не всегда заполняет всю выделенную область, контент не обрезается и не искажается и отображается полностью
- scale-down — то же самое, что и свойство contain, но изображение никогда не будет увеличено больше. чем его реальный размер
- cover — заполняет всё выделенное пространство не оставляя свободного места, не искажая контент, только обрезая его
- none — сохраняет оригинальный размер и соотношение сторон, иногда обрезает изображение. иногда оставляет свободное пространство
На практике чаще всего применяется значение object-fit: cover.
Значения свойства object-position
Свойство object-position определяет относительно чего будет позиционироваться изображение при применении свойства object-fit. Оно имеет те-же значения, что и свойство background-size.
Давайте рассмотрим значения с примеров:
- 50% 50% (default) — располагает изображение по центру контейнера
- 0 0 — располагает изображение в верхнем левом углу
- 0 -50px — располагает изображение со смещением 0px относительно верха контейнера и смещает его влево на 50px за пределы контейнера
- top right — располагает изображение в верхнем правом углу
- bottom — располагает относительно нижнего края. Вторым значением берется значение по умолчанию, то есть center
Использование на практике
Оба свойства очень полезны для избежание искажений картинки, когда на сервере содержаться картинки с разным соотношением сторон и разных размеров.
Свойство object-fit для тега video работает очень хорошо, что может очень пригодиться при использовании видео для фона на сайте. К сожалению для iframe оно не работает.
Поддержка браузерами
Поскольку Edge был обновлен и теперь работает на движке Chromium, на данный момент только Internet Explorer 11 не поддерживает эти свойства.
На момент написания этой статьи, Internet Explorer все еще имеет существенную долю пользователей в некоторых странах (например здесь, в Чешской Республике), поэтому необходимо предусмотреть запасной вариант кода.
Источник
object-position
CSS-свойство object-position определяет выравнивание контента выбранного замещаемого элемента внутри блока элемента. На областях блока, не покрытых объектом замещаемого элемента, будет отображаться фон элемента.
Вы можете задавать способ подстройки собственного размера объекта замещаемого элемента (т. е., его естественного размера) под размер блока элемента, используя свойство object-fit .
Синтаксис
Значения
(en-US) От одного до четырёх значений, которые определяют 2D-позицию элемента. Могут использоваться как абсолютные, так и относительные значения сдвигов.
Примечание: Позиция может быть даже такой, что замещаемый элемент будет отрисовываться за пределами своего блока.
Формальное определение
| Начальное значение | 50% 50% |
|---|---|
| Применяется к | заменяемые элементы |
| Наследуется | да |
| Проценты | относятся к ширине и высоте самого элемента |
| Обработка значения | как указано |
| Animation type | repeatable list of simple list of length, percentage, or calc |
Формальный синтаксис
Примеры
Позиционирование изображений
Здесь мы видим HTML, содержаний два -элемента, отображающие логотипы MDN.
CSS содержит стандартные стили для самого -элемента, а также отдельные стили для обоих изображений.
Первое изображение расположено с отступом в 10 пикселей относительно левого края блока элемента. Второе изображение расположено своим правым краем впритык к правому краю блока элемента и сдвинуто вниз на 10% высоты блока элемента.
Источник
Отзывчивые изображения: CSS-приёмы, которые помогают экономить время
Если вы занимаетесь веб-разработкой, то высока вероятность того, что вам знакомы два чудовища, о которых пойдёт речь в статье, перевод которой мы сегодня публикуем. Речь идёт об изображениях и о дедлайнах. Иногда, по каким-то причинам, картинки никак не хотят помещаться в те места макетов страниц, которые для них предназначены, а вы не можете потратить несколько часов на то, чтобы с этим разобраться.
Автор этого материала говорит, что он часто сталкивался с подобной проблемой, и эти столкновения кое-чему его научили. Здесь он хочет рассказать о пяти подходах к управлению размерами изображений, которые нравятся ему больше всего.
Подход №1: background-image
Пятница. Пять часов вечера. Вам надо срочно доделать некую страницу. Всё готово, проблема лишь в картинках, которые никак не помещаются туда, где им положено быть. Если это случилось с вами — вот одно волшебное средство, которое вас выручит:
Выглядит знакомо? Мы все это делали когда-то. Не наводил ли вас это на мысли о мошенничестве?
Использование свойств background весьма полезно, они просто делают то, что от них ожидается. Однако стоит помнить о том, что применять их следует лишь для тех изображений, которые не являются частью основного содержимого страницы, для изображений, заменяющих текст, и в некоторых особых случаях.
Подход №2: object-fit
Что если я скажу, что свойство object-fit применимо к элементам ? Оно, кстати, работает и с видео.
Вот и всё. Обратите внимание на то, что свойству object-fit можно назначить значение contain .
▍О поддержке object-fit
К несчастью, object-fit не будет работать в IE и в старых версиях Safari, однако, для таких случаев имеется полифилл.
Вот сведения о поддержке этой возможности, взятые отсюда.
Поддержка object-fit настольными браузерами
→ Вот пример использования object-fit
Подход №3: способ, которым пользуется Netflix
То, о чём мы только что говорили, может показаться интересным, но в устаревших браузерах, без полифиллов, работать это не будет. Если вам нужно что-то универсальное, возможно, то, о чём мы будем говорить сейчас, вам подойдёт. Этот метод, один из моих любимых, работает везде.
Заключается он в том, что изображение нужно поместить в родительский элемент, свойство position которого установлено в значение relative , а свойство padding задано в процентном выражении. В результате изображение займёт всю свободную область родительского элемента. Выглядит это так:
Тут вы можете подумать о том, что это слишком сложно. Однако, после того как вы поймёте смысл этого приёма, вы осознаете, что он очень прост и удобен. К тому же, этот приём широко используется, например, в Netflix.
Взгляните на имена классов
→ Вот пример реализации этого приёма
Подход №4: height
Тут для управления размерами изображения используется свойство height: auto , и, кроме того, свойство max-width . Вполне возможно, что вам этот приём уже знаком:
Такой подход применим в большинстве случаев, тогда, когда ваш макет не слишком сложен.
Подход №5: управление изображениями и производительность
Под «производительностью» я тут понимаю время загрузки страниц. Большое изображение может очень долго загружаться, что создаст у пользователя впечатление того, что ваши страницы работают медленно, особенно, если эти страницы просматривают на мобильных устройствах.
Знаете ли вы о том, что в современных браузерах можно менять источник изображения в зависимости от ширины страницы? Именно для этого существует атрибут srcset .
Итоги
- Если ваше изображение не является частью содержимого страницы — используйте background-image .
- Если поддержка IE вас не интересует — воспользуйтесь object-fit .
- Техника с применением контейнера со специально настроенным свойством padding , используемая Netflix, работает везде.
- В большинстве случаев для решения проблемы с картинками достаточно использовать в CSS свойство height: auto ;
- Если вы стремитесь сократить время загрузки страниц, используйте атрибут srcset для загрузки изображений меньших размеров на мобильных устройствах.
Надеемся, рассмотренные здесь подходы к работе с изображениями вам пригодятся.
Источник