Web小技术之实现响应式导航条

2020-05-10_22-15-57.gif

主要代码:

<!DOCTYPE html>
<html>
<head>
    <title>Responsive Navigation Bar</title>
    <link rel="stylesheet" type="text/css" href="node_modules\@fortawesome\fontawesome-free\css\fontawesome.css">
     <link href="node_modules\@fortawesome\fontawesome-free\css\brands.css" rel="stylesheet">
  <link href="node_modules\@fortawesome\fontawesome-free\css\solid.css" rel="stylesheet">
    <style type="text/css">
        * {
            box-sizing: border-box;
            padding:0;
            margin:0;
        }
        body {
            font-family: 'Josefin Sans',sans-serif;
        }
        .navbar {
            font-size: 18px;
            background-image:linear-gradient(260deg,#2376ae 0%, #c16ecf 100%);
            border:1px solid rgba(0,0,0,0.2);
            padding-bottom: 10px;
        }
        .main-nav {
            list-style-type: none;
            display:none;
        }
        .main-nav li {
            text-align:center;
            margin:15px auto;
        }
        .nav-links, 
        .logo {
            text-decoration:none;
            color:rgba(255,255,255,0.7);
        }
        .logo {
            display:inline-block;
            font-size: 22px;
            margin-top:10px;
            margin-left:20px;
        }
        .navbar-toggle {
            position:absolute;
            top:10px;
            right:20px;
            cursor:pointer;
            color:rgba(255,255,255,0.8);
            font-size:24px;
        }
        .active {
            display:block;
        }
        
        /*针对桌面网页设计*/
        @media all and  (min-width:768px) {
            .navbar {
                display: flex;
                justify-content: space-between;
                padding-bottom:0;
                height:70px;
                align-items:center;
            }
            .main-nav {
                display: flex;
                margin-right:30px;
                flex-direction: row;
                justify-content: flex-end;
            }
            .main-nav li {
                margin:0;
            }
            .nav-links {
                margin-left:40px;
            }
            .navbar-toggle {
                display: none;
            }
            .logo:hover,
            .nav-links:hover {
                color:rgba(255,255,255,1);
            }
        }
    </style>
</head>
<body>
    <nav class="navbar">
        <span class="navbar-toggle" id = "js-navbar-toggle">
            <i class="fas fa-bars"></i>
        </span>
        <a href="#" class="logo">logo</a>
        <ul class="main-nav" id="js-menu">
            <li>
                <a href="#" class="nav-links">Home</a>
            </li>
            <li>
                <a href="#" class="nav-links">Products</a>
            </li>
            <li>
                <a href="#" class="nav-links">About Us</a>
            </li>
            <li>
                <a href="#" class="nav-links">Concat Us</a>
            </li>
            <li>
                <a href="#" class="nav-links">Blog</a>
            </li>
        </ul>
    </nav>
    <script type="text/javascript">
        let mainNav = document.getElementById('js-menu');
        let navBarToggle = document.getElementById('js-navbar-toggle');
        navBarToggle.addEventListener("click",function(event) {
            mainNav.classList.toggle("active")
        })
    </script>
</body>
</html>

主要思想就是:

其实这样的设计,也叫做响应式Web设计,那么一般响应式Web设计,我们遵循的原则是: 移动优先,渐进增强
此例中,就是采用了移动优先的策略。

但是,


虽然我们在桌面版的网页上可以实现这个效果(本文最开头),,但若你此时打开移动端的网页,会发现,导航条的宽度为980px

2020-05-10_22-23-31.gif

为什么会这样呢?
其实啊,在我们的响应式Web开发中,视口是一个很重要的概念,在这里介绍两个主要的:理想视口,默认视口。

  • 什么是默认视口
    当我们直接把桌面版的网页在移动端打开时,设备的宽度发生变化,那么网页也会随之发生变化。在IOS中,会把桌面版的网页相对于980px进行布局,然后进行压缩,展示到移动端上。在上面的动图中,会发现,导航条的宽度确实为980px
  • 什么是理想视口
    理想视口,就是指网页的布局宽度为设备的真实宽度。在这里就是指,假设我们的移动端宽高为:375 x 667 px ,那么理想情况下就是根据宽度375px进行布局。

因此,也就是说,上面的代码中,虽然使用了媒体查询,但是在移动端仍然使用的是相对默认视口进行布局,我们可以通过设置meta标签进行转换为理想视口。

<meta name="viewport" content="width=device-width,initial-scale=1">
2020-05-10_22-34-33.gif
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容