在10年前有一个软件叫qq,它的面板实现了一种推拉效果,后来有人命名为“手风琴”效果并在网页上通过js实现了这个效果,到今天这种效果依然在一些后台管理界面中存在着。还有一种效果,即window系统实现的一种选项卡的效果,不同标签切换显示对应标签下的内容,后来这种效果也广泛地被应用到网页中,那么是不是实现这些效果,必须要写js代码呢,答案是否定的,今天我带大家通过css3的:target伪类选择器实现这两种司空见惯的效果。
手风琴案例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>:target手风琴效果应用</title>
<style type="text/css">
.accordionMenu{
font: 12px simsun;
background: #FFFFFF;
color: #424242;
margin: 0 auto;
padding: 10px;
width: 500px;
}
.accordionMenu h2{
margin: 1px 0;
padding: 0;
position: relative;
}
.accordionMenu h2 a{
font-size: 13px;
text-shadow: 2px 2px 2px #aeaeae;
text-decoration: none;
background-color: #8f8f8f;
background-image: -webkit-linear-gradient(top,#cecece,#8f8f8f);
border-radius: 5px;
color: #424242;
display: block;
margin: 0;
padding: 10px;
}
.accordionMenu h2:before{
border: 5px solid #FFFFFF;
border-color: #FFFFFF transparent transparent;
width: 0;
height: 0;
content: '';
position: absolute;
right: 10px;
top: 15px;
}
.accordionMenu :target h2 a,
.accordionMenu h2 a:hover{
background-image: -webkit-linear-gradient(top,#6bb2ff,#2288dd);
color: #FFFFFF;
}
.accordionMenu p{
font-size: 14px;
margin: 0;
padding: 0 10px;
-webkit-transition: all .5s ease-in;
display: none;
overflow: hidden;
background: lightyellow;
border-radius: 5px;
}
.accordionMenu :target p{
height: 100px;
display: block!important;
overflow: auto;
}
.accordionMenu :target h2:before{
-webkit-transform: rotate(-90deg);
-webkit-transform-origin: 50% 0;
-webkit-transition: all .2s ease;
}
</style>
</head>
<body>
<div class="accordionMenu">
<div class="menuSection" id="friend">
<h2><a href="#friend">我的好友</a></h2>
<p>我的好友:URL后面跟锚点#,指向文档内某个具体的元素。这个被链接的元素就是目标元素(target element),:target选择器用于选取当前活动的目标元素。URL后面跟锚点#,指向文档内某个具体的元素。这个被链接的元素就是目标元素(target element),:target选择器用于选取当前活动的目标元素。</p>
</div>
<div class="menuSection" id="stranger">
<h2><a href="#stranger">陌生人</a></h2>
<p>陌生人:E:target伪类使用方法E:target伪类使用方法E:target伪类使用方法E:target伪类使用方法E:target伪类使用方法E:target伪类使用方法E:target伪类使用方法</p>
</div>
<div class="menuSection" id="blacklist">
<h2><a href="#blacklist">黑名单</a></h2>
<p>这里是黑名单的内容!!</p>
</div>
</div>
</body>
</html>
效果图:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>:target选项卡</title>
<style type="text/css">
*{
font-family: "microsoft yahei";
margin: 0;
padding: 0;
}
#tabs{
width: 500px;
height: 400px;
margin: 50px auto;
}
.tabTitle{
width: 100%;
height: 40px;
line-height: 40px;
clear: both;
overflow: hidden;
}
.tabTitle > a{
font-size: 16px;
text-align: center;
text-decoration: none;
color: #000000;
min-width: 76px;
height: 100%;
padding: 0 12px;
background: #EEEEEE;
display: block;
float: left;
margin-right: 1px;
}
.tabTitle > a:hover{
color: #ffffff;
background: #00A750;
}
.tabContent{
word-break: break-all;
color: #FFFFFF;
width: 100%;
height: 100px;
border: 1px solid #EEEEEE;
overflow: hidden;
}
.tabContent > div{
font-size: 14px;
width: 100%;
height: 100%;
padding: 10px;
background: #FFFFFF;
overflow: hidden;
box-sizing: border-box;
z-index: 1;
}
.tabContent > div:nth-child(1),.tabTitle > a:nth-child(1){
background: lightsalmon;
}
.tabContent > div:nth-child(2),.tabTitle > a:nth-child(2){
background: lightpink;
}
.tabContent > div:nth-child(3),.tabTitle > a:nth-child(3){
background: goldenrod;
}
:target{
z-index: 2;
}
</style>
</head>
<body>
<div id="tabs">
<div class="tabTitle">
<a href="#tab1">我的好友</a>
<a href="#tab2">陌生人</a>
<a href="#tab3">黑名单</a>
</div>
<div class="tabContent">
<div id="tab1">我的好友:URL后面跟锚点#,指向文档内某个具体的元素。这个被链接的元素就是目标元素(target element),:target选择器用于选取当前活动的目标元素。URL后面跟锚点#,指向文档内某个具体的元素。这个被链接的元素就是目标元素(target element),:target选择器用于选取当前活动的目标元素。</div>
<div id="tab2">陌生人:E:target伪类使用方法E:target伪类使用方法E:target伪类使用方法E:target伪类使用方法E:target伪类使用方法E:target伪类使用方法E:target伪类使用方法</div>
<div id="tab3">这里是黑名单的内容!!</div>
</div>
</div>
</body>
</html>
效果图: