【前端基础小案例】HTML+CSS打造精美选项卡菜单效果

🔥一个人走得远了,就会忘记自己为了什么而出发,希望你可以不忘初心,不要随波逐流,一直走下去🎶
🦋 欢迎关注🖱点赞👍收藏🌟留言🐾
🦄 本文由 程序喵正在路上 原创,CSDN首发!
💖 系列专栏:前端基础小案例&小项目
🌠 首发时间:2022年8月20日
✅ 如果觉得博主的文章还不错的话,希望小伙伴们三连支持一下哦

一、前期准备

素材和源码可以在我发布的资源里免费下载,可点击下方链接进行下载

https://download.csdn.net/download/weixin_62511863/86404929

二、效果展示

实现如下图的效果:

在这里插入图片描述

阅读温馨提示:代码注释前面有 “=========” 标记的即为较之前面修改的代码

三、核心知识点

  • display 元素类型转换
  • vertical-align 样式
  • CSS 精灵图技术
  • padding 的灵活运用
  • 行内块级(inline-block)元素产生的空隙消除技术

四、具体实现

  • 构建一个长 800px50px 的长方形盒子,为盒子加上圆角边框的效果

    代码:

    <div class="tab"></div>
    
    /* 消除所有盒子内外边距 */
    * {
        margin: 0;
        padding: 0;
    }
    
    .tab {
        width: 800px;
        height: 50px;
        /* 添加背景颜色便于观察 */
        background-color: #FE94A9;
        /* 添加圆角边框 */
        border-radius: 50px;
        /* 让盒子水平居中 */
        margin: 50px auto 0px;
    }
    

    效果为:
    在这里插入图片描述

  • 往大盒子 div 里面添加小盒子 span

    代码修改处为:

    <div class="tab">
        <!-- ========将每个选项用span包裹起来,才能进行单独的样式设置 -->
        <span>备孕期间 </span>
        <span>怀孕 </span>
        <span>0-1岁 </span>
        <span>1-2岁 </span>
        <span>2-3岁</span>
    </div>
    
    .tab {
        width: 800px;
        height: 50px;
        /* ========改变背景颜色 */
        background-color: #F7F7F7;
        /* 添加圆角效果 */
        border-radius: 50px;
        margin: 50px auto 0px;
    }
    
    /* ========注意:相邻两个选项卡中字体宽度不一样,所以span宽度不能写死 */
    .tab span {
        /* 转换为行内块元素,让高度的设置可以生效,但是span之间会产生间隙 */
        display: inline-block;
        border: 1px solid red;
        height: 40px;
        /* 通过内边距的设置让文字居中显示 */
        padding: 0px 40px;
        line-height: 40px;
    }
    

    前后效果比对:
    在这里插入图片描述
    在这里插入图片描述

  • 消除转换为行内块元素后,相邻 span 之间的间隙

    代码修改处为:

    .tab {
        width: 800px;
        height: 50px;
        background-color: #F7F7F7;
        /* 添加圆角效果 */
        border-radius: 50px;
        /* 让盒子水平居中 */
        margin: 50px auto 0px;
        /* =========消除间隙 */
        font-size: 0px;
    }
    
    /* 注意:相邻两个选项卡中字体宽度不一样,所以span宽度不能写死 */
    .tab span {
        /* 转换为行内块元素,让高度的设置可以生效,但是span之间会产生间隙 */
        display: inline-block;
        border: 1px solid red;
        height: 40px;
        /* 通过内边距的设置让文字居中显示 */
        padding: 0px 40px;
        line-height: 40px;
        /* =========同时需要再单独给span设置字体大小 */
        font-size: 16px;
    }
    

    效果前后比对:
    在这里插入图片描述
    在这里插入图片描述

  • 让所有 spandiv 中居中显示

    代码修改处为:

    .tab {
        width: 800px;
        height: 50px;
        background-color: #F7F7F7;
        /* 添加圆角效果 */
        border-radius: 50px;
        /* 让盒子水平居中 */
        margin: 50px auto 0px;
        /* 消除间隙 */
        font-size: 0px;
        /* =========给div添加文本居中 */
        text-align: center;
    }
    

    效果前后比对:
    在这里插入图片描述

    在这里插入图片描述

  • 调整上下的间距

    代码修改处为:

    .tab {
        width: 800px;
        /* =========删去高度设置 */
        background-color: #F7F7F7;
        /* 添加圆角效果 */
        border-radius: 50px;
        /* 让盒子水平居中 */
        margin: 50px auto 0px;
        /* 消除间隙 */
        font-size: 0px;
        /* 给div添加文本居中 */
        text-align: center;
        /* =========添加内边距 */
        padding: 5px 0px;
    }
    

    效果前后比对:
    在这里插入图片描述
    在这里插入图片描述

  • 添加文本前的图标

    代码修改处为:

    <!-- 将每个选项用span包裹起来,才能进行单独的样式设置 -->
    <!-- ========添加i标签用于存放图标 -->
    <span><i class="icon1"></i>备孕期间 </span>
    <span><i class="icon2"></i>怀孕 </span>
    <span><i class="icon3"></i>0-1岁 </span>
    <span><i class="icon4"></i>1-2岁 </span>
    <span><i class="icon5"></i>2-3岁</span>
    
    /* ======== */
    .tab span i {
        display: inline-block;
        width: 26px;
        height: 26px;
        border: 1px solid red;
        /* 添加背景图片 */
        background-image: url(../images/icon.png);
        /* 让图标和文本中线对齐 */
        vertical-align: middle;
        margin-right: 5px;
    }
    
    /* 精灵图技术 */
    .tab span .icon2 {
        background-position: -26px 0px;
    }
    
    .tab span .icon3 {
        background-position: -52px 0px;
    }
    
    .tab span .icon4 {
        background-position: -78px 0px;
    }
    
    .tab span .icon5 {
        background-position: -104px 0px;
    }
    /* ======== */
    

    前后效果比对:
    在这里插入图片描述
    在这里插入图片描述

  • 设置点击文本时背景颜色变化的效果

    代码修改处为:

    <!-- 将每个选项用span包裹起来,才能进行单独的样式设置 -->
    <!-- 添加i标签用于存放图标 -->
    <!-- ========添加class="current" -->
    <span class="current"><i class="icon1"></i>备孕期间 </span>
    <span><i class="icon2"></i>怀孕 </span>
    <span><i class="icon3"></i>0-1岁 </span>
    <span><i class="icon4"></i>1-2岁 </span>
    <span><i class="icon5"></i>2-3岁</span>
    
    /* ========鼠标点击的效果需要js实现,这里我们只写交互的原理 */
    .tab .current {
        background-color: #FE94A9;
        color: #fff;
    }
    
    .tab .current .icon1 {
        background-position: 0px -26px;
    }
    
    .tab .current .icon2 {
        background-position: -26px -26px;
    }
    
    .tab .current .icon3 {
        background-position: -52px -26px;
    }
    
    .tab .current .icon4 {
        background-position: -78px -26px;
    }
    
    .tab .current .icon5 {
        background-position: -104px -26px;
    }
    

    前后效果比对:
    在这里插入图片描述
    在这里插入图片描述

  • span 添加圆角边框效果

    代码修改处为:

    .tab span {
        /* 转换为行内块元素,让高度的设置可以生效,但是span之间会产生间隙 */
        display: inline-block;
        border: 1px solid red;
        height: 40px;
        /* 通过内边距的设置让文字居中显示 */
        padding: 0px 40px;
        line-height: 40px;
        /* 同时需要再单独给span设置字体大小 */
        font-size: 16px;
        /* ========添加圆角边框 */
        border-radius: 50px;
    }
    

    前后效果比对:
    在这里插入图片描述
    在这里插入图片描述

  • 取消边框线

    代码修改处为:

    .tab span {
        /* 转换为行内块元素,让高度的设置可以生效,但是span之间会产生间隙 */
        display: inline-block;
        /* ========取消边框线 */
        height: 40px;
        /* 通过内边距的设置让文字居中显示 */
        padding: 0px 40px;
        line-height: 40px;
        /* 同时需要再单独给span设置字体大小 */
        font-size: 16px;
        /* 添加圆角边框 */
        border-radius: 50px;
    }
    
    .tab span i {
        display: inline-block;
        width: 26px;
        height: 26px;
        /* ========取消边框线 */
        /* 添加背景图片 */
        background-image: url(../images/icon.png);
        /* 让图标和文本中线对齐 */
        vertical-align: middle;
        margin-right: 5px;
    }
    

    前后效果比对:
    在这里插入图片描述
    在这里插入图片描述

