Применить трансформацию CSS3 к фоновым картинкам - «CSS3» » Новости мира Интернет
Инсайдер раскрыл главную игру ноябрьской подборки PS Plus до официального анонса - «Новости сети»
Инсайдер раскрыл главную игру ноябрьской подборки PS Plus до официального анонса - «Новости сети»
Yadro начала выпуска в Дубне мини-ПК под брендом Kvadra - «Новости сети»
Yadro начала выпуска в Дубне мини-ПК под брендом Kvadra - «Новости сети»
Учёные измерили предел разрешения глаза и объяснили, есть ли смысл в 8K-телевизорах - «Новости сети»
Учёные измерили предел разрешения глаза и объяснили, есть ли смысл в 8K-телевизорах - «Новости сети»
Samsung заполучила своего Джони Айва — впервые с 1938 года компания наняла главного дизайнера - «Новости сети»
Samsung заполучила своего Джони Айва — впервые с 1938 года компания наняла главного дизайнера - «Новости сети»
Представлен OnePlus 15 — флагман со Snapdragon 8 Elite Gen 5, тремя 50-Мп камерами и батарей на 7300 мА·ч - «Новости сети»
Представлен OnePlus 15 — флагман со Snapdragon 8 Elite Gen 5, тремя 50-Мп камерами и батарей на 7300 мА·ч - «Новости сети»
Edge для Android получит расширения с ПК-версии браузера - «Новости мира Интернет»
Edge для Android получит расширения с ПК-версии браузера - «Новости мира Интернет»
Reebok выпустила умное кольцо Smart Ring - «Новости мира Интернет»
Reebok выпустила умное кольцо Smart Ring - «Новости мира Интернет»
Paint научился менять стиль изображений с помощью ИИ - «Новости мира Интернет»
Paint научился менять стиль изображений с помощью ИИ - «Новости мира Интернет»
В 2ГИС добавили Линзы – персонализированные карты под разные задачи - «Новости мира Интернет»
В 2ГИС добавили Линзы – персонализированные карты под разные задачи - «Новости мира Интернет»
Выяснилось, что стоит за повышением цен, закрытием студий и отменой игр Xbox - «Новости сети»
Выяснилось, что стоит за повышением цен, закрытием студий и отменой игр Xbox - «Новости сети»
Новости мира Интернет » Самоучитель CSS » CSS3 » Применить трансформацию CSS3 к фоновым картинкам - «CSS3»

Масштабирование, наклон и поворот любого элемента возможен с помощью свойства CSS3 transform. Оно поддерживается всеми современными браузерами (с префиксами) и допускает изящную деградацию, к примеру:

#myelement {
  -webkit-transform: rotate(30deg);
  -moz-transform: rotate(30deg);
  -ms-transform: rotate(30deg);
  -o-transform: rotate(30deg);
  transform: rotate(30deg);

Хорошая штука. Однако вращается элемент целиком — его содержимое, границы и фоновая картинка. Что делать, если вы желаете повернуть только фоновое изображение? Или чтобы фон остался на месте, а элемент поворачивался?

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

К счастью, есть решение. В сущности, это хак, который добавляет фоновое изображение к псевдоэлементу :before или :after, а не к родительскому контейнеру. Псевдоэлемент может трансформироваться независимо.

Просмотр демонстрационной страницы

Трансформация только фона

У контейнера может не быть никаких стилей, но необходимо задать position: relative, поскольку наш псевдоэлемент располагается внутри. Также установите overflow: hidden, в противном случае фон будет выходить за пределы контейнера.

#myelement {
  position: relative;
  overflow: hidden;

Теперь мы можем создать абсолютно позиционированный псевдоэлемент с трансформируемым фоном. Свойство z-index задаём как -1, это гарантирует что фон появится под содержимым контейнера.

#myelement:before {
  content: "";
  position: absolute;
  width: 200%;
  height: 200%;
  top: -50%;
  left: -50%;
  z-index: -1;
  background: url(background.png) 0 0 repeat;
  -webkit-transform: rotate(30deg);
  -moz-transform: rotate(30deg);
  -ms-transform: rotate(30deg);
  -o-transform: rotate(30deg);
  transform: rotate(30deg);

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

