CSS中的"后"发制人

问题

在Web开发中,经常遇到元素重叠的情况。比如在grid布局中,当两个元素占据同一块空间,为什么总是一个显示在前面,另一个被遮挡?

答案很简单,因为它遵循一个核心原则:在默认情况下,后出现的元素会覆盖先出现的元素。

想象 HTML 文档是一条时间线。浏览器从上到下逐行解析代码。当浏览器遇到一个新元素时,它会把它放到页面上。

  • HTML 顺序 :如果先写了 <main>,再写 <footer>,那么在浏览器眼里,<footer> 就是后来的。
  • 默认堆叠 :在没有其他规则干预的情况下,后来的 <footer> 自然会显示在先来的 <main> 上方。

这个"先来后到"的原则就是 文档流(Document Flow) 的一个基本体现,它决定了所有元素在三维空间中的默认堆叠顺序。

示例

html 复制代码
<body>
  <header>
    <h1>Hello</h1>
  </header>
  <main>
    <p>main</p>
  </main>
  <footer>
    <p>footer</p>
  </footer>
</body>
</html>
<style>
body{
  display:grid;
  grid-template:1fr auto 1fr/1fr auto;
}
header{
  grid-row:1;
  grid-column:1/3;
}
main{
  grid-row:2;
  grid-column:2;
}
footer{
  grid-row:2;
  grid-column:2;
}
</style>

显示效果如下

可见footer遮盖了main

如何控制元素的堆叠?

若想改变这种默认的"后发制人"规则时,需要使用 CSS 的 z-index 属性。

  • z-index :元素的"堆叠层级",数值越高,元素就越靠前。

给需要显示在前面的元素设置一个更高的 z-index 值。

相关推荐
believed_breadfruit3 分钟前
我开源了一个HTML 分页导出工具,解决了复杂页面的内容截断、跨页错乱和长文档白屏问题
前端·javascript·github
福狼7 分钟前
从“网墙”到柔性曲面:一次 WebGPU 波浪的逆向分析与重建
前端·逆向
宝哥聊编程15 分钟前
主流 Agent 平台对比:Coze、Dify、飞书、扣子、OpenClaw 落地实操手册
前端·人工智能·飞书
时间的情敌37 分钟前
Vue3 + Cesium 实战:本地上传 GLB 模型、模型上叠加 GLB、点击控制透明度
前端·vue.js·cesium
拖孩41 分钟前
流量主门槛从 500 降到 100,我的小程序上线 18 小时够到了线
前端·后端·微信小程序
深蓝AI1 小时前
编码 Agent 的界面味靠提示词压不住:Impeccable 用无模型规则拦同一套模板
前端·程序员
January12072 小时前
【AI方法笔记】2026-11-02:模型流式吐 JSON 时,前端会遇到四种崩法
前端·人工智能·笔记·json
asdzx672 小时前
C# 操作 PDF 元数据:从属性写入到字段提取的完整流程
前端·pdf·c#
吹什么轩2 小时前
constexpr 完全指南:从 const 的两种含义,到编译期计算的四次演进
java·前端·javascript
Bruce_Liuxiaowei3 小时前
前端校验登录态,等于没校验——一次应急广播终端高危漏洞的发现与报送
运维·前端·安全