Анатомия React компонента
Моё видение того, как должен выглядеть React компонент
107
7 мин.
45
2 мин.
Стандарт SSBM определяет требования к семантике, доступности и логике работы бургер меню.
Мобильное меню должно быть построено с учётом корректного позиционирования и структуры элементов, для этого используется position: fixed;, block-size: 100dvb; и inline-size: 100%;, чтобы меню полностью занимало экран с учётом браузерных панелей и плашек, оверлей отдельным элементом с position: fixed; используется чтобы перекрывать страницу и закрывать меню при клике.
Для инимации открытия/закрытия применяйте сдвиг через свойства inset-inline-start, inset-inline-end, inset-block-start, inset-block-end, а не transform: translateX/Y();, если требуется простое появление/скрытие, также меню не должно выходить за пределы viewport, особенно на маленьких экранах:
<button class="burger-button">☰</button> <div class="menu"> <div class="menu__overlay"></div> <nav> <ul> <li><a href="/">Главная</a></li> <li><a href="/about">О нас</a></li> <li><a href="/contact">Контакты</a></li> </ul> </nav> </div>
.menu { position: fixed; inset-block-start: 0; inset-inline-start: -100%; inline-size: 100%; block-size: 100dvb; background: white; transition: inset-inline-start 0.3s; } .menu.active { inset-inline-start: 0; } .menu__overlay { position: fixed; inset: 0; inline-size: 100%; block-size: 100%; background: rgba(0,0,0,0.5); opacity: 0; visibility: hidden; transition: opacity 0.3s, visibility 0.3s; } .menu.active .menu__overlay { opacity: 1; visibility: visible; }
Кнопка-бургер должна иметь aria-label иaria-expanded для отражения состояния меню (открыто/закрыто):
<button class="burger-button" aria-label="Открыть меню" aria-expanded="false">☰</button>
Меню закрывается при клике на кнопку-бургер, выбор пункта меню или клик на оверлей, при открытом меню должен стоять overflow: hidden; для <body> и позиция страницы должна быть фиксированной, если нужно добиться плавности, то лучше анимировать только inset-inline-start, inset-block-end, inset-inline-end или inset-block-start для меню и opacity для оверлея:
const button = document.querySelector('.burger-button'); const menu = document.querySelector('.menu'); const overlay = menu.querySelector('.menu__overlay'); button.addEventListener('click', () => { const isActive = menu.classList.toggle('active'); button.setAttribute('aria-expanded', isActive); }); overlay.addEventListener('click', () => { menu.classList.remove('active'); button.setAttribute('aria-expanded', 'false'); });
Похожие категории:
Моё видение того, как должен выглядеть React компонент
107
7 мин.
Стандарт SSF-U определяет требования к семантике, доступности и логике работы фуллскрина
38
2 мин.
Стандарт SSA определяет требования к семантике, доступности и логике работы аккордеона
54
2 мин.
Разбор критических ошибок веб-дизайна. Почему слайдеры, автоплей и тяжёлые страницы снижают конверсию и позиции в Google и Yandex
50
1 мин.
Стандарт SSP определяет требования к семантике, доступности и логике работы пагинации
59
1 мин.
Стандарт SSPS определяет требования к структуре и наименованию файлов и папок в проекте
169
2 мин.