javascript 活动 class 时 flexbox 行为异常
flexbox is misbehaving with javascript active class
导航栏
这里是初学者
如您所见,一切正常,直到您单击链接之间的 space,您可以在此处查看 - my codepen。当我点击链接导航栏时,它完美地显示了活动 class,但是如果我在 space 之间点击,整个导航栏就会丢失 class。
var element = document.getElementsByClassName("flex-nav")[0];
element.addEventListener("click", myFunction);
function myFunction(e) {
var elems = document.querySelector(".active");
if(elems !==null) {
elems.classList.remove("active");
}
e.target.className = "active";
}
.flex-nav {
display: flex;
flex-direction: column;
margin-top: 54px;
background: #333;
width: 75px;
height: 657px;
justify-content: space-around;
align-items: stretch;
line-height: 23px;
}
.flex-nav a{
text-decoration: none;
color: white;
flex-wrap: wrap;
text-align: center;
margin: 5px;
border: 1px solid transparent;
}
.flex-nav a.active {
background: #9999ff;
}
.flex-nav a:hover:not(.active) {
background: #555;
border: 1px solid rgba(255, 51, 153,1);
}
<div class="flex-nav">
<a href="#" style="order:3">2k</a>
<a href="#" style="order:2">4k</a>
<a href="#" style="order:4">1080p</a>
<a href="#" style="order:1">8k</a>
</div>
您可以通过让 flex 项目增长从而在它们之间没有 space 来避免这种行为:将这些设置添加到 .flex-nav a
flex-grow: 1;
display: flex;
justify-content: center;
align-items: center;
(第一个是为了增长,其他的是为了让里面的文字居中)
导航栏 这里是初学者 如您所见,一切正常,直到您单击链接之间的 space,您可以在此处查看 - my codepen。当我点击链接导航栏时,它完美地显示了活动 class,但是如果我在 space 之间点击,整个导航栏就会丢失 class。
var element = document.getElementsByClassName("flex-nav")[0];
element.addEventListener("click", myFunction);
function myFunction(e) {
var elems = document.querySelector(".active");
if(elems !==null) {
elems.classList.remove("active");
}
e.target.className = "active";
}
.flex-nav {
display: flex;
flex-direction: column;
margin-top: 54px;
background: #333;
width: 75px;
height: 657px;
justify-content: space-around;
align-items: stretch;
line-height: 23px;
}
.flex-nav a{
text-decoration: none;
color: white;
flex-wrap: wrap;
text-align: center;
margin: 5px;
border: 1px solid transparent;
}
.flex-nav a.active {
background: #9999ff;
}
.flex-nav a:hover:not(.active) {
background: #555;
border: 1px solid rgba(255, 51, 153,1);
}
<div class="flex-nav">
<a href="#" style="order:3">2k</a>
<a href="#" style="order:2">4k</a>
<a href="#" style="order:4">1080p</a>
<a href="#" style="order:1">8k</a>
</div>
您可以通过让 flex 项目增长从而在它们之间没有 space 来避免这种行为:将这些设置添加到 .flex-nav a
flex-grow: 1;
display: flex;
justify-content: center;
align-items: center;
(第一个是为了增长,其他的是为了让里面的文字居中)