本文摘自PHP中文网,作者php中世界最好的语言,侵删。
这次给大家带来纯CSS实现Tab页切换效果,纯CSS实现Tab页切换效果的注意事项有哪些,下面就是实战案例,一起来看一下。最近切一个页面的时候涉及到了一个tab切换的部分,因为不想用js想着能不能用纯CSS的选择器来实现切换效果。搜了一下大致有下面三种写法。
1、利用 :hover 选择器
缺点:只有鼠标在元素上面的时候才有效果,无法实现选中和默认显示某一个的效果
2、利用 a标签的锚点 + :target选择器
缺点:因为锚点会将选中的元素滚动到页面最上面,每次切换位置都要移动,体验极差。
3、利用 label和radio 的绑定关系和 radio选中时的:checked 来实现效果
缺点:HTML结构元素更复杂
经过实验发现第三种方法达到的效果最好。所以下面讲一下第三种实现的方法。
这种方法的写法不固定,我查资料的时候各种各样的写法都有一度让我一头雾水的。最后看完发现总体思路都是一样的,无非就是下面的几个步骤。
绑定label和radio:这个不用说id和for属性绑定
隐藏radio按钮:这个方法有很多充分发挥你们的想象力就可以了,我见过的方法有设置 display:none; 隐藏的、设置 绝对定位,将left设置为很大的负值 ,移动到页面外达到隐藏效果、设置**绝对定位:使元素脱离文档流,然后 opacity: 0; **设置为透明来达到隐藏效果。
隐藏多余的tab页:和上面同理,还可以通过 z-index 设置层级关系来相互遮挡。
设置默认项:在默认按钮上添加 checked="checked" 属性
设置选中效果:利用 + 选择器 和 ~ 选择器来设置选中对应元素时下方的tab页的样式,来达到选中的效果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | input[type= "radio" ]:checked+.test-label {
border-color: #cbcccc;
border-bottom-color: #fff;
background: #fff;
z-index: 10;
}
input[type= "radio" ]:checked~.tab-box {
z-index: 5;
}
|
这样就可以实现一个Tab页切换的效果了,不用一点儿js,当然肯定也有兼容性的问题。实际操作中tab页还是使用js比较好。下面是小Demo的代码,样式比较多主要是为了实现各种选中效果, 真正用来达到选择切换目地的核心代码就几行
演示地址
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | <!DOCTYPE html>
<html lang= "en" >
<head>
<meta charset= "UTF-8" >
<meta name= "viewport" content= "width=device-width, initial-scale=1.0" >
<meta http-equiv= "X-UA-Compatible" content= "ie=edge" >
<title>CSS实现Tab切换效果</title>
<style>
ul {
margin: 0;
padding: 0;
}
.clearfloat {
zoom: 1;
}
.clearfloat::after {
display: block;
clear: both;
content: "" ;
visibility: hidden;
height: 0;
}
.tab-list {
position: relative;
}
.tab-list .tab-itom {
float: left;
list-style: none;
margin-right: 4px;
}
.tab-itom .test-label {
position: relative;
display: block;
width: 85px;
height: 27px;
border: 1px solid transparent;
border-top-left-radius: 5px;
border-top-right-radius: 5px;
line-height: 27px;
text-align: center;
background: #e7e8eb;
}
.tab-itom .tab-box {
position: absolute;
left: 0;
top: 28px;
width: 488px;
height: 248px;
border: 1px solid #cbcccc;
border-radius: 5px;
border-top-left-radius: 0px;
background: #fff;
z-index: 0;
}
input[type= "radio" ] {
position: absolute;
opacity: 0;
}
input[type= "radio" ]:checked + .test-label {
border-color: #cbcccc;
border-bottom-color: #fff;
background: #fff;
z-index: 10;
}
input[type= "radio" ]:checked ~ .tab-box {
z-index: 5;
}
</style>
</head>
<body class = "clearfloat" >
<ul class = "tab-list clearfloat" >
<li class = "tab-itom" >
<input type= "radio" id= "testTabRadio1" class = "test-radio" name= "tab" checked= "checked" >
<label class = "test-label" for = "testTabRadio1" >选项卡一</label>
<p class = "tab-box" >
111111111111
</p>
</li>
<li class = "tab-itom" >
<input type= "radio" id= "testTabRadio2" class = "test-radio" name= "tab" >
<label class = "test-label" for = "testTabRadio2" >选项卡二</label>
<p class = "tab-box" >
2222222222222
</p>
</li>
<li class = "tab-itom" >
<input type= "radio" id= "testTabRadio3" class = "test-radio" name= "tab" >
<label class = "test-label" for = "testTabRadio3" >选项卡三</label>
<p class = "tab-box" >
33333333333333
</p>
</li>
</ul>
</body>
</html>
|
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
阅读剩余部分
相关阅读 >>
外部css样式不生效怎么办
css的伪类有哪些
手把手教你使用css自定义好看的滚动条样式!
css keyframes 是什么
css如何实现元素不随滚动条滚动
css设置背景颜色
css怎么隐藏文本超出部分
css中怎么取消图片间隔
css属性为什么要加前缀
css如何改变字体粗细
更多相关阅读请进入《样式表》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » 纯CSS实现Tab页切换效果