纯css实现点击导航切换内容

前情提要

现在要做一个功能,需要内嵌一个html页面,现在有一个表格有两种状态,仅数据发生变化,所以想要搞一个导航切换组件,最常见的当然是通过click事件尝试去更改display,但是这个页面不能使用js,所以只能尝试纯样式的方式实现切换效果。

贴主找到了一个使用:target伪类来实现。他是用来选中 URL 中哈希(即 # 符号后面的部分)对应的元素。例如:#divB:target 会匹配 <div id="divB"> 元素。

:target伪类实现

<style>
        .hidden {
            display: none;
        }

        /* 默认显示 divAContent */
        #divAContent {
            display: block;
        }

        #divBContent {
            display: none;
        }

        /* 当 divA 被选中时显示 divAContent */
        #divA:target ~ #divAContent {
            display: block;
        }

        /* 当 divB 被选中时显示 divBContent */
        #divB:target ~ #divBContent {
            display: block;
        }

        /* 确保只有一个内容块被显示 */
        #divA:target ~ #divBContent {
            display: none;
        }
        
        #divB:target ~ #divAContent {
            display: none;
        }
    </style>

<body>
    <a href="#divA">dev环境</a>
    <a href="#divB">test环境</a>

    <div id="divA"></div>
    <div id="divB"></div>

    <div id="divAContent">
        <p>这是dev环境下的内容,默认显示</p>
    </div>
    <div id="divBContent">
        <p>这是test环境下的内容,点击切换显示</p>
    </div>
</body>

这样打开浏览器,默认显示的就是第一个div下的内容,切换也会移除其他导航下的内容

切换后:

注意!

对于 #divA:target ~ #divAContent 代码

~代表相邻兄弟选择器,用于选中某个元素之后的所有兄弟元素,它选择的元素是当前元素之后的所有元素,而不仅仅是直接相邻的元素。

对于 #divA:target ~ #divAContent,它会在点击#divA元素之后选中所有#divA元素之后 的#divBContent 元素,然后对选中的#divBContent 元素设置样式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值