快速实现标签条切换效果
现在的单页应用中,我们经常需要通过切换不同的标签条显示相应的内容,一般想到的方法就是通过DOM操作给标签条添加点击事件然后加载对应内容,那么,有没有方法可以基本靠HTML和CSS就能快速实现标签条切换效果呢?我们来看一看。
HTML结构
这里我先简单的把HTML结构展示出来,然后慢慢解释:
1 | <div class='pane-container'> |
我们可以看到,每一个标签条都是一个a
标签,对应的内容为.content
块。这里我为什么要用a
标签来表示标签条呢?
原因就是,a
标签的href
属性可以设置href='#myid'
,这样点击就能跳转到当前页面id为myid的元素。有人会说,但这里我们不需要跳转啊,别急,这样设置的目的是为了方便之后的CSS设置。
关键的CSS操作
:target伪类
这里我们用到了一个关键的CSS选择器::target
伪类。E:target
伪类选择的是匹配到URL的E元素,就是说如果我们设置了E元素的id为eId
,并且当前URL后面有#eId
,则E元素就被CSS选择器选中了,我们就可以设置E元素的CSS属性!来看代码:
1 | .content { |
这里我们要选中的元素是class为content
的元素,也就是要展示的内容。先对content
设置display:none;
,然后通过.content:target
选择到当前选中的content
元素,再让其可见,就达到了内容切换的目的!怎么样,是不是很简单?
修改tab选中样式
当然为了更加直观一点,我们还需要对选中的标签进行一点修饰,代表当前选中的是哪个标签,其主要也是运用了:target
和兄弟选择器:E~F
。这里要注意的是,~
匹配的是E后面所有兄弟元素F,也就是说F的位置必须在E后面,我们来看代码:
1 | .pane-btn:hover { |
这样就能比较明显的显示当前选中的标签。
完整CSS代码
1 | .pane-container { |
最后
你以为这样就OK了?还差最后一步。经过上面的HTML和CSS设置,我们虽然可以在标签之间进行切换并且显示对应内容,但是在页面初次加载进来后是没有显示任何内容的,因为此时没有任何标签被点击!所以我们还得用JS小小的设置一下:
1 | var tabPaneOne = document.getElementsByClassName('pane-btn')[0]; // 这里默认显示第一个标签 |
这样就能完美的显示啦!完整效果请看demo。
总结
利用:target
伪类,我们很好的实现了点击标签切换内容的效果。虽然这只是很简单的效果,但是在实际开发过程中我们也可以运用起来,在其基础上再加一些动画都是Ok的。这样实现的好处是会少很多DOM操作,从性能和代码简洁角度来说也是很大的一个提升。
本文标题:快速实现标签条切换效果
文章作者:flyrk
发布时间:2019-02-15
最后更新:2022-02-25
原始链接:https://flyrk.github.io/2019/02/15/fast-achieve-tabpane-effect/
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!
分享