Разметка:
<nav class="circle-menu">
<div class="center"></div>
<ul>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">4</a></li>
<li><a href="#">6</a></li>
</ul>
</nav>
Стили:
.circle-menu {
position: relative;
width: 400px;
height: 400px;
margin: 50px auto;
background-color: white;
box-shadow: 0 0 3px #cccccc;
}
.circle-menu ul {
position: absolute;
width: 300px;
height: 300px;
margin: 50px;
padding: 0;
list-style: none;
border-radius: 50%;
overflow: hidden;
}
.circle-menu .center {
position: absolute;
top: 195px;
left: 195px;
z-index: 1000;
border: 5px solid #34495e;
border-radius: 50%;
box-shadow: 0 0 3px #cccccc;
}
.circle-menu li {
position: absolute;
top: -10px;
left: -10px;
width: 160px;
height: 160px;
transform-origin: 100% 100%;
overflow: hidden;
}
.circle-menu li:nth-child(1) {
transform: rotate(0deg) skew(30deg);
}
.circle-menu li:nth-child(2) {
transform: rotate(60deg) skew(30deg);
}
.circle-menu li:nth-child(3) {
transform: rotate(120deg) skew(30deg);
}
.circle-menu li:nth-child(3) {
transform: rotate(120deg) skew(30deg);
}
.circle-menu li:nth-child(4) {
transform: rotate(180deg) skew(30deg);
}
.circle-menu li:nth-child(5) {
transform: rotate(240deg) skew(30deg);
}
.circle-menu li:nth-child(6) {
transform: rotate(300deg) skew(30deg);
}
.circle-menu li a {
display: block;
width: 160px;
height: 160px;
margin-top: 40px;
margin-left: 40px;
font-size: 0;
background: rgba(241, 196, 15, 0.5) url("icons/monitor-4x.png") no-repeat 50% 40%;
transition: background-color 0.5s;
transform: skew(-30deg) rotate(-60deg);
}
.circle-menu li:nth-child(even) a {
background-color: rgba(241, 196, 15, 0.75);
}
.circle-menu li a:hover {
background-color: rgba(241, 196, 15, 1);
}
/* Иконки */
.circle-menu li:nth-child(2) a {
background-image: url("icons/aperture-4x.png");
}
.circle-menu li:nth-child(3) a {
background-image: url("icons/audio-4x.png");
}
.circle-menu li:nth-child(4) a {
background-image: url("icons/battery-empty-4x.png");
}
.circle-menu li:nth-child(5) a {
background-image: url("icons/bluetooth-4x.png");
}
.circle-menu li:nth-child(6) a {
background-image: url("icons/browser-4x.png");
}
Техника для создания круглого меню:
- Переносим ось вращения пунктов в угол с помощью
transform-originи совмещаем этот угол с центром меню. - Наклоняем и поворачиваем пункты меню, используя формулы:
[угол сектора] = 360° / [количество пунктов меню] [поворот пункта n] = (n - 1) * [угол сектора] [угол наклона] = 90° - [угол сектора] - «Разнаклоняем» и разворачиваем содержимое пунктов меню:
[угол наклона содержимого] = -1 * [угол наклона пункта] [угол разворота] = -1 * (90° – ([угол сектора] / 2)) - Смещаем содержимое пунктов к центру круга.
- Закругляем контейнер меню с помощью
border-radiusи обрезаем всё лишнее с помощьюoverflow: hidden.
А после этих шагов можно применять дополнительное оформление. Например, задавать разные фоны пунктов, рамку для контейнера меню и так далее.
Давайте напоследок добавим третий пункт меню, чтобы у нас получился полукруг. Угол поворота третьего пункта будет равен 120°:
Серия заданий сделана по мотивам этой статьи Building a Circular Navigation with CSS Transforms. Примеры были адаптированы и упрощены для курса.
Результат: