Демо
  • 4,83 КБ
  • HTML, CSS
  • Меню
  • анимация, вертикальное, сайдбар, скользящее
  • Лицензия MIT
HTML
<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>
CSS
.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 в этом фрагменте кода демонстрирует, насколько мощными могут быть эти две технологии, когда они сочетаются вместе. Они создают компонент пользовательского интерфейса, который не только функционален, но и улучшает общий пользовательский опыт с помощью плавных анимаций и интуитивно понятного дизайна. Такой подход к дизайну меню универсален, подходя для различных случаев использования, будь то стильное боковое меню в веб-приложении или более сложная система навигации на крупном веб-сайте.

  •  Меню №34
    Меню №23
    Меню №23
    • HTML, CSS, JS
    • 9,87 КБ
    • Вертикальное
    Подробнее
  •  Меню №35
    Меню №22
    Меню №22
    • HTML, CSS
    • 6,33 КБ
    • Вертикальное, выпадающее
    Подробнее
  •  Меню №35
    Меню №21
    Меню №21
    • HTML, CSS
    • 1,64 КБ
    • Вертикальное, сайдбар, скользящее
    Подробнее
  •  Меню №34
    Меню №20
    Меню №20
    • HTML, CSS
    • 5,06 КБ
    • Вертикальное, скользящее
    Подробнее
  •  Меню №34
    Меню №19
    Меню №19
    • HTML, CSS
    • 8,21 КБ
    • Вертикальное, гамбургер, скользящее
    Подробнее
  •  Меню №34.5
    Меню №18
    Меню №18
    • HTML, CSS
    • 2,94 КБ
    • Вертикальное
    Подробнее
Меню