找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1368|回复: 0

[教程] 纯CSS实现Tab的两种方案

[复制链接]
发表于 2013-4-12 09:11:16 | 显示全部楼层 |阅读模式 来自 中国–广东–湛江
  1. Tab在当前的Web应用中是非常常见的,最大的好处在于可以充分的利用有限的空间来展示更多的内容。常见的的Tab一般都是通过Javascript来实现,它的好处是灵活和功能强大。但是在某些情况下,如果仅仅需要一个简单的内容切换时是可以考虑使用纯CSS来实现的。本文主要介绍两种纯CSS的实现方案:
  2.   1. 锚点 + :target;
  3.   2. 纯锚点;
  4.   这两种各有各优点,也有各自的局限性。
  5.   
  6.   方案一: 锚点 + :target
  7.   CSS3中引入了一个新的伪类:target,当用户和页面进行某些交互时会触发,例如有以下的代码,当用户点击链接时,便会触发p元素的:target伪类。
  8. <a href='#dest'>Link to Dest</a>
  9.             <p id='dest'>This is a new paragraph.</p>

  10.   方案一便是利用:target伪类来实现Tab切换。实现原理为:在页面加载的时候通过CSS隐藏Tab相对应的内容,同时在:target伪类中将Tab内容设置为可见。
  11.   HTML结构如下:
  12.              <dl>
  13.                 <dt class='tab-a first'><a href='#a'>Tab A</a></dt>
  14.                 <dd id='a' class='content-a'>
  15.                 Content A
  16.                 </dd>
  17.                 <dt class='tab-b'><a href='#b'>Tab B</a></dt>
  18.                 <dd id='b' class='content-b'>
  19.                 Content B
  20.                 </dd>
  21.                 <dt class='tab-c'><a href='#c'>Tab C</a></dt>
  22.                 <dd id='c' class='content-c'>
  23.                 Content C
  24.                 </dd>
  25.                 <dt class='tab-d'><a href='#d'>Tab D</a></dt>
  26.                 <dd id='d' class='content-d'>
  27.                 Content D
  28.                 </dd>
  29.             </dl>
  30.             使用该结构的一个好处在于缺少CSS时依然可以清晰的阅读内容。
  31.             关键的CSS代码如下
  32.              dd{
  33.                 padding: 5px;
  34.                 /*隐藏Tab的内容*/
  35.                 display:none;
  36.                 -moz-border-radius: 5px;
  37.                 margin-top:20px
  38.             }
  39.             
  40.             dd:target{
  41.                 position: absolute;
  42.                 /*显示Tab的内容*/
  43.                 display:block;
  44.             }
  45.             /*给Tab以及相应的内容设置相同的背景色*/
  46.             .tab-a,.content-a{
  47.                 background: #CCFF00;
  48.             }
  49.             .tab-b,.content-b{
  50.                 background: #CCFFFF;
  51.             }
  52.             .tab-c,.content-c{
  53.                 background: #FFFF00;
  54.             }
  55.             .tab-d,.content-d{
  56.                 background: #FFCCFF;
  57.             }
  58.             

  59.   使用CSS方案的一个弊端在于不易区分哪个Tab是当前选中的,一个简单的方式是给相应的Tab以及Tab内容设置相同的背景色,这样当Tab内容显示时,能够更清晰的辨别当前Tab。此外,由于是使用了CSS3中的选择符,因此目前只能在Firefox、Safari、IE8等现代浏览器下使用。
  60.   方案二: 纯锚点
  61.   方案二的原理很简单,在大多数浏览器下,当点击锚点链接时,锚点对应的内容会自动跳到可视范围以内。根据该原理,将Tab的所有内容放到一个固定高度的容器中,并且设置容器的overflow为hidden,此外每个Tab内容的高度需要与容器保持一致。在该结构下,当点击锚点链接时对应的内容会自动跳转到可视范围以内容,即容器内。
  62.   具体的HTML结构如下:
  63. <ul id='tab_nv'>
  64.                 <li class='tab-a'><a href='#a2'>Tab A</a></li>
  65.                 <li class='tab-b'><a href='#b2'>Tab B</a></li>
  66.                 <li class='tab-c'><a href='#c2'>Tab C</a></li>
  67.                 <li class='tab-d'><a href='#d2'>Tab D</a></li>
  68.             </ul>
  69.             <div id='tab_content'>
  70.                 <div id='a2' class='content content-a'>
  71.                 Content A
  72.                 </div>
  73.                 <div id='b2' class='content content-b'>
  74.                 Content B
  75.                 </div>
  76.                 <div id='c2' class='content content-c'>
  77.                 Content C
  78.                 </div>
  79.                 <div id='d2' class='content  content-d'>
  80.                 Content D
  81.                 </div>
  82.             </div>

  83.   由于和方案一的原理不一样,此处的HTML结构也只能使用Tab和内容分离的结构,使用该结构的一个问题在于当CSS缺失的情况下无法清晰的阅读内容。
  84.   关键的CSS代码如下:
  85. /*给Tab Content容器设置高度*/
  86.             #tab_content{
  87.                 height: 190px;
  88.                 overflow: hidden;
  89.             }
  90.             /*给每个Tab Content定高度,需要与容器保持一致*/
  91.             #tab_content .content{        
  92.                 padding: 5px;
  93.                 -moz-border-radius: 5px;
  94.                 height: 190px;
  95.                 overflow: hidden;
  96.             }

  97.   与方案一一样,这里也通过给Tab以及对应内容设置相同背景色来解决选中识别问题。
  98.   总结
  99.   1. 纯CSS实现的Tab受限很多,比如方案二中需要给每个Tab Content设置相同的高度。
  100.   2. 无法有效的标识当前选中的Tab,本文是通过设置相同背景色做区分,在很多情况下不一定适用。
  101.   3. 两个方案都存在兼容性问题,方案一使用了CSS3的选择符,受限于CSS的实现;而方案二据说在Opera下不灵。
  102.   4. 方案一中,当点击其他会触发:target的锚点(或发生类似交互)时,Tab Content会隐藏。
复制代码

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-12-29 11:49 , Processed in 0.040146 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表