В этой статье будет детально рассмотрен вопрос создания фигуры шестиугольника (hexagon) на CSS.
Материал целиком основан на замечательной статье CSS Hexagon Tutorial. В Сети имеется хорошая статья по примерам создания различных видов фигур на CSS, и располагается эта статья на блоге известного CSS-гуру Chris Coyier Shapes of CSS. Среди прочих фигур там есть и желанный шестиугольник
1
hexagon
с готовым CSS-кодом что называется, “бери и пользуйся”.
Но ведь такой подход для нас не интересен, правда? Это потом, когда мы изучим вопрос создания шестиугольника, мы будем делать так - нашел готовый код, скопировал к себе, подредактировал и готово! А сейчас мы пошагово пройдем весь путь, от начала и до конца - это даст нам понимание процесса.
Как будем строить hexagon
Фигура hexagon изначально кажется неприступной - не понятно, с какого боку к ней подойди, чтобы начать постороение шестиугольника на CSS. Однако, если внимательно присмотреться, то hexagon можно разделить на три простые фигуры:
Видно, что фигура состоит из двух одинаковых треугольников и одного прямоугольника. Построение треугольников на CSS выполняется очень просто - “CSS – почему треугольник это треугольник”, прямоугольника - вообще в два движения.
Поэтому, построение шестиугольника hexagon на CSS сводится к двух задачам:
создать два треугольника
создать один прямоугольник
Построение треугольников на CSS
Задачу создания треугольников на CSS начнем с построения обычного квадрата со стороной в
1
100px
и широкой границей
1
30px
определенного цвета
1
#789
:
“Раскрасим” границы квадрата для того, чтобы можно было визуально отличать их друг от друга:
Затем обнулим высоту
1
height
и ширину
1
width
нашего квадрата. Он “схлопнется”, оставив для нас видимой только его широкую границу со всех четырех сторон:
Теперь превратим полученную фигуру в настоящий треугольник. Для этого обнулим (уберем) у нее верхнюю границу
1
border-top
, а обе боковые границы
1
border-left
,
1
border-right
сделаем прозрачного
1
transparent
цвета:
У получившегося треугольника все стороны равны - высота и ширина по 30px каждая. Нам же необходимо “растянуть” треугольник в ширину, чтобы он у него появился тупой угол. Для этого нужно увеличить ширину боковых границ
1
border-left
,
1
border-right
треугольника, а ширину нижней границы
1
border-bottom
оставить прежней:
Задача создания треугольника нами выполнена. Теперь необходимо получить точно такой треугольник, только “направленный” вниз. Это просто - достаточно поменять нулевое значение между верхней и нижней границей фигуры. Все остальные значения останутся неизменными. Чуть не забыл сказать, что для “повернутого” треугольника придется создать в HTML-коде новый блок:
Первый шаг по созданию шестиугольника hexagon на CSS выполнен - у нас есть два одинаковых разнонаправленных треугольника. Теперь нужно создать “тело” для шестиугольника - прямоугольник.
Построение прямоугольника на CSS
Для создания прямоугольника на CSS достаточно прописать для нового блока три величины - высоту, ширину и фоновый цвет. Новый блок я размещу между двумя блоками-треугольниками.
А вот с размерами для прямоугольника нужно разобраться немного подробнее. У него ширина должна быть равна удвоенной ширине боковой границы треугольника:
А высота должна быть равна удвоенной высоте треугольника (или ширине верхней\нижней границы - кому как нравиться):
В результате код будет следующим:
Все - задача построения шестиугольника hexagon на CSS выполнена - все оказалось достаточно просто!
Создание сетки из hexagon
Теперь можно усложнить задачу и создать из фигур hexagon своеобразную сетку, а-ля пчелиные соты. Задача тривиальная и весь вопрос сводиться к нескольким CSS-свойствам:
1
float
,
1
overflow
,
1
margin
,
1
padding
.
Создаю первый ряд сетки:
Второй ряд сетки строиться аналогично, за тем лишь исключением, что его необходимо сдвинуть влево и вверх:
Дальше продолжать не имеет смысла - все остальные ряды строятся аналогично. Нужно только управлять ими с помощью соотвествующих классов, смещая влево или вверх:
Лучше перейдем к другому интересному вопросу - созданию такого же шестиугольника hexagon, но несколько иной формы, “повернутого”. У которого углы развернуты по-горизонтали, а не по-вертикали.
Построение повернутого hexagon на CSS
Задача создания развернутого hexagon почти ничем не отличается от задачи построения обычного шестиугольника. Только потребуется несколько дополнительных строчек кода.
Дело в том, что в этом случае нужны углы, которые будут располагаться горизонтально и “смотреть” влево или вправо. Помимо этого, понадобиться “плавание” влево
1
float: left;
.
Для блока - “тела” hexagon нужно будет изменить значения высоты или ширины на прямопротивоположные.
Но не буду голословным, а лучше создам один такой
1
hexagon
:
Добавлю несколько таких шестиугольников, чтобы получился полный ряд:
Отлично! Теперь нужно добавить еще один ряд - нижний. При этом опять придется немного модифицировать код, чтобы произвести смещение фигур влево и вверх:
Можно продолжать постороние рядов до бесконечности, получая сетку из hexagons все большего размера:
3D-проекция hexagons
Можно видоизменить внешний вид сетки из hexagons, воспользовавшись CSS3-свойством
1
transform
. Создаю отдельный класс, в котором прописываю такие свойстсва:
… и проверяю в окне браузера:
Hexagons с помощью псевдо-классов
Рассмотренный выше способ создания hexagons хорош, но имеет один недостаток - слишком много дополнительных блоков, одними из которых являются блоки для создания треугольников.
Можно (и нужно) значительно сократить код, воспользовавшись для этой цели псевдо-классами
1
:before
и
1
:after
. Давайте я так и поступлю, при этом возьму код из примера, не буду ничего выдумывать:
CSS Hexagon
Рассмотренный выше способ неплох, причем оба его варианта. Но для практического применения оба они достаточно трудоемкие. В Сети, помимо многих других подобного рода, имеется online CSS-генератор для создания hexagon в считанные минуты.
Адрес сервиса располагается здесь - CSS Hexagon. Помимо создания самого hexagon, там можно “прикрутить” к фигуре тень и границу, что просто великолепно!
В Visual Studio Code по умолчанию стоит настройка, которая отображает на владке Explorer вложенные папки таким образом:![VSC - Default Vi...… Continue reading