html选项卡怎么做css,纯CSS3制作Tabs选项卡

Tabs选项卡对于Web前端攻城师来说并不陌生,也制作了不少,我们在《CSS3+jQuery制作切角的Tabs》也介绍了一个使用CSS3配合jQuery制作Tabs的实例。我想大家在制作Tabs选项卡大多数都是使用jQuery或者javaScript来实现的。而单独使用纯CSS来制作Tabs来说还是比较少见。随着CSS3和CSS技术不断的更新,我们放弃使用jQuery或javaScrip来制作Tabs选项卡从此不在是一件难事了,那么今天我就要和你一起见证这一事实——使用纯CSS制作Tabs选项卡。

使用纯CSS来制作Tabs选项卡,我们主要是借助CSS的“:hover”来实现。使用“:hover”制作Tabs选项卡,前提有一个条件,那就是不考虑IE6浏览器下的效果。具体原因我想不用我说大家都知道了,那就是因为在IE6浏览器下只有元素支持“:hover”,那么如果其他元素要使用“:hover”就必须借助jQuery(具体如何实现大家可以参考前面的《浏览器兼容之旅的第四站:IE常见Bug——part2》),这样一来就违背了我们的初衷,所以我们在此放弃IE6浏览器下的效果。别的先不说了,我们一起进入今天的主题吧。

HTML Markup

制作Tabs的结构大家在熟悉不过了,下面我们也按老样子创建一个结构清洁具有语义化的Tabs选项卡的HTML Markup。

Header for Tab1

Content for Tab1

Header for Tab2

Content for Tab2

Header for Tab3

Content for Tab3

在上面的HTML Markup中,我们拥有:

有一个div,包含了Tabs所有内容——div#cssTabs;

三个Tabs选项,而且每个选项放在一个div中——div#tab1,div#tab2,div#tab3

在各个div#tabs中包含了一个标题h3.tabHead和选项卡所对应的内容div#tabContent

CSS Code

结构有了,我们现在需要的就是给Tabs样式了。

/*CSS Tabs style*/

#cssTabs {

position: relative;

width: 600px;

height: 290px;

margin: 0 auto;

}

.tabHead {

font-weight: normal;

padding: 5px;

height: 30px;

line-height: 30px;

text-align: center;

border: 1px solid #000;

border-width: 1px 1px 0;

-moz-border-radius: 5px 5px 0 0;

-webkit-border-radius: 5px 5px 0 0;

border-radius: 5px 5px 0 0;

width: 140px;

position: absolute;

left: 0;

top: 0;

background: #fff;

cursor: pointer;

}

.tabContent {

padding: 10px 20px;

background: #fff;

border: 1px solid #000;

position: absolute;

top: 40px;

left: 0;

height: 230px;

width: 100%;

}

#tab1 .tabHead {

z-index: 3;

}

#tab2 .tabHead {

left: 155px;

z-index: 1;

}

#tab3 .tabHead {

left: 310px;

z-index: 1;

}

#tab1 .tabContent {

z-index: 2;

}

这里我们主要使用了绝对定位来给Tabs定的位,并且使用“z-index”的不同值来控制各个元素的层次关系。首先给每个Tabs的标题进行位置定位,使其横排在顶部,并按先后顺序排列;而Tabs对应的主内容也进行绝对定位,并且安放在同一位置。现在最关键的就是他们所在Z轴的先后顺序,我们主要使用“z-index”来控制其层次,首先将所有"tabHead"定在“1”层位置,而所有内容定位在“2”层位置,这样一来让所有标题都在对应的内容下面,但为了主选项卡标题和主内容能相互对应,增强视觉效果,在将“tab1”的“tabHead”提高到所有内容上面,此处将其设置值为“3”,具体代码如上,其修饰后的效果如下所示:

8601f075c897e51c0a083ca2384b45f1.png

接下来是我们使用CSS实现Tabs功能的关键一步,此处我们只是实现“hover”状态的Tabs效果,也就是说,当鼠标移动到对应的标题上,显示相对应的选项卡内容,比如说我们将鼠标移动到“tab2”的标题上,显示相对应的主内容,但当我们鼠标离开所有选项卡标题位置时,以恢复到默认状态,也就是上图显示的样子。那么下面我们来看如何使用“:hover”来实现其功能:

#tab1:hover h3,

#tab1:focus h3,

#tab1:active h3,

#tab2:hover h3,

#tab2:focus h3,

#tab2:active h3,

#tab3:hover h3,

#tab3:focus h3,

#tab3:active h3 {

z-index: 4;

font-weight: bold;

}

#tab1:hover .tabContent,

#tab1:focus .tabContent,

#tab1:active .tabContent,

#tab2:hover .tabContent,

#tab2:focus .tabContent,

#tab2:active .tabContent,

#tab3:hover .tabContent,

#tab3:focus .tabContent,

#tab3:active .tabContent {

