С помощью некоторых элементов 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 и, возможно, найдете что-то интересное, что сможете использовать.
И с учетом всего сказанного, оставайтесь творческими.