固定导航需预留空间防遮挡,推荐body加padding-top;用checkbox+checked实现零JS响应式菜单;合理设置z-index层级;backdrop-filter需避免父容器overflow:hidden;锚点跳转用scroll-margin-top解决遮挡。
航栏用 position: fixed 就能固定,但必须处理好布局冲突直接加 position: fixed; top: 0; 很容易导致页面内容被遮挡——因为 fixed 元素脱离文档流,后续内容会“顶上来”。关键不是加定位,而是给 或主内容区预留出导航栏高度的空间。
上加 padding-top,值等于导航栏高度(比如 60px),比用 margin-top 更稳妥height 后又用 line-height 垂直居中——行高会撑开实际高度,和预设 padding 不一致vertical-align: middle 或用 flex 对齐,否则容易上下错位用 配合 :checked 伪类 + ~ 通用兄弟选择器,就能控制菜单显隐。适合静态页,零 JS 依赖,也方便 SEO。
label 必须紧邻 input,且 for 属性要匹配 input 的 id
需放在 input 后面,才能用 input:checked ~ .menu 选中.menu { display: none; };勾选后显示:input:checked ~ .menu { display: flex; }
z-index 不是越高越好,固定导航的层级要卡在内容之上、弹窗之下很多静态页把导航 z-index 设成 9999,结果导致模态框、下拉菜单被盖住。合理层级应是:导航 z-index: 100,主内容 z-index: 1,弹窗/下拉菜单 z-index: 1000。
z-index,别给里面每个 单独设backdrop-filter(毛玻璃效果),需确保父容器没设 overflow: hidden,否则滤镜失效fixed 元素在 transform 父容器内可能失效,避免给 加 transform
scroll-margin-top 一行解决点击 跳转后,目标元素顶部常被固定导航盖住。CSS 提供了原生方案:scroll-margin-top,指定滚动到该元素时,顶部预留多少空间。
h2[id] {
scroll-margin-top: 60px;
}
id 的标题生效,h2[id] 比 h2 更精准,避免误设60px),不要用 em 或 rem,防止缩放时偏移hashchange 后手动 scrollBy(0, -60)
scroll-margin-top 或 padding-top,用户第一眼就会觉得“这页面做得不细”。