前军教程网

中小站长与DIV+CSS网页布局开发技术人员的首选CSS学习平台

带你如何写出一个漂亮的选项k卡(k-选择)

一、目标

本文带大家如何利用CSS3的样式来写一个选项卡,当鼠标移动到不同的选项卡会显示不同选项卡对应的内容,最终效果如下:

二、一步一步带大家走

1、先来简单的分析下,如何构建它的布局,首先最外面有一个div,然后再分别包裹着4个div分别为限期、永久、组合、会员,为了看出明显的边缘效果,我们给每个div一个边框,如下所示

<style>
        #box {
            border: 1px solid blue;
        }
        #box>div {
            border: 1px solid green;
        }
    </style>
 <div id="box">
        <div>限期</div>
        <div>永久</div>
        <div>组合</div>
        <div>会员</div>
    </div>

2、为了让它们都排在一行,我们要用到float浮动这个元素,在最外面的div和里面的div都设置float:left浮动,让元素div都向左浮动,代码如下,可以看到设置后各个div都挨在了一起

 #box {
            border: 1px solid blue;
            float: left;
        }  
        #box>div {
            border: 1px solid green;
            float: left
        }

3、为了让四个选项卡不要挨的那么紧凑,我们对里面的四个div设置它里面的字体及边距,让其看起来好看点

#box>div {
            border: 1px solid green;
            float: left;
            padding: 10px 20px;
            font-weight: bold;
        }

4、因为每个选项卡它都是有内容的,我们先对第一个选项卡设置它的内容,很明显,我们可以在限期这个div里面再设置一个div,这个div显示第一个选项卡的内容

 <div>限期
            <div>
                <span>¥50</span>
                <a href=""><button>购买</button></a>
            </div>
        </div>

5、设置了第一个选项卡内容之后,可以看到设置后它占的地方竟然影响到了我原先4个选项卡的布局,它把我们最外层这个div都给撑开了,这不是我们想要的,那我们要怎么做呢,很明显,我们要用到了绝对定位absolute,它是不会占用地方的,也就是它不会占用到最外层div的地方使其撑开,所以我们这里给限期选项卡设置它绝对定位

#box>div>div {
            position: absolute;
            border: 1px solid red;
            width: 248px;
            height: 40px;
        }

6、可以看到,设置了绝对定位后,原先最外层的div不会受到影响,因为绝对定位在页面上不会占用地方,但是也可以看到,它默认是以页面进行绝对定位的,也就是它是以body为参照物的,因为我们这里的内容都是选项卡里面的内容,每个选项卡的大小都应该一样,所以我们希望它以最外层的div作为参照物进行定位,所以这里又用到了一个相对定位,也就是内容那个div是相对哪个元素进行绝对定位的,所以我们要在最外层设置div为相对定位,让内容的div相对它来定位,并且设置相对最外层定位的距离和左边的距离定位

#box {
            border: 1px solid blue;
            float: left;
            position: relative;
        }
#box>div>div {
    position: absolute;
    border: 1px solid red;
    width: 248px;
    height: 40px;
    top: 40px;
    padding: 20px;
    left: 0px;
}

7、现在让我们设置字体为白色,第一个选项卡的背景为蓝色,选项卡内容的背景也是蓝色,我们用线性渐变来设置内容选项卡的背景色蓝色

#box>div {
            border: 1px solid green;
            float: left;
            padding: 10px 20px;
            font-weight: bold;
            /* 设置选项卡的字体颜色为白色 */    
            color: #fff;
        }
  /* 设置第一个选项卡的背景色为blue */       
 #box>div:first-child {
    background: blue
}
/* 设置第一个选项卡的内容的div背景色为blue */    
#box>div:first-child>div {
    background: linear-gradient(50deg, blue, blue);
    display: block;
}

8、同理,我们来设置其他三项的选项卡及其内容,因为过程都类似,我这里就直接上代码和展示效果,不罗嗦了

 /* 设置第一个选项卡的背景色 */    
    #box>div:first-child {
        background: blue
    }
    /* 设置第二个选项卡的背景色 */        
    #box>div:nth-child(2) {
        background: red
    }
      /* 设置第三个选项卡的背景色 */      
    #box>div:nth-child(3) {
        background: rgb(179, 255, 0)
    }
     /* 设置第四个选项卡的背景色 */      
    #box>div:last-child {
            background: rgb(0, 255, 21)
        }
        /* 设置第一个选项卡的内容的div背景色 */ 
         #box>div:first-child>div {
            background: linear-gradient(50deg, blue, blue);
        }
        /* 设置第二个选项卡的内容的div背景色 */ 
        #box>div:nth-child(2)>div {
            background: linear-gradient(50deg, red, red);
        }
        /* 设置第三个选项卡的内容的div背景色 */ 
        #box>div:nth-child(3)>div {
            background: linear-gradient(50deg, rgb(179, 255, 0), rgb(179, 255, 0));
        }
        /* 设置第一=四个选项卡的内容的div背景色 */ 
        #box>div:last-child>div {
            background: linear-gradient(50deg, rgb(0, 255, 21), rgb(0, 255, 21));
        }
        /* 设置第选项卡的内容字体大小和外边距 */ 
        #box>div>div>span {
            font-size: 20px;
            margin-right: 20px;
        }
        /* 设置第选项卡的内容的按钮属性 */ 
        #box>div>div>a>button {
            border: 1px solid #ccc;
            background: #fff;
            border-radius: 5px;
            padding: 5px 10px;
        }

9、可以看到,效果已经差不多了,但是现在内容都是叠在了一起,只是显示了最后的选项卡的内容,让我们设置默认显示第一个选项卡的内容,其他选项卡的内容隐藏起来

 #box>div>div {
            position: absolute;
            border: 1px solid red;
            width: 248px;
            height: 40px;
            top: 40px;
            padding: 20px;
            left: 0px;
             /* 设置所有的选项卡内容的div隐藏 */ 
            display: none;
        }
         /* 设置展示第一个选项卡内容的div */ 
         #box>div:first-child>div {
            background: linear-gradient(50deg, blue, blue);
            display: block
        }

10、到这里基本已经差不多了,但是现在只能展示第一个选项卡的内容和背景色,我们希望是鼠标移动到哪个选项卡就展示哪个选项卡的内容,所以,我们要给四个选项卡的div设置鼠标移动到它位置时让它展示它的内容

/* 设置选项卡鼠标移动时就将它的内容div给展示出来 */ 
  #box>div:hover>div {
            display: block
        }

11、到这里已经完成了,但是看起来还不太好看,主要是我们前期做的时候因为没有背景色给四个选项卡都设置了1px的线条,这里我们去掉后看起来的效果为如下所示

去掉border后的效果如下所示:

好,到这里我们就已经全部完成了选项卡的代码,是不是又对CSS3样式又前进了一步呢

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言