平行四边形导航切换实现

388 阅读1分钟

直接上效果图:

贴代码:

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

结束,拜拜。