Фиксация фона у трансформируемых элементов

Любые трансформации родительского контейнера применяются и к псевдоэлементам. Так что нам надо отменить трансформацию, например, если контейнер поворачивается на 30 градусов, фон должен повернуться на -30 градусов, чтобы он оказался в фиксированном положении:

#myelement {
  position: relative;
  overflow: hidden;
  -webkit-transform: rotate(30deg);
  -moz-transform: rotate(30deg);
  -ms-transform: rotate(30deg);
  -o-transform: rotate(30deg);
  transform: rotate(30deg);

#myelement:before {
  content: "";
  position: absolute;
  width: 200%;
  height: 200%;
  top: -50%;
  left: -50%;
  z-index: -1;
  background: url(background.png) 0 0 repeat;
  -webkit-transform: rotate(-30deg);
  -moz-transform: rotate(-30deg);
  -ms-transform: rotate(-30deg);
  -o-transform: rotate(-30deg);
  transform: rotate(-30deg);

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

Пожалуйста, посмотрите демонстрационную страницу для примера. Полный код хранится внутри HTML.

Эффект работает в IE9, Firefox, Chrome, Safari и Opera. IE8 не покажет никаких трансформаций, но фон появится.

IE6 и 7 не поддерживает псевдоэлементы, поэтому фон исчезнет. Однако, если вы хотите поддерживать эти браузеры, можно добавить фоновое изображение к контейнеру, а затем установить его как none с помощью современных селекторов или через условные комментарии.

Цитирование статьи, картинки - фото скриншот - Rambler News Service.
Иллюстрация к статье - Яндекс. Картинки.
Есть вопросы. Напишите нам.
Общие правила  поведения на сайте.

Масштабирование, наклон и поворот любого элемента возможен с помощью свойства CSS3 transform. Оно поддерживается всеми современными браузерами (с префиксами) и допускает изящную деградацию, к примеру: Хорошая штука. Однако вращается элемент целиком — его содержимое, границы и фоновая картинка. Что делать, если вы желаете повернуть только фоновое изображение? Или чтобы фон остался на месте, а элемент поворачивался? В настоящее время у W3C нет предложений по трансформации фонового изображения. Это было бы невероятно полезно, поэтому подозреваю, нечто появится в конце концов, но не поможет разработчикам, которые хотят использовать подобные эффекты сегодня. К счастью, есть решение. В сущности, это хак, который добавляет фоновое изображение к псевдоэлементу :before или :after, а не к родительскому контейнеру. Псевдоэлемент может трансформироваться независимо. Просмотр демонстрационной страницы Трансформация только фона У контейнера может не быть никаких стилей, но необходимо задать position: relative, поскольку наш псевдоэлемент располагается внутри. Также установите overflow: hidden, в противном случае фон будет выходить за пределы контейнера. Теперь мы можем создать абсолютно позиционированный псевдоэлемент с трансформируемым фоном. Свойство z-index задаём как -1, это гарантирует что фон появится под содержимым контейнера. Обратите внимание, что вам, возможно, потребуется настроить ширину псевдоэлемента, его высоту и положение. К примеру, если вы используете повторяющееся изображение, область поворота должна быть больше самого контейнера, чтобы полностью вместить фон. Фиксация фона у трансформируемых элементов Любые трансформации родительского контейнера применяются и к псевдоэлементам. Так что нам надо отменить трансформацию, например, если контейнер поворачивается на 30 градусов, фон должен повернуться на -30 градусов, чтобы он оказался в фиксированном положении: Опять же, необходимо настроить размер и положение чтобы фон адекватно вписывался в родительский контейнер. Пожалуйста, посмотрите демонстрационную страницу для примера. Полный код хранится внутри HTML. Эффект работает в IE9, Firefox, Chrome, Safari и Opera. IE8 не покажет никаких трансформаций, но фон появится. IE6 и 7 не поддерживает псевдоэлементы, поэтому фон исчезнет. Однако, если вы хотите поддерживать эти браузеры, можно добавить фоновое изображение к контейнеру, а затем установить его как none с помощью современных селекторов или через условные комментарии.

Смотрите также

А что там на главной? )))



Комментарии )))