CSS 中固定定位的 header 为什么偏右且未与 hero 对齐?
结论
.header 偏移的主要原因是同时设置了 width: 100% 和左右各 6.25rem 的外边距。固定定位元素的 width: 100% 通常按视口宽度计算,外边距会继续占用空间,导致总宽度超过可用宽度,容易出现横向溢出或视觉上未居中的情况。
.header 使用了 position: fixed,因此会脱离普通文档流。body { max-width: 1440px; margin: auto; } 不会自动限制它的宽度。.hero-image 的 top: 4.5rem 只会让图片向下移动,不会把 header 向右推。
调整 header 的宽度和定位
如果希望导航栏在视口中居中,同时保留两侧各 6.25rem 的间距,可以移除 .header 的左右外边距,用 left: 50% 和 transform 实现居中:
.header {
position: fixed;
top: 0;
left: 50%;
transform: translateX(-50%);
box-sizing: border-box;
width: min(calc(100vw - 12.5rem), 1240px);
margin: 0;
padding: 0.8rem 1.5rem;
display: flex;
align-items: center;
background-color: #f7f3e3;
transition: top 0.3s;
z-index: 100;
}
.header-jmeno {
flex: 1;
width: auto;
margin: 0;
display: flex;
align-items: center;
}
.nav-links {
display: flex;
align-items: center;
gap: 3rem;
padding: 0;
margin: 0;
list-style: none;
}
12.5rem 是两侧间距的总和。1240px 则是页面宽度 1440px 减去两侧各 100px(6.25rem)后的内容宽度。若想让导航栏更靠近视口边缘,可以适当减小两侧间距。窄屏下还需要通过媒体查询调整宽度、内边距和菜单间距,避免导航内容拥挤。
让 hero 图片和导航栏使用相同的对齐基准
.hero-image 设置了 max-width: 100%,图片最多占据父容器的宽度;而 header 的固定定位不受 body 最大宽度的自动约束。建议为页面内容和 header 设置一致的宽度规则。如果希望 hero 图片与 header 边缘对齐,可以将图片放入相同宽度的容器,或为图片设置与 header 相同的宽度和居中方式。
例如,让图片保持在主体宽度内,并以块级元素显示:
.hero-image {
display: block;
width: 100%;
height: auto;
position: relative;
top: 4.5rem;
}
这种写法假设 hero 区域没有额外的左右内边距。如果 header 保留两侧缩进,而图片铺满整个主体区域,两者的左右边缘就不会对齐。可以根据设计决定是否对齐边缘,或让图片铺满主体区域。
额外检查
HTML 中的 id 属性不应包含 #。例如,当前的 id="#portfolio" 与链接 href="#portfolio" 不匹配,应改为 id="portfolio";o-mne 和 kontakt 也同样处理。这个问题不会导致 header 偏右,但会影响导航链接跳转。
备注:内容仅供参考。
