在这一节中,我们尝试使用弹性盒子模型来实现一个伸缩菜单。这个伸缩菜单,会根据设备的大小来显示不同的布局效果。

比如在小于600px的设备中,显示效果如下图所示;

在大于600px且小于800px的设备中,显示效果如下图所示;

在大于800px的设备中,显示效果如下图所示。

实现代码如下:

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> /*定义整体样式*/ .nav { /*去除默认样式*/ list-style-type: none; margin:0; padding:0; /*定义弹性盒子*/ display: flex; background-color:hotpink; } .nav a { /*去除默认样式*/ text-decoration: none; display: block; padding:16px; color:white; text-align: center; } .nav a:hover{background-color: lightskyblue;} /*设备大于800px时*/ @media (min-width:800px){ /*所有子元素在右边*/ .nav{justify-content: flex-end;} li{border-left:1px solid silver;} } /*设备大于600px且小于800px时*/ @media (min-width:600px) and (max-width:800px) { /*所有子元素平分*/ .nav li{flex:1;} li+li{border-left:1px solid silver;} } /*设备小于600px时*/ @media (max-width: 600px){ /*所有子元素纵向排列*/ .nav{flex-flow:column wrap;} li+li{border-top: 1px solid silver;} } </style> </head> <body> <ul class="nav"> <li><a href="#">首页</a></li> <li><a href="#">前端</a></li> <li><a href="#">后端</a></li> <li><a href="#">下载</a></li> </ul> </body> </html>

浏览器预览效果如下图所示。

分析:

当我们改变浏览器的大小时,这个伸缩菜单会随着改变布局方式,这种又叫 “响应式布局”。响应式布局的关键是使用@media来实现媒体查询,这个属于移动端开发的内容。移动端开发的内容很多,感兴趣的小伙伴们可以关注后续出版的“从0到1”系列相关图书。