精美选项卡的制作到这里就完成啦,你学会了吗?

五、源码分享

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>精美选项卡菜单</title>
    <style type="text/css">
        /* 消除所有盒子内外边距 */
        * {
            margin: 0;
            padding: 0;
        }

        .tab {
            width: 800px;
            /* 删去高度设置 */
            background-color: #F7F7F7;
            /* 添加圆角效果 */
            border-radius: 50px;
            /* 让盒子水平居中 */
            margin: 50px auto 0px;
            /* 消除间隙 */
            font-size: 0px;
            /* 给div添加文本居中 */
            text-align: center;
            /* 添加内边距 */
            padding: 5px 0px;
        }

        /* 注意:相邻两个选项卡中字体宽度不一样,所以span宽度不能写死 */
        .tab span {
            /* 转换为行内块元素,让高度的设置可以生效,但是span之间会产生间隙 */
            display: inline-block;
            height: 40px;
            /* 通过内边距的设置让文字居中显示 */
            padding: 0px 40px;
            line-height: 40px;
            /* 同时需要再单独给span设置字体大小 */
            font-size: 16px;
            /* 添加圆角边框 */
            border-radius: 50px;
        }

        .tab span i {
            display: inline-block;
            width: 26px;
            height: 26px;
            /* 添加背景图片 */
            background-image: url(../images/icon.png);
            /* 让图标和文本中线对齐 */
            vertical-align: middle;
            margin-right: 5px;
        }

        /* 精灵图技术 */
        .tab span .icon2 {
            background-position: -26px 0px;
        }

        .tab span .icon3 {
            background-position: -52px 0px;
        }

        .tab span .icon4 {
            background-position: -78px 0px;
        }

        .tab span .icon5 {
            background-position: -104px 0px;
        }

        /* 鼠标点击的效果需要js实现,这里我们只写交互的原理 */
        .tab .current {
            background-color: #FE94A9;
            color: #fff;
        }

        .tab .current .icon1 {
            background-position: 0px -26px;
        }

        .tab .current .icon2 {
            background-position: -26px -26px;
        }

        .tab .current .icon3 {
            background-position: -52px -26px;
        }

        .tab .current .icon4 {
            background-position: -78px -26px;
        }

        .tab .current .icon5 {
            background-position: -104px -26px;
        }
    </style>
</head>

<body>
    <div class="tab">
        <!-- 将每个选项用span包裹起来,才能进行单独的样式设置 -->
        <!-- 添加i标签用于存放图标 -->
        <span class="current"><i class="icon1"></i>备孕期间 </span>
        <span><i class="icon2"></i>怀孕 </span>
        <span><i class="icon3"></i>0-1岁 </span>
        <span><i class="icon4"></i>1-2岁 </span>
        <span><i class="icon5"></i>2-3岁</span>
    </div>

    <div class="tab">
        <!-- 将每个选项用span包裹起来,才能进行单独的样式设置 -->
        <!-- 添加i标签用于存放图标 -->
        <span><i class="icon1"></i>备孕期间 </span>
        <span class="current"><i class="icon2"></i>怀孕 </span>
        <span><i class="icon3"></i>0-1岁 </span>
        <span><i class="icon4"></i>1-2岁 </span>
        <span><i class="icon5"></i>2-3岁</span>
    </div>
</body>

</html>

🧸 这次的分享就到这里啦,继续加油哦^^
🐱 我是程序喵,陪你一点点进步
🍭 有出错的地方欢迎在评论区指出来,共同进步,谢谢啦

评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序喵正在路上

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值