z-index: 3;

}

上面的代码是我们实现Tabs功能的关键一步,分别在各“tabs”的"hover",“focus”和“active”状态下,改变相应的“z-index”的层次关系。这里有一点需要保证“首先要将"hover"状态下的选项卡主内容都比前面的默认“z-index”值大,而同时必须保证各选项卡的标题在“z-index”的值大。”这样一来我们就能实现所需的Tabs效果。

现在功能实现了,我们还可以使用CSS3的transition来给其增加一点动态变化的效果:

.tabContent {

opacity: 0;

filter: alpha(opacity=0);

-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";

-webkit-transition : opacity 0.5s ease-in 0.218s;

-moz-transition : opacity 0.5s ease-in 0.218s;

-o-transition : opacity 0.5s ease-in 0.218s;

-ms-transition : opacity 0.5s ease-in 0.218s;

transition : opacity 0.5s ease-in 0.218s;

}

#tab1 .tabContent {

opacity: 1;

filter: alpha(opacity=100);

-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";

}

#tab1:hover .tabContent,

#tab1:focus .tabContent,

#tab1:active .tabContent,

#tab2:hover .tabContent,

#tab2:focus .tabContent,

#tab2:active .tabContent,

#tab3:hover .tabContent,

#tab3:focus .tabContent,

#tab3:active .tabContent {

opacity: 1;

filter: alpha(opacity=100);

-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";

}

这样我们就给Tabs添加了一点点动化效果,具体可以参考下面有关于制作Tabs的全部CSS代码

CSS CODE(全部效果代码):

*{margin: 0;padding:0;}

body {margin: 0;padding: 20px 50px;}

/*CSS Tabs style*/

#cssTabs {

position: relative;

width: 600px;

height: 290px;

margin: 0 auto;

}

.tabHead {

font-weight: normal;

padding: 5px;

height: 30px;

line-height: 30px;

text-align: center;

border: 1px solid #000;

border-width: 1px 1px 0;

-moz-border-radius: 5px 5px 0 0;

-webkit-border-radius: 5px 5px 0 0;

border-radius: 5px 5px 0 0;

width: 140px;

position: absolute;

left: 0;

top: 0;

background: #fff;

cursor: pointer;

}

.tabContent {

padding: 10px 20px;

background: #fff;

border: 1px solid #000;

position: absolute;

top: 40px;

left: 0;

height: 230px;

width: 100%;

opacity: 0;

filter: alpha(opacity=0);

-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";

-webkit-transition : opacity 0.5s ease-in 0.218s;

-moz-transition : opacity 0.5s ease-in 0.218s;

-o-transition : opacity 0.5s ease-in 0.218s;

-ms-transition : opacity 0.5s ease-in 0.218s;

transition : opacity 0.5s ease-in 0.218s;

}

#tab1 .tabHead {

z-index: 3;

}

#tab2 .tabHead {

left: 155px;

z-index: 1;

}

#tab3 .tabHead {

left: 310px;

z-index: 1;

}

#tab1 .tabContent {

z-index: 2;

opacity: 1;

filter: alpha(opacity=100);

-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";

}

#tab1:hover h3,

#tab1:focus h3,

#tab1:active h3,

#tab2:hover h3,

#tab2:focus h3,

#tab2:active h3,

#tab3:hover h3,

#tab3:focus h3,

#tab3:active h3 {

z-index: 4;

font-weight: bold;

}

#tab1:hover .tabContent,

#tab1:focus .tabContent,

#tab1:active .tabContent,

#tab2:hover .tabContent,

#tab2:focus .tabContent,

#tab2:active .tabContent,

#tab3:hover .tabContent,

#tab3:focus .tabContent,

#tab3:active .tabContent {

z-index: 3;

opacity: 1;

filter: alpha(opacity=100);

-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";

}

上面只使用了几个CSS3的属性,当然你还可以使用更多的CSS3技术,制作出更炫更靓丽的Tabs。

缺点:

使用纯CSS制作Tabs有几个缺点让我们无法忍受:这一切的效果都是在一个固定的宽度和高度的范围内完成的,特别是Tabs选项卡对应的主内容,当其内容超过所设置的高度时无法自适应,就算使用“overfow:auto”也会增有损我们的视觉效果;另上一个就是无法在IE6下正常运行,原因就不说了,在说无语了。

优点:

使用纯CSS制作Tabs有一个最大的优点:使用这种方法制作Tabs无需使用任何jQuery和JavaScript脚本,在不支持脚本的浏览器中也能正常运行。

虽然效果有点呆板,但也不为是一种方法,但具体是否适合运用到项目中,还需考虑,因为我至今为止还没有看到这种方法使用到具体的项目中,所以大家使用时考虑为先。那么到此有关于使用纯CSS制作Tabs就介绍到此。具体效果大点可以点击Demo。

如需转载烦请注明出处:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值