【发布时间】:2019-03-13 13:38:56
【问题描述】:
我正在努力摆脱使用 Bootstrap 的困扰,但遇到了一些我无法弄清楚的事情。
对于响应式顶部导航栏,当我单击汉堡菜单时,我希望它以动画方式打开和关闭(取决于它是打开还是关闭)。
我遇到的问题是在导航上使用display: none 来杀死任何/所有动画。 .nav-top__nav-list 是动画需要发生的地方,它的显示从“无”切换到“阻止”。我这样做是为了可访问性(这意味着除非扩展导航,否则屏幕阅读器不会点击该区域)。是否有另一种方法可以保持隐藏的可访问性,同时仍然能够为导航菜单的打开/关闭设置动画?
function topNavToggle() {
var topNavList = document.getElementById("topNavList");
var topNavToggle = document.getElementById("topNavToggle");
if (topNavList.className === "nav-top__nav-list") {
topNavList.className += " responsive";
topNavToggle.className += " toggled";
} else {
topNavList.className = "nav-top__nav-list";
topNavToggle.className = "nav-top__toggle-button";
}
}
.nav-top,
.navbar-nav {
grid-column-start: 1;
grid-column-end: 13;
}
.wrapper__1170-max-width {
display: grid;
grid-template-columns: repeat(12, 1fr);
max-width: 1170px;
margin: 0 auto;
padding: 0 1rem;
}
.display-desktop {
display: block;
}
.display-mobile {
display: none;
}
.nav-top {
background: #466a62;
min-height: 40px;
}
.nav-top__header {
grid-column-start: 1;
grid-column-end: 13;
}
.nav-top__header button {
background: none;
border: none;
cursor: pointer;
grid-column-start: 12;
grid-column-end: 13;
grid-row-start: 1;
justify-self: right;
}
.nav-top__header button .bar-1,
.nav-top__header button .bar-2,
.nav-top__header button .bar-3 {
width: 35px;
height: 5px;
background-color: #333;
margin: 6px 0;
transition: 0.4s;
}
.nav-top__header button.change {
background: red;
}
.nav-top__header .toggled .bar-1 {
transform: rotate(-45deg) translate(-9px, 6px);
}
.nav-top__header .toggled .bar-2 {
opacity: 0;
}
.nav-top__header .toggled .bar-3 {
transform: rotate(45deg) translate(-8px, -8px);
}
.nav-top__header .nav-brand {
grid-column-start: 1;
grid-column-end: 12;
grid-row-start: 1;
}
.nav-top__nav-list {
grid-column-start: 1;
grid-column-end: 13;
}
.nav-top__nav-list ul {
list-style: none;
margin: 0;
padding: 0;
}
.nav-top__nav-list ul li {
float: left;
}
.nav-top__nav-list ul li a {
color: #FFF;
display: block;
padding: 11px;
text-decoration: none;
}
.nav-top__nav-list ul li a:hover {
background: #FFF;
color: #18453b;
}
@media only screen and (max-width: 992px) {
.display-desktop {
display: none;
}
.display-mobile {
display: block;
}
.nav-top__header {
display: grid;
}
.nav-top__nav-list {
display: none;
}
.nav-top__nav-list.responsive {
display: block;
}
.nav-top__nav-list.responsive ul li {
display: block;
float: none;
}
}
<nav class="nav-top" aria-label="primary">
<div class="wrapper__1170-max-width">
<div class="nav-top__header display-mobile">
<span class="nav-top__brand">Menu</span>
<button type="button" id="topNavToggle" class="nav-top__toggle-button" aria-label="Expand and collapse primary site navigation" data-toggle="collapse" data-target="#topNavList" onclick="topNavToggle()">
<div class="bar-1"></div>
<div class="bar-2"></div>
<div class="bar-3"></div>
</button>
</div>
<div class="nav-top__nav-list" id="topNavList">
<ul>
<li class="active"><a href="#">Home</a></li>
<li><a href="#">Page 1</a></li>
<li><a href="#">Page 2</a></li>
<li><a href="#">Page 2</a></li>
</ul>
</div>
</div>
</nav>
【问题讨论】:
-
也许你可以尝试点击切换显示:首先阻止/无,然后使用带有动画样式的延迟切换类
标签: javascript html css