CSS垂直导航栏顶部自动留白 设置margin-top影响导航栏解决方法
问题原因
你遇到的是两个CSS特性共同导致的异常:
- 你的垂直导航栏
ul设置了position: fixed但没有指定top: 0偏移值:固定定位元素如果不写方位偏移属性,不会自动贴齐视口边缘,会停留在它在正常文档流里的初始位置,会受父元素位置变化影响。 - 给
.hello设置的margin-top触发了外边距合并:包裹导航栏的.navbar内部的ul脱离了正常文档流,导致.navbar本身高度为0,.hello的上外边距直接和<body>的默认外边距相邻合并,把整个body的内容起始位置往下推,连带没固定到视口顶部的导航栏一起下移,就出现了导航栏顶部的多余留白。
修复方案
只需要给导航栏ul补充2行CSS即可彻底解决:
- 增加
top: 0; left: 0;属性,强制让固定定位的导航栏贴齐视口左上角,彻底脱离正常文档流的位置影响,后续内容区的任何样式改动都不会再干扰导航栏位置。
修改后完整代码
CSS部分
.hello { padding: 50px; margin-top: 50px; margin-left: 18%; margin-right: 150px; border-style: solid; border-width: 5px; text-align: center; } ul { list-style-type: none; margin: 0; padding: 0; width: 15%; background-color: #f1f1f1; position: fixed; /* 新增下方两行,固定导航栏到视口左上角 */ top: 0; left: 0; height: 100%; overflow: auto; } li a { display: block; padding: 8px 16px; text-decoration: none; } li a:hover { background-color: #555; color: white; }
HTML部分(无需改动,和原有代码一致即可)
<!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>Scroll website</title> <link rel="stylesheet" href="styles.css"> </head> <body> <!-- Navbar section --> <div class="navbar"> <ul> <li><a href="#">Home</a></li> <li><a href="#">News</a></li> <li><a href="#">Contact</a></li> <li><a href="#">About</a></li> </ul> </div> <div class="hello"> Hello world </div> </body> </html>
修改后导航栏会始终固定在视口左侧,
.hello的顶部外边距只会控制内容区自身和视口顶部的距离,不会再带动导航栏移位。
内容的提问来源于stack exchange,提问作者Chaitanya Kale
相关产品推荐
相关产品推荐

