А вот вторая будет определять с какой точки вы смотрите на объект. Я задал вид немного сверху (- 5em). Для того чтобы контейнер не слипался, добавим ему объема: transform- style: preserve- 3d; Перспектива задается для родительских элементов, чтобы мы видели как относительно ее двигаются дочерние объекты. Я добавил граням свойство прозрачности opacity: . Просмотреть пример. Настал черед боковых стенок. Ну и конечно добавим анимацию, чтобы увидеть все в объеме: @keyframes povorot .
Вот код для левой стенки. Настала очередь верхней и нижней грани. Для этого их подвинем по оси Y на половину ширины куба: transform: translate. Y(- 5em); И повернем на 9.
Код для верхней грани. Просмотреть пример. Последним шагом осталось поставить на место переднюю стенку. Просто сдвинем ее вперед.
Создаём вращающийся 3d cube на html5, css3. Используем библиотеку -prefix-free js Ссылка на архив с рецептом . В статье описывается как создать куб на чистом CSS, используя.
D- трансформации средствами CSS / Хабрахабр. Увидев на просторах сети пару впечатляющих примеров 3. D- трансформаций средствами CSS — заинтересовался, решил разобраться в теме, прочитал несколько статей, вроде бы что- то понял.
Но, как известно, теория без практики – как зомби — мертва, хоть и может съесть мозг. Для усвоения материала необходимо самому сделать что- нибудь любопытное с использованием прочитанного. Какой трехмерный объект сделать легче всего? Пожалуй, кубик. А чтобы результат получился интереснее и красивее, пусть это будет игральный кубик с точками на гранях. Поехали. Для нетерпеливых и тех, кто смотрит Хабр ради забавных картинок – конечный результат. Работает в Chrome, последних версиях Firefox, Safari.
Opera 1. 2. 0. 1 — пока никак, ну а про IE вы и сами все знаете. Стройматериалы. Для начала сделаем заготовку. Блок- контейнер, чтобы отцентрировать все на странице, блок- куб, в который будем вкладывать все составляющие нашей скульптуры, и «развертка» из пяти (шестую добавим потом) будущих граней куба.«Грани» представляют собой банальные квадратные div’ы, абсолютно спозиционированные в блоке- кубе: «единичку» оставим в центре, она послужит лицевой стороной, а все остальные состыкуем с ней, как на рисунке 1.
Покрасим их для веселья и наглядности в разные цвета, добавим внутреннюю тень – и хватит. Точки на гранях – тоже блоки с position: absolute, border- radius: 5. Маленькая ремарка: здесь и далее css- свойства для трансформаций указаны без префиксов, но в реальном коде, пока что, необходимо их использовать.
Также добавим кубику свойство transform: perspective(9. Чем больше значение, тем дальше находится точка «схождения линий», тем меньше выражен эффект искажения. Значения ниже 2. 00 приводят к диким результатам (например, рисунок 2), около 3. С рутиной закончили, начинается интересное. Сгибаем и клеим. Чтобы превратить нашу развертку в подобие кубика, нужно «согнуть» ее по линиям примыкания крайних граней к грани- 1. Для этого нам надо сделать две вещи.
Во- первых, установить для каждой грани ось, вокруг которой она будет вращаться. Дело в том, что по умолчанию блоки поворачиваются вокруг своего центра, а нам нужно несколько иное поведение – на рисунке 4 видно, что грань- 5 должна вращаться вокруг отрезка AB, грань- 2 вокруг BC, и так далее. Воспользуемся свойством transform- origin: y x. Например, для грани- 5 нужно ось X (горизонтальная) сдвинуть к нижнему краю, соответственно второе значение transform- origin должно быть 1. Значение Y в данном случае неважно, т.
Для грани- 2 все наоборот – значение X неважно, а Y должно быть установлено в 0, т. X, Y и Z задаются не как абсолютные величины, а как соотношение углов. Например, код transform: rotate. X и на 4. 5 (9. 0 * 1 / 2) градусов вокруг Y.
То же самое сделает и строчка transform: rotate. На рисунке 5 я постарался проиллюстрировать вращение блоков вокруг осей: серый прямоугольник – исходное положение блока, красным выделяется ось, вокруг которой происходит вращение, красный и зеленый прямоугольники – положение блока при повороте на - 6. Повернем грани со второй по пятую на 9. Куб почти готов, осталось только «закрыть» его. Закрываем крышкой и подаем к столу.
Последнюю грань нужно расположить там же, где «единичку», но «глубже» в экран на 2. Сделаем это с помощью свойства transform: translate. В нашем случае – движение по оси Z на минус 2. Одновременно повернем грань на 1. X – хотя, при значениях по умолчанию, «точки» будут отображаться с обеих ее сторон, правильнее будет поставить грань лицевой стороной к зрителю, а не внутрь куба. В итоге свойство transform для нашей «крышки» будет выглядеть следующим образом: transform: translate. Напоследок, с помощью банального opacity: 0.
Firefox, по невыясненной мной причине, работает только добавление этого свойства для отдельных граней, но не для всего блока- куба сразу) – так наш кубик становится немного похож на стеклянный, выглядит более презентабельно и, если честно, вызывает у автора приступ теплой ностальгии по тем временам, когда «компьютер» был непонятной машиной у папы на работе, а генератором псевдослучайных чисел во множестве игр выступал подобный игральный кубик. Let’s rock, let’s roll.
Кубик готов, но чтобы посмотреть на него с другой стороны, нужно лезть и править CSS – не самый user- friendly вариант, прямо скажем. Поступим по- другому.
В начало блока- контейнера (до куба) добавим четыре кнопки: < button class=. При наведении мыши на кнопку .
Одновременно с этим изменим перспективное искажение с помощью perspective(9. Как вы помните (помните, правда?), мы установили такое же значение для куба в начале работы, но если не объявить это свойство снова после того, как куб станет к нам задом, а к лесу (на обоях рабочего стола) передом, то и это искажение вывернется вместе с кубом – ближняя к зрителю часть будет уменьшена, а дальняя – расширена. Выглядит неправдоподобно, поэтому будем назначать perspective заново при каждом повороте.
Ну и чтобы наш куб не прыгал из одного положения в другое, а плавно вращался – добавим ему строчку transition: all 1s ease. В переводе на русский — скажем кубу плавно изменять все свойства (all), которые будут изменяться, в течение одной секунды (1s) и делать это по функции ease, т. Любители равномерности вместо ease могут указать linear – в таком случае кубик будет двигаться нудно и бездушно. Однако, Хьюстон, у нас еще одна проблема. Вращение идет вокруг центра грани- 1, а не центра самого куба – что, в общем, логично, ведь это она у нас вписана в блок- куб, а все остальные – «загнуты» или вынесены «вглубь». Впрочем, решается это довольно просто: нужно просто «подвинуть» все грани ближе к наблюдателю с помощью все того же translate. Вот теперь получилось неплохо.
Можно писать статью на Хабр, чтобы закрепить материал, поделиться изученным с коллегами и просто выпендриться. Ссылка на демо. Архив для самых любознательных. P. S. Пока писал статью и пробивался в песочницу, на хабре уже появилась похожая статья, но, думаю, они будут хорошо дополнять друг друга. Обновление: Важные дополнения от zapimir— 3. DTransform — это пока лишь черновик, а не стандарт, возможны изменения— IE1. За шаганием прогресса по планете удобно следить на caniuse.