首页风格
门户
博客

分享一个CSS3实现的动态内容标签页切换效果教程

日期:2012-4-14  来源:GBin1.com

分享一个CSS3实现的动态内容标签页切换效果教程

在线演示  本地下载

在这篇教程中,我们将学习如何使用CSS3来实现一个动态的标签页切换效果。希望大家喜欢。

内容标签页在网站或者web开发中经常使用到,它对于帮助我们美化页面非常的实用。这个教程中我们将使用radio button和:checked伪类和sibling组合来实现一个CSS3内容标签页。

注意目前并不是所有的浏览器都支持CSS3。

HTML标签

这里我们使用input元素来生成内容切换操作元素,并且使用label元素来生成标签页内容:
<section class="tabs">
    <input id="tab-1" type="radio" name="radio-set" class="tab-selector-1" checked="checked" />
    <label for="tab-1" class="tab-label-1">About us</label>
 
    <input id="tab-2" type="radio" name="radio-set" class="tab-selector-2" />
    <label for="tab-2" class="tab-label-2">How we work</label>
 
    <input id="tab-3" type="radio" name="radio-set" class="tab-selector-3" />
    <label for="tab-3" class="tab-label-3">References</label>
 
    <input id="tab-4" type="radio" name="radio-set" class="tab-selector-4" />
    <label for="tab-4" class="tab-label-4">Contact us</label>
 
    <div class="clear-shadow"></div>
 
    <div class="content">
        <div class="content-1">
            <p>Some content</p>
        </div>
        <div class="content-2">
            <p>Some content</p>
        </div>
        <div class="content-3">
            <p>Some content</p>
        </div>
        <div class="content-4">
            <p>Some content</p>
        </div>
    </div>
</section>
每一个input元素都包含一个数值,我们可以通过checked属性添加缺省的值。

CSS样式

首先我们需要定义尺寸并且通过设置opacity:0来隐藏input

tabs {
    position: relative;
    margin: 40px auto;
    width: 750px;
}
 
.tabs input {
    position: absolute;
    z-index: 1000;
    width: 120px;
    height: 40px;
    left: 0px;
    top: 0px;
    opacity: 0;
    cursor: pointer;
}
.tabs input#tab-2{
    left: 120px;
}
.tabs input#tab-3{
    left: 240px;
}
.tabs input#tab-4{
    left: 360px;
}

input元素将会覆盖label。这样当我们点击label的时候,其实是点击input。这个小技巧同样可以使用在mobile浏览器中(有些浏览器,点击label将不会对input产生效果)。

接下来,我们将通过定义一些样式使label看起来像标签页。注意每一个label都有一个不同的z-index。一个box-shadow将会添加深度和真实感到标签页。

.tabs label {
    background: linear-gradient(top, #5ba4a4 0%,#4e8c8a 100%);
    font-size: 15px;
    line-height: 40px;
    height: 40px;
    position: relative;
    padding: 0 20px;
    float: left;
    display: block;
    width: 80px;
    color: #385c5b;
    letter-spacing: 1px;
    text-transform: uppercase;
    font-weight: bold;
    text-align: center;
    text-shadow: 1px 1px 1px rgba(255,255,255,0.3);
    border-radius: 3px 3px 0 0;
    box-shadow: 2px 0 2px rgba(0,0,0,0.1), -2px 0 2px rgba(0,0,0,0.1);
}
 
.tabs input:hover + label {
    background: #5ba4a4;
}
 
.tabs label:first-of-type {
    z-index: 4;
    box-shadow: 2px 0 2px rgba(0,0,0,0.1);
}
 
.tab-label-2 {
    z-index: 3;
}
 
.tab-label-3 {
    z-index: 2;
}
 
.tab-label-4 {
    z-index: 1;
}

因为我们不想显示box-shadow的底部,这里我们将使用一个:after伪类来覆盖:

.tabs label:after {
    content: '';
    background: #fff;
    position: absolute;
    bottom: -2px;
    left: 0;
    width: 100%;
    height: 2px;
    display: block;
}

当我们点击一个标签页时,将会有不同的样式和颜色。最重要的一点在于确认"checked" label将会被置于所有标签页的顶层。因此,这里我们修改z-index:

.tabs input:checked + label {
    background: #fff;
    z-index: 6;
}

上面我们提到过,内容部分将包含了所有的标签页面,我们将设置z-index到5,正好处于选择的label的下方。使用这种方式,box-shadow内容将会覆盖其它的label。

在内容区域,这里有四个部分,每一个都有自己的内容。缺省,我们隐藏他们。因此,我们设置opacity为0并且z-index为1。我们不能使用display:none,因为这个属性不支持过渡效果。

.content {
    background: #fff;
    position: relative;
    width: 100%;
    height: 370px;
    z-index: 5;
    box-shadow: 0 -2px 3px -2px rgba(0,0,0,0.2), 0 2px 2px rgba(0,0,0,0.1);
    border-radius: 0 3px 3px 3px;
}
 
.content div {
    position: absolute;
    top: 0;
    left: 0;
    padding: 10px 40px;
    z-index: 1;
    opacity: 0;
    transition: all linear 0.1s;
}
 
.content div h2,
.content div h3{
    color: #398080;
}
.content div p {
    font-size: 14px;
    line-height: 22px;
    font-style: italic;
    text-align: left;
    margin: 0;
    color: #777;
    padding-left: 15px;
    font-family: Cambria, Georgia, serif;
    border-left: 8px solid rgba(63,148,148, 0.1);
}

当我们想要一个内容出现,我们设置opacity为1,并且将z-index值变大。

.tabs input.tab-selector-1:checked ~ .content .content-1,
.tabs input.tab-selector-2:checked ~ .content .content-2,
.tabs input.tab-selector-3:checked ~ .content .content-3,
.tabs input.tab-selector-4:checked ~ .content .content-4 {
    z-index: 100;
    opacity: 1;
    transition: all ease-out 0.2s 0.1s;
}

在这个教程中,我们介绍了基本的淡入/淡出的例子。你可以在演示中找到更多的样式和特效。

如果你希望看到其它的效果,你可以查看GBin1里其它的CSS3演示。希望大家喜欢!

via tympanus.net

来源:分享一个CSS3实现的动态内容标签页切换效果教程

喜欢我们的文章请您与朋友分享:

?ü?à

留言

友情提示: 本站博客不再支持访客留言,如果有问题或者留言,请发布到  GBtags.com


  1. 墨山乡人

    嗯,学到很多,谢谢!
    2012-4-28 上午9:17

  2. achun

    好文,有豁然开朗的感觉
    2012-4-16 上午7:53
今日推荐