<nav> 高度为 0 是因内部元素使用 position: absolute 脱离文档流,导致父容器无法自动计算高度;解决方法是改用现代 Flexbox 布局,移除绝对定位,让容器自然包裹内容。
`` 高度为 0 是因内部元素使用 `position: absolute` 脱离文档流,导致父容器无法自动计算高度;解决方法是改用现代 flexbox 布局,移除绝对定位,让容器自然包裹内容。
在你提供的 HTML 和 CSS 中,<nav> 高度塌陷的根本原因在于:.center 和 .right 两个 <div> 使用了 position: absolute,这会使它们完全脱离标准文档流——浏览器在计算 <nav> 高度时,会忽略这些绝对定位子元素,仅考虑普通流内元素(而 <ul> 内部实际没有常规流元素,因为 <li> 被 float 拉出且未清除浮动,进一步加剧高度丢失)。
此外,HTML 结构本身也存在语义与规范问题:
✅ 推荐解决方案:采用语义化、流式友好的 Flexbox 布局,重构结构如下:
<header> <a href="/" class="logo"> <img src="resources/images/logo2.png" alt="hi-site.kr" width="100" height="100"> </a> <nav> <a href="school-info">School Info</a> <a href="/community">Community</a> <a href="/school-notice">School notice</a> </nav> <a href="/account" class="account-link">Account</a></header>
配套 CSS(简洁、健壮、无需 hack):
header { display: flex; justify-content: space-between; align-items: center; padding: 1rem 5vw; border-bottom: 1px solid #333; margin-bottom: 1.5rem;}.logo img { width: 100px; height: 100px; object-fit: contain;}nav { display: flex; gap: 1rem;}nav a,.account-link { padding: 0.625rem 0.75rem; color: #000; text-decoration: none; border-radius: 4px;}nav a:hover,.account-link:hover { background-color: #ffeb3b; /* yellow */}.account-link { border: 2px solid #000;}
? 关键改进点:
⚠️ 注意事项:
通过此重构,<header> 将准确反映其子内容高度,后续 <section> 自然从导航下方开始渲染,彻底解决“内容被顶到顶部”的问题。