Меню №1
- 6,21 КБ
- CSS, HTML
- Меню
- анимация, вертикальное, гамбургер, мобильное
- Лицензия MIT
<section class="top-nav-menu-1">
<div>
Логотип
</div>
<input id="menu-1-toggle" type="checkbox" />
<label class="menu-1-button-container" for="menu-1-toggle">
<div class="menu-1-button"></div>
</label>
<ul class="menu-1">
<li>Раз</li>
<li>Два</li>
<li>Три</li>
<li>Четыре</li>
<li>Пять</li>
</ul>
</section>
.top-nav-menu-1 {
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-webkit-flex-direction: row;
-moz-box-orient: horizontal;
-moz-box-direction: normal;
flex-direction: row;
-webkit-box-align: center;
-webkit-align-items: center;
-moz-box-align: center;
align-items: center;
-webkit-box-pack: justify;
-webkit-justify-content: space-between;
-moz-box-pack: justify;
justify-content: space-between;
background: -webkit-gradient(linear, right top, left top, from(#f46b45), to(#eea849));
background: -webkit-linear-gradient(right, #f46b45, #eea849);
background: -moz-linear-gradient(right, #f46b45, #eea849);
background: -o-linear-gradient(right, #f46b45, #eea849);
background: linear-gradient(to left, #f46b45, #eea849);
color: #fff;
height: 17px;
padding: 1em;
border: 1px solid #333;
position: relative;
width: 140px;
}
.menu-1 {
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-webkit-flex-direction: row;
-moz-box-orient: horizontal;
-moz-box-direction: normal;
flex-direction: row;
list-style-type: none;
margin: 0;
padding: 0;
}
.menu-1 > li {
margin: 0 1rem;
overflow: hidden;
}
.menu-1-button-container {
display: none;
height: 100%;
width: 30px;
cursor: pointer;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-moz-box-orient: vertical;
-moz-box-direction: normal;
flex-direction: column;
-webkit-box-pack: center;
-webkit-justify-content: center;
-moz-box-pack: center;
justify-content: center;
-webkit-box-align: center;
-webkit-align-items: center;
-moz-box-align: center;
align-items: center;
}
#menu-1-toggle {
display: none;
}
.menu-1-button,
.menu-1-button::before,
.menu-1-button::after {
display: block;
background-color: #fff;
position: absolute;
height: 4px;
width: 30px;
-webkit-transition: -webkit-transform 400ms cubic-bezier(0.23, 1, 0.32, 1);
transition: -webkit-transform 400ms cubic-bezier(0.23, 1, 0.32, 1);
-o-transition: -o-transform 400ms cubic-bezier(0.23, 1, 0.32, 1);
-moz-transition: transform 400ms cubic-bezier(0.23, 1, 0.32, 1), -moz-transform 400ms cubic-bezier(0.23, 1, 0.32, 1);
transition: transform 400ms cubic-bezier(0.23, 1, 0.32, 1);
transition: transform 400ms cubic-bezier(0.23, 1, 0.32, 1), -webkit-transform 400ms cubic-bezier(0.23, 1, 0.32, 1), -moz-transform 400ms cubic-bezier(0.23, 1, 0.32, 1), -o-transform 400ms cubic-bezier(0.23, 1, 0.32, 1);
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
border-radius: 2px;
}
.menu-1-button::before {
content: "";
margin-top: -8px;
}
.menu-1-button::after {
content: "";
margin-top: 8px;
}
#menu-1-toggle:checked + .menu-1-button-container .menu-1-button::before {
margin-top: 0px;
-webkit-transform: rotate(405deg);
-moz-transform: rotate(405deg);
-o-transform: rotate(405deg);
transform: rotate(405deg);
}
#menu-1-toggle:checked + .menu-1-button-container .menu-1-button {
background: rgba(255, 255, 255, 0);
}
#menu-1-toggle:checked + .menu-1-button-container .menu-1-button::after {
margin-top: 0px;
-webkit-transform: rotate(-405deg);
-moz-transform: rotate(-405deg);
-o-transform: rotate(-405deg);
transform: rotate(-405deg);
}
@media (max-width: 10000px) {
.menu-1-button-container {
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: flex;
}
.menu-1 {
position: absolute;
top: 0;
margin-top: 50px;
left: 0;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-moz-box-orient: vertical;
-moz-box-direction: normal;
flex-direction: column;
width: 100%;
-webkit-box-pack: center;
-webkit-justify-content: center;
-moz-box-pack: center;
justify-content: center;
-webkit-box-align: center;
-webkit-align-items: center;
-moz-box-align: center;
align-items: center;
}
#menu-1-toggle ~ .menu-1 li {
height: 0;
margin: 0;
padding: 0;
border: 0;
-webkit-transition: height 400ms cubic-bezier(0.23, 1, 0.32, 1);
-o-transition: height 400ms cubic-bezier(0.23, 1, 0.32, 1);
-moz-transition: height 400ms cubic-bezier(0.23, 1, 0.32, 1);
transition: height 400ms cubic-bezier(0.23, 1, 0.32, 1);
}
#menu-1-toggle:checked ~ .menu-1 li {
border: 1px solid #333;
height: 2.5em;
padding: 0.5em 0;
-webkit-transition: height 400ms cubic-bezier(0.23, 1, 0.32, 1);
-o-transition: height 400ms cubic-bezier(0.23, 1, 0.32, 1);
-moz-transition: height 400ms cubic-bezier(0.23, 1, 0.32, 1);
transition: height 400ms cubic-bezier(0.23, 1, 0.32, 1);
}
.menu-1 > li {
display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: flex;
-webkit-box-pack: center;
-webkit-justify-content: center;
-moz-box-pack: center;
justify-content: center;
margin: 0;
padding: 0.5em 0;
width: 100%;
color: white;
background-color: #222;
}
.menu-1 > li:not(:last-child) {
border-bottom: 1px solid #444;
}
}
Представьте, что вам нужно добавить на сайт стильное анимированное меню, которое идеально подходит для мобильных устройств. Этот кусочек кода создан для того, чтобы воплотить именно такое меню: анимированное меню в виде гамбургера, которое при нажатии трансформируется в крестик и открывает вертикальное меню для навигации по сайту. Это прекрасный способ сделать ваш сайт удобным для мобильных устройств и при этом сохранить его стиль.
В основе работы меню лежит чекбокс, который служит переключателем. Когда вы нажимаете на иконку гамбургера, состоящую из трех горизонтальных линий, чекбокс активируется. Это действие запускает изменение вида элементов меню и самой иконки благодаря умному использованию CSS. Элементы меню, изначально скрытые, появляются с плавной анимацией, образуя вертикальный список. В то же время иконка гамбургера превращается в крестик, указывая на то, что его можно нажать снова, чтобы закрыть меню.
Для достижения такого эффекта код использует сочетание HTML для структурирования, CSS для стилизации и небольшое количество CSS-анимаций для создания эффекта плавного перехода. Особое внимание уделяется использованию CSS-селекторов для изменения внешнего вида в зависимости от состояния чекбокса (выбрано или нет), а также применению медиазапросов для обеспечения адекватного поведения меню на различных размерах экранов, что делает сайт привлекательным на любом устройстве.
Таким образом, независимо от вашего опыта в разработке, этот пример показывает, как сочетание базовых технологий HTML и CSS может создать не только функциональный, но и визуально привлекательный элемент, улучшая пользовательский опыт на вашем сайте.