CSS实现Tab技巧

时间:2016.05.05 发布人:h524992658

CSS实现Tab技巧

已解决问题

谷歌h524992658用户在2016.05.05提交了关于“小贵族CSS实现Tab技巧”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2024-09-10T10:43:56。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,感谢你,我会记得你对我的好的 !

希望以下的回答,能够帮助你。

第1个回答

用户名:ljiwwmw6  

程序员们都知道一般Tab都是靠Ja阶境序破续vascript来实现的,j**ascript331215问答的好处师能强大并且灵活。对怕源但是也有特殊情况,如果只需一个简单的内容切换我们就可以利用CSS实现Tab。那么CSS实现Tab需要如何操作呢?下面就和小编一起来学习C负后露河教二圆重苏SS实现Tab技巧吧!
1.锚点+:target;
2.纯锚点;
这两种各有各优点,也有各自的局限性。
具体的Demo请查看这里
方案一:锚点+:target
CSS3中引入了一个新的伪类:target,当用户和页面进行某些交互时会触发,例如有以下的代码,当用户点击链接时,便会触发p元素的:target伪类。
<ahref="#dest">LinktoDes送想呼吃刑输思伤口t</a>
<pid="dest">Thisisanewparagraph.</p>  
方案一便是利用:target伪类来实现Tab切换。实现原理为:在页面加载的时候通过CSS隐藏Tab相对应的内止口集强甲容距容,同时在:target伪类中将Tab内容设置为可见。
h**TML结构如下:

<dl>
<d教行某主历映女冲tclass="tab-afirst"><ahref="#a">TabA</冲固景副掉a></dt>
<ddid="a"class="content-a">
ContentA
</类dd>
<dtclass="tab-b"><ahref="#b">TabB</a></dt>
<ddid="b"class="content-b">
ContentB
</dd>
<d虽tclass="t飞氧ab-c"><ahref="#c">TabC</a></dt>
<ddid="c"class="content-c">
Conten烈究和倍无距tC
</dd>
<dtc境胡么lass="tab-d"><ahref="#d">TabD</a></dt>
<ddid="d"class="content-d">
ContentD
</dd>
</dl>
使用该结构的一个好处在宣价供还灯怎广度校检于缺少CSS世然衡菜值求可以清晰的阅读内容。
关键的CSS代码如下

dd{
padding:**x;
/*隐藏Tab的内容*/
display:none;
-moz-border-radius:**x;
margin-top:20px
}

dd:target{
position:absolute;
/*显示Tab的内容*/
display:bl架战班ock;
}
/*给Tab以及相应的内容设置相同的背景色*/
.tab-a,.content-a{
backgr正述装血给速积够ound:#CCFF00;
}
.tab-b,.conten爱析张盾养t-b{
background:#CCFFFF;
}
.tab-c,.content-c{
background:#FFFF00;
}
.tab-d,.content-d{
background:#FFCCFF;
}


使用CSS方案的一个弊端在于不易区分哪个Tab是当前选中的,一个简单的方式是给相应的Tab以及Tab内容设置相同的背景色,这样当Tab内容显示时,能够更清晰的辨别当前Tab。此外,由于是使用了CSS3中的选择符,因此目前只能在Firefox、Safari、IE8等现代浏览器下使用。
方案二:纯锚点
方案二的原理很简单,在大多数浏览器下,当点击锚点链接时,锚点对应的内容会自动跳到可视范围以内。根据该原理,将Tab的所有内容放到一个固定高度的容器中,并且设置容器的overflow为hidden,此外每个Tab内容的高度需要与容器保持一致。在该结构下,当点击锚点链接时对应的内容会自动跳转到可视范围以内容,即容器内。
具体的h**TML结构如下:
<ulid="tab_nv">
<liclass="tab-a"><ahref="#a2">TabA</a></li>
<liclass="tab-b"><ahref="#b2">TabB</a></li>
<liclass="tab-c"><ahref="#c2">TabC</a></li>
<liclass="tab-d"><ahref="#d2">TabD</a></li>
</ul>
<divid="tab_content">
<divid="a2"class="contentcontent-a">
ContentA
</div>
<divid="b2"class="contentcontent-b">
ContentB
</div>
<divid="c2"class="contentcontent-c">
ContentC
</div>
<divid="d2"class="contentcontent-d">
ContentD
</div>
</div>
由于和方案一的原理不一样,此处的h**TML结构也只能使用Tab和内容分离的结构,使用该结构的一个问题在于当CSS缺失的情况下无法清晰的阅读内容。
关键的CSS代码如下:
/*给TabContent容器设置高度*/
#tab_content{
height:190px;
overflow:hidden;
}
/*给每个TabContent定高度,需要与容器保持一致*/
#tab_content.content{
padding:**x;
-moz-border-radius:**x;
height:190px;
overflow:hidden;
}
与方案一一样,这里也通过给Tab以及对应内容设置相同背景色来解决选中识别问题。
总结:
1.纯CSS实现的Tab受限很多,比如方案二中需要给每个TabContent设置相同的高度。
2.无法有效的标识当前选中的Tab,本文是通过设置相同背景色做区分,在很多情况下不一定适用。
3.两个方案都存在兼容性问题,方案一使用了CSS3的选择符,受限于CSS的实现;而方案二据说在Opera下不灵。
4.方案一中,当点击其他会触发:target的锚点(或发生类似交互)时,TabContent会隐藏。