Меню №3
- 79+
- 57+
- 69+
- 44+
- 15.4+
- 57+
- 95+
- 43+
- 15.4+
- 6+
- 57+
- 4,83 КБ
- HTML, CSS
- Меню
- анимация, вертикальное, сайдбар, скользящее
- Лицензия MIT
<label for="menu-opener" tabindex="0" aria-haspopup="true" role="button" aria-controls="menu" class="OpenMenuButton" id="openmenu">ОТКРЫТЬ МЕНЮ</label>
<input type="checkbox" data-menu id="menu-opener" hidden />
<aside class="DrawerMenu" role="menu" id="menu" aria-labelledby="openmenu">
<nav class="Menu">
<h2>Какой-то сайт</h2>
<a role="menuitem" tabindex="-1" href="#">Пункт меню 01</a>
<a role="menuitem" tabindex="-1" href="#">Пункт меню 02</a>
<a role="menuitem" tabindex="-1" href="#">Пункт меню 03</a>
<a role="menuitem" tabindex="-1" href="#">Пункт меню 04</a>
<a role="menuitem" tabindex="-1" href="#">Пункт меню 05</a>
<a role="menuitem" tabindex="-1" href="#">Пункт меню 06</a>
<a role="menuitem" tabindex="-1" href="#">Пункт меню 07</a>
<a role="menuitem" tabindex="-1" href="#">Пункт меню 08</a>
<a role="menuitem" tabindex="-1" href="#">Пункт меню 09</a>
<a role="menuitem" tabindex="-1" href="#">Пункт меню 10</a>
<a role="menuitem" tabindex="-1" href="#">Пункт меню 11</a>
<a role="menuitem" tabindex="-1" href="#">Пункт меню 12</a>
<a role="menuitem" tabindex="-1" href="#">Пункт меню 13</a>
<a role="menuitem" tabindex="-1" href="#">Пункт меню 14</a>
<a role="menuitem" tabindex="-1" href="#">Пункт меню 15</a>
</nav>
<label for="menu-opener" class="MenuOverlay"></label>
</aside>
.OpenMenuButton {
cursor: pointer;
font-size: 1.5rem;
font-weight: 900;
word-spacing: 140%;
letter-spacing: 4px;
color: white;
}
.DrawerMenu {
position: fixed;
z-index: 99;
width: 100vw;
height: 100vh;
top: 0;
bottom: 0;
-webkit-transform: translateX(-100%);
-moz-transform: translateX(-100%);
-o-transform: translateX(-100%);
transform: translateX(-100%);
-webkit-transition: -webkit-transform 0.5s cubic-bezier(0.4, 0, 0.2, 1);
transition: -webkit-transform 0.5s cubic-bezier(0.4, 0, 0.2, 1);
-o-transition: -o-transform 0.5s cubic-bezier(0.4, 0, 0.2, 1);
-moz-transition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1), -moz-transform 0.5s cubic-bezier(0.4, 0, 0.2, 1);
transition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1);
transition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 0.5s cubic-bezier(0.4, 0, 0.2, 1), -moz-transform 0.5s cubic-bezier(0.4, 0, 0.2, 1), -o-transform 0.5s cubic-bezier(0.4, 0, 0.2, 1);
display: -ms-grid;
display: grid;
grid-template-areas: "MENU OVERLAY";
-ms-grid-columns: 15fr 5fr;
grid-template-columns: 15fr 5fr;
}
@media (min-width: 30em) {
.DrawerMenu {
-ms-grid-columns: auto 1fr;
grid-template-columns: auto 1fr;
}
}
[data-menu]:checked ~ .DrawerMenu {
-webkit-transform: none;
-moz-transform: none;
-o-transform: none;
transform: none;
}
.Menu {
display: block;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-flow: column wrap;
-moz-box-orient: vertical;
-moz-box-direction: normal;
flex-flow: column wrap;
-webkit-transform: translateX(-30%);
-moz-transform: translateX(-30%);
-o-transform: translateX(-30%);
transform: translateX(-30%);
opacity: 0;
color: #fff;
-webkit-transition: all 500ms cubic-bezier(0.4, 0, 0.2, 1);
-o-transition: all 500ms cubic-bezier(0.4, 0, 0.2, 1);
-moz-transition: all 500ms cubic-bezier(0.4, 0, 0.2, 1);
transition: all 500ms cubic-bezier(0.4, 0, 0.2, 1);
-webkit-transition-delay: 0;
-moz-transition-delay: 0;
-o-transition-delay: 0;
transition-delay: 0;
contain: content;
grid-area: "MENU";
background-color: rebeccapurple;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
padding: 24px;
overflow: auto;
-webkit-overflow-scrolling: touch;
}
@media (min-width: 30em) {
.Menu {
min-width: 400px;
}
}
[data-menu]:checked ~ .DrawerMenu .Menu {
-webkit-transform: none;
-moz-transform: none;
-o-transform: none;
transform: none;
opacity: 1;
-webkit-transition-delay: 300ms;
-moz-transition-delay: 300ms;
-o-transition-delay: 300ms;
transition-delay: 300ms;
}
.Menu a {
text-decoration: none;
color: #ffffff80;
display: block;
padding: 16px 0;
}
.Menu a:hover {
color: #69f0ae;
}
.Menu > * + * {
border-top: 1px solid rgba(255, 255, 255, 0.1);
}
.MenuOverlay {
display: block;
grid-area: "OVERLAY";
}
[data-menu]:not(:checked) ~ .DrawerMenu .MenuOverlay {
pointer-events: none;
}
Фрагмент кода творчески сочетает в себе HTML и CSS для реализации разнообразия анимаций и стилей меню, демонстрируя динамичный элемент пользовательского интерфейса, широко используемый в современном веб-дизайне. Начиная с HTML, он задает структуру для различных типов меню. Эта основа критически важна для определения пространства, где меню будет размещаться на веб-странице, и как оно будет организовано, часто с использованием списков для пунктов меню.
CSS придает этой структуре жизнь с помощью стилей и анимаций. Здесь происходит магия, превращающая статичный список в привлекательное, интерактивное боковое меню. С помощью CSS мы видим реализацию переходов, которые позволяют меню скользить внутрь и наружу, создавая бесшовное взаимодействие для пользователя. Детали оформления, такие как цвета, шрифты и размеры, делают меню визуально привлекательным, в то время как анимации на CSS добавляют слой изысканности и современности в опыт вертикальной навигации.
Хотя JavaScript прямо не упоминается, синергия между HTML и CSS в этом фрагменте кода демонстрирует, насколько мощными могут быть эти две технологии, когда они сочетаются вместе. Они создают компонент пользовательского интерфейса, который не только функционален, но и улучшает общий пользовательский опыт с помощью плавных анимаций и интуитивно понятного дизайна. Такой подход к дизайну меню универсален, подходя для различных случаев использования, будь то стильное боковое меню в веб-приложении или более сложная система навигации на крупном веб-сайте.