3D и CSS

Введение

Долгое время 3D было прерогативой настольных приложений. В последнее время с появлением современных смартфонов, имеющих доступ к собственному ускорению GPU, мы начали видеть, как 3D используется практически везде.

Обычно 3D в основном используется как устройство для игр или некоторых продвинутых пользовательских интерфейсов. Только с появлением преобразований перспективы в WPF и Silverlight подходящая модель для применения 3D-эффектов к элементам пользовательского интерфейса стала практичным решением для разработчиков приложений (в конце концов, 3D — это не совсем просто).

Модель CSS 3D-преобразования была представлена ​​в качестве черновой спецификации в марте 2009 года, чтобы позволить веб-разработчикам создавать интересные и привлекательные пользовательские интерфейсы, использующие преимущества 3D, позволяя авторам приложений применять трехмерные перспективные преобразования к любому визуальному элементу DOM.

Рабочий проект CSS 3D-преобразования представляет собой логическое расширение модели CSS 2D-преобразования , в котором представлены некоторые дополнительные свойства, в том числе: перспективы, повороты и преобразования в трехмерном пространстве.

Никогда еще мы не могли так легко создавать 3D-интерфейсы. Эти технологии снизили порог входа. Вам больше не нужно быть математическим гением, чтобы создавать 3D-элементы.

Следует отметить, что модуль CSS 3D предназначен для того, чтобы помочь разработчикам создавать насыщенные и визуально интересные приложения, а не для того, чтобы вы могли создавать захватывающие трехмерные миры.

Поддержка браузера и аппаратное ускорение

-webkit-перспектива

Browser Support

  • Хром: 36.
  • Край: 12.
  • Firefox: 16.
  • Сафари: 9.

Source

-webkit-преобразование-3d

Browser Support

  • Хром: 2.
  • Край: 12.
  • Firefox: 49.
  • Сафари: 4.

Source

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

Обнаружение особенностей

А как насчет обнаружения функций? Я надеялся, что вы не спросите! Разработчики используют такие инструменты, как Modernizr, для обнаружения поддержки определенных функций и возможностей браузера. Хотя можно обнаружить наличие поддержки 3D-преобразований, невозможно обнаружить наличие аппаратного ускорения, а аппаратное ускорение является ключевым компонентом.

Базовый образец

Нет ничего лучше, чем сразу приступить к делу. В этом примере мы применим базовый набор вращений произвольного элемента DOM.

Начнем с определения точки зрения на корневой элемент.

<div style="-webkit-perspective: 800; perspective: 800; margin: 100px 0 0 50px">

Перспектива важна, поскольку она определяет, как визуализируется глубина 3D-сцены, значения от 1 до 1000 дадут очень выраженный эффект, а значения свыше 1000 — менее выраженный. Затем мы добавляем iframe и применяем поворот на 30 градусов вокруг осей Z и Y.

<iframe
    src="http://www.html5rocks.com/"
    style="-webkit-transform: rotate3d(0, 1, 1, 30deg)"></iframe>

БАМ! Вот и все, элемент полностью интерактивен, и во всех отношениях это полноценный элемент DOM (кроме того, что теперь он выглядит еще круче). Если ваш браузер не поддерживает 3D-преобразования, ничего не произойдет. Вы увидите просто iframe без применения поворота. Если ваш браузер поддерживает 3D-преобразования, но без аппаратного ускорения, это может выглядеть немного странно.

Анимация

Что мне нравится в CSS3 3D преобразованиях, так это то, что они так красиво связаны с модулем CSS Transition. Анимации и переходы легко определить в CSS, и их применение к 3d не является исключением.

Анимировать элементы, к которым применена 3D-перспектива, легко. Просто установите стиль «transition» на «transform», добавьте длительность и функцию анимации. С этого момента любое изменение стиля «tranform» будет анимированным.

Мы переработали предыдущие примеры, чтобы использовать стили документа вместо встроенных стилей. Это не только проясняет пример, но и позволяет образцу использовать преимущество псевдоселектора :hover . Используя селектор :hover , переходы можно инициировать простым перемещением мыши по элементу. Потрясающе!

Краткое содержание

Это был всего лишь быстрый взгляд на некоторые из крутых эффектов, которые можно применить к любому видимому элементу DOM с помощью CSS 3D-преобразований. Есть еще много вещей, которые можно сделать, но которые не были рассмотрены в этом уроке.