直接上效果图:
html
<div class="nav">
<span class='nav-item nav-item-active'>导航1</span>
<span class='nav-item'>导航2</span>
<span class='nav-item'>导航3</span>
</div>
css
.nav {
display: flex;
}
.nav-item {
width: 70px;
height: 32px;
text-align: center;
line-height: 32px;
font-size: 14px;
color: rgba(0, 0, 0, 0.65);
position: relative;
}
.nav-item::before {
content: '';
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
background: rgba(0, 0, 0, 0.03);
transform: skewX(-30deg);
border-right: 1px solid #efefef;
}
.nav-item-active {
position: relative;
color: #fff;
z-index: 2;
}
.nav-item-active::before {
background: #3196FA;
z-index: -1;
}
js
const navItems = document.querySelectorAll('.nav-item');
for (let i = 0; i < navItems.length; i++) {
navItems[i].onclick = function () {
const children = this.parentNode.children;
for (let j = 0; j < children.length; j++) {
children[j].classList.remove('nav-item-active')
}
this.classList.add('nav-item-active');
}
}
主要实现是用到了 transform 属性,另外需要注意的两点是,一、给 伪元素 加了transform, 如果直接给.nav-item加,则文字也会跟着倾斜;二、层级z-index
结束,拜拜。