简易实现: 纯css 实现tab页切换

2,762 阅读1分钟

纯css 实现tab页切换

2021-04-25 18.02.01.gif

通过单选按钮的状态属性checked 获取按钮被选中的状态,从而通过css 兄弟选择器 *+*修改对应元素的状态

html 部分

<template>
    <div class="content">
       <ul>
           <li>
                <input type="radio" value="1" checked name="radioSingle1" id="rdo1" aria-label="">
                <label for="rdo1">tab1</label>
                <div>标签一</div>
           </li>
           <li>
                <input type="radio" value="2" name="radioSingle1" id="rdo2" aria-label="">
                <label for="rdo2">tab2</label>
                <div>标签二</div>
           </li>
           <li>
                <input type="radio" value="3" name="radioSingle1" id="rdo3" aria-label="">
                <label for="rdo3">tab3</label>
                <div>标签三</div>
           </li>
           <li>
                <input type="radio" value="4" name="radioSingle1" id="rdo4" aria-label="">
                <label for="rdo4">tab4</label>
                <div>标签四</div>
           </li>
       </ul>
    </div>
</template>

css 部分

input[type="radio"]:checked + label + div
    display: block
    left: 0
    opacity: 1
input[type="radio"]:checked + label
    color: #2d8cf0
    border-bottom-color: #2d8cf0 !important
.content
    width: 300px
    height: 300px
    border: 1px solid #ccc
    border-radius: 4px
    margin: 100px auto
    ul
        display: flex
        position: relative
        border-bottom: 1px solid rgb(206 209 216)
        >li
            flex: 1
            text-align: center
            line-height: 40px
            margin: 0 3px
            &:hover
                label
                    color: #2d8cf0
            label
                width: 100%
                cursor: pointer
                display: block
                border-radius: 3px
                transition: color .3s
                border-bottom: 2px solid transparent
            >input
                display: none
            >div
                opacity: 0
                position: absolute
                width: 100%
                left: 300px
                transition: left .4s