超小屏幕下的导航栏-汉堡菜单按钮效果

倘若代码中有任何问题或疑问,欢迎留言交流~

响应式设计

响应式布局里,我们将情况分为五种:

  1. 在屏幕宽度最大为575px(通常是手机设备)
  2. 当屏幕宽度在576px到767px(通常是平板设备)
  3. 当屏幕宽度在768px到991px(通常是小型电脑设备)
  4. 当屏幕宽度在992px到1199px(通常是中型电脑设备)
  5. 当屏幕宽度在1200px以上(通常是大屏电脑设备)
    并且在css文件夹中建立media.css文件,用来存放编写网页的响应式效果。

导航栏的响应式布局思路

导航栏的响应式布局思路为,小屏幕时为了观感,用汉堡菜单按钮来代替导航栏的选项。即实现下图中的效果,而其余屏幕则改变导航栏的大小即可。
下面先给出导航栏的基础样式:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>汉堡菜单</title>
    <style>
        /* 将所有元素的内外边距和边框初始化为0 */
        * {
            margin: 0;
            padding: 0;
            border: 0;
        }
        /* 使网页占满整个窗口 */
        html, body {
            width: 100%;
            height: 100%;
        }
        /* 导航栏的宽,以及横向排列 */
        .nav {
            width: 100%;
            margin-top: 10px;
        }
        /* 一般情况下汉堡菜单不会显示 */
        #toggle , #ham_icon{
            display: none;
        }
        /* 列表的样式 */
        .nav ul {
            width: 100%;
            list-style: none;
            float: left;
        }
        .nav ul li {
            display: inline;
            margin-left: 3%;
        }
        .nav ul li a {
            text-decoration: none;
            color: black;
        }
    </style>
</head>
<body>
    <div class="nav">
        <input type="checkbox" id="toggle" />
        <label for="toggle" id="ham_icon"></label>
        <ul>
            <li><a href="#">首页</a></li>
            <li><a href="#">关于我们</a></li>
            <li><a href="#">服务</a></li>
            <li><a href="#">联系我们</a></li>
          </ul>
    </div>
</body>
</html>

这样我们就得到了一个简易的导航栏,当然我们在实际开发中可以让导航栏更加美观,简易效果如下:在这里插入图片描述

使用CSS实现汉堡菜单

  1. 隐藏复选框:我们首先会在HTML中创建一个复选框,但通常我们会在CSS中将其隐藏起来。虽然用户看不到这个复选框,但我们可以使用CSS选择器探求其是否被选中。
  2. 使用label标签
  3. 创建汉堡图标:我们通常会将汉堡图标放在
  4. CSS选择器: 我们可以使用 “:checked” 的 CSS 伪类选择器来检测复选框是否被选中。当复选框处于选中状态时,“:checked” 伪类就会生效。
  5. 更改导航菜单的显示状态:我们使用复选框的选中状态(:checked)和CSS的相邻兄弟组合器(+)来更改导航菜单的显示状态。一般来说,我们会在默认状态下隐藏导航菜单,在复选框被选中时显示导航菜单。

基于上面的响应式设计,我们可以得到响应式布局css代码结构如下:

/* 超小屏幕(小于等于575px) */
@media (max-width: 575px) {
    
}
/* 小屏幕 */
@media (min-width: 576px) {

}
/* 中等屏幕 */
@media (min-width: 768px) {
    
}
/* 大屏幕 */
@media (min-width: 992px) {
    
}
/* 超大屏幕 */
@media (min-width: 1200px) {
    
}

汉堡菜单只在超小屏幕下有效果,所以我们就只编写超小屏幕下的css代码咯。
编写出的代码如下:

/* 超小屏幕情况下 */
        @media (max-width: 575px) {
            /* 注意只显示汉堡图标,而不显示复选框的选中框 */
            #ham_icon {
                display: block;
                /* 让汉堡图标居中显示 */
                text-align: center;
            }
            /* 复选框没选中时(一般情况)隐藏列表 */
            .nav ul {
                display: none;
            }
            /* li标签设为块级元素,方便后面的显示,但因为ul为none所以列表一般是不显示的 */
            /* 所以这里的css代码都为了li标签的显示效果 */
            .nav ul li {
                width: 100%;
                display: block;
                text-align: center;
                margin: 0;
                padding: 0;
            }
            /* 当复选框被选中时,ul标签显示 */
            #toggle:checked~ul {
                display: block;
            }
        }

效果图:
非超小屏幕下:
在这里插入图片描述
超小屏幕没点击汉堡菜单:
在这里插入图片描述
超小屏幕点击汉堡菜单下:
在这里插入图片描述
总代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>汉堡菜单</title>
    <link rel="stylesheet" href="../css/media.css">
    <style>
        /* 将所有元素的内外边距和边框初始化为0 */
        * {
            margin: 0;
            padding: 0;
            border: 0;
        }
        /* 使网页占满整个窗口 */
        html, body {
            width: 100%;
            height: 100%;
        }
        /* 导航栏的宽,以及横向排列 */
        .nav {
            width: 100%;
            margin-top: 10px;
        }
        /* 一般情况下汉堡菜单不会显示 */
        #toggle , #ham_icon{
            display: none;
        }
        /* 列表的样式 */
        .nav ul {
            width: 100%;
            list-style: none;
            float: left;
        }
        .nav ul li {
            display: inline;
            margin-left: 3%;
        }
        .nav ul li a {
            text-decoration: none;
            color: black;
        }
        /* 超小屏幕情况下 */
        @media (max-width: 575px) {
            /* 注意只显示汉堡图标,而不显示复选框的选中框 */
            #ham_icon {
                display: block;
                /* 让汉堡图标居中显示 */
                text-align: center;
            }
            /* 复选框没选中时(一般情况)隐藏列表 */
            .nav ul {
                display: none;
            }
            /* li标签设为块级元素,方便后面的显示,但因为ul为none所以列表一般是不显示的 */
            /* 所以这里的css代码都为了li标签的显示效果 */
            .nav ul li {
                width: 100%;
                display: block;
                text-align: center;
                margin: 0;
                padding: 0;
            }
            /* 当复选框被选中时,ul标签显示 */
            #toggle:checked~ul {
                display: block;
            }
        }
    </style>
</head>
<body>
    <div class="nav">
        <input type="checkbox" id="toggle" />
        <label for="toggle" id="ham_icon"></label>
        <ul>
            <li><a href="#">首页</a></li>
            <li><a href="#">关于我们</a></li>
            <li><a href="#">服务</a></li>
            <li><a href="#">联系我们</a></li>
          </ul>
    </div>
</body>
</html>
  • 30
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值