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

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值