С помощью некоторых элементов div и базовых стилей вы можете создавать базовые фигуры… А базовые фигуры? Можно делать сложные, как в геометрии!
Возможно, вы уже знаете, что с помощью CSS вы можете сделать много вещей, никаких реальных ограничений нет. Может быть, только ваше терпение заставить все работать. Но геометрия не так уж и сложна. Например, давайте начнем с самой простой формы: квадрат, а также, возможно, прямоугольник:
.square { width: 100px; height: 100px; background: #dd0000; } .rectangle { width: 200px; height: 100px; background: #dd0000; }
И все, что мы сделали здесь, это использовали элемент div, для которого мы установили ширину, высоту и цвет фона, чтобы сделать его видимым на странице. Ширина квадрата равна высоте, а ширина прямоугольника удвоена.
Но что, если мы сделаем что-то менее острое? Да, я имею в виду круг или овал. И для этого давайте воспользуемся двумя предыдущими формами, которые мы уже сделали:
.circle { width: 100px; height: 100px; background: #00dd00; border-radius: 100%; } .oval { width: 200px; height: 100px; background: #00dd00; border-radius: 100%; }
Это настолько просто, что все, что нам нужно добавить, это свойство border-radius. Исходя из этого, вы можете скруглить углы элемента, вы можете скруглить их только для того, чтобы форма выглядела более гладкой или удобной, или вы можете просто увеличить значение и сделать их идеально круглыми. Вам не нужно использовать значение 100% для этого, работает даже с 99px. На самом деле, я видел на многих веб-сайтах 99px или 999px вместо процентного значения. Я предпочитаю 100%, потому что для меня это имеет смысл: «Вы хотите что-то округлить? Сколько? С максимальной суммой? Итак… Он станет кругом?».
Давайте продолжим и создадим несколько треугольников. Теперь для этой формы есть несколько лайфхаков. Трудным способом было бы использовать несколько квадратов, только один из цветов прямоугольника, а с другими и свойство преобразования попытаться скрыть половину его квадратами цвета фона. Хорошая часть здесь заключается в том, что есть более простой способ сделать это. Мы можем использовать огромные рамки, и код будет выглядеть примерно так:
.triangle1 { border-left: 50px solid transparent; border-right: 50px solid transparent; border-bottom: 100px solid #0000dd; } .triangle2 { border-left: 100px solid transparent; border-bottom: 100px solid #0000dd; }
Если у вас есть вопросы вроде «Как?» или «Почему?» прямо сейчас я могу полностью понять это. Итак, давайте разобьем его на части. Если мы установим границу с большим значением, мы увидим, как это работает на самом деле.
.border1 { border-top: 50px solid cyan; border-right: 50px solid magenta; border-bottom: 50px solid yellow; border-left: 50px solid black; } .border2 { border-top: 50px solid cyan; border-right: 50px solid magenta; border-bottom: 50px solid yellow; border-left: 50px solid black; width: 50px; height: 50px; }
Граница образует треугольник, когда элемент заканчивается. В этом случае наш элемент имеет ширину или высоту 0 пикселей. Если мы увеличим его, скажем, на 50 пикселей по ширине и высоте, вы, вероятно, еще лучше поймете, что происходит. Как вы можете видеть, если элемент имеет размер, треугольники менее заострены и больше похожи на трапецию. И таким же образом вы можете сделать трапецию, если хотите, на основе треугольников, состоящих из границ и некоторой ширины и высоты.
Имейте в виду тот факт, что вы также можете использовать псевдоклассы :before или :after для создания более сложных форм. Например, пятиугольник создается с помощью :before следующим образом:
.pentagon { position: relative; width: 54px; box-sizing: content-box; border-width: 50px 18px 0; border-style: solid; border-color: brown transparent; } .pentagon:before { content: ""; position: absolute; height: 0; width: 0; top: -85px; left: -18px; border-width: 0 45px 35px; border-style: solid; border-color: transparent transparent brown; }
Мы используем трапецию в ее основании, а вершина состоит из треугольника, созданного в :before. Обе формы имеют одинаковый цвет и идеально выровнены, чтобы создать иллюзию того, что это только одна форма.
Как насчет чего-то более сложного сейчас? Из школы мы знаем, что трехмерный объект состоит из двухмерных фигур. Мы знаем, как создавать 2D-фигуры, поэтому давайте попробуем создать объект. Давайте создадим простой куб:
<div class="cube"> <div class="face front">Front</div> <div class="face back">Back</div> <div class="face right">Right</div> <div class="face left">Left</div> <div class="face bottom">Bottom</div> <div class="face top">Top</div> </div> .cube { position: relative; width: 100px; height: 100px; transform-style: preserve-3d; transform: rotateX(-45deg) rotateY(45deg); } .face { position: absolute; width: 100px; height: 100px; background-color: #333; color: #fff; text-align: center; font-size: 25px; line-height: 100px; } .front { transform: translateZ(50px); background-color: #666; } .back { transform: translateZ(-50px) rotateY(180deg); } .right { transform: rotateY(90deg) translateZ(50px); } .left { transform: rotateY(-90deg) translateZ(50px); background-color: #333; } .top { transform: rotateX(90deg) translateZ(50px); background-color: #444; } .bottom { transform: rotateX(-90deg) translateZ(50px); }
Здесь может быть много CSS только для простой 3D-формы, но давайте, мы работаем в 3-х измерениях. Для такого вида куба достаточно сделать только его половину, нижняя, задняя и правая стороны не видны, они есть, но из-за положения куба мы их не видим. Если хотите, можете скопировать весь код и попробовать сделать анимацию, в которой куб вращается, и тогда вы увидите все стороны.
Короче говоря, мы начали с классов «.cube» и «.face», чтобы создать наш шаблон того, каким должен быть куб, и после этого мы только расположили все стороны, чтобы они выглядели как куб на основе преобразования. Свойство преобразования настолько продвинуто, что я думаю, что могу написать статью только о нем, но сейчас мы сосредоточимся только на вращении и переводе. Вращение вращает фигуру по определенной оси, а перевод перемещает ее.
И теперь, когда вы знаете, как делать такие вещи, вы можете спросить: «А зачем мне что-то подобное на сайте?» и мой ответ: «Может быть, нет».
Это правда, что вы можете создавать приятные пользовательские элементы, такие как кнопки или навигационные панели, с помощью этих форм, вы можете делать сложные анимации или даже буквальное искусство с ними (если вы делаете сложное произведение искусства только с помощью CSS, я хотел бы увидеть это, есть люди что сделал с ним сумасшедшие вещи).
Но и вам не обязательно их использовать. Хорошая вещь о них заключается в том, что вы знаете о них, и если иногда вам нужно будет немного поиграть с некоторыми формами, вы будете знать, что CSS может это сделать.
Я хотел бы предложить вам некоторую биографию, чтобы углубиться в тему, если хотите, но, честно говоря, я не знаю хорошего веб-сайта или книги, которая объясняет все это. Итак, вам лучше всего поискать в Google что-то вроде: «Как сделать [форму] в CSS?» И наверняка найдете что-нибудь полезное.
Моей единственной рекомендацией будет раздел CSS из MDN (Mozilla Web Docs), где вы можете углубиться во все свойства CSS и, возможно, найдете что-то интересное, что сможете использовать.
И с учетом всего сказанного, оставайтесь творческими.