了解 z-index 堆叠顺序

2024-04-21

我对使用有点困惑z-index决定堆栈顺序。

我不太明白浏览器如何处理元素position财产与没有财产的人联合起来。

无论是否有明确定位的元素,是否有一个通用规则来决定元素的堆栈顺序?

不同情况的例子值得赞赏。一般来说:

  1. 混血兄弟姐妹<div>有位置设置和无位置设置。
  2. nested <div>与兄弟姐妹混血<div>有位置设置和无位置设置。

CSS 基础知识z-index财产

一个简单的概念

The z-index属性基于一个简单的概念:沿 z 轴具有较高值的​​元素将位于具有较低值的元素前面。所以如果你申请z-index: 1 to div.box1, and div.box2 has a z-index: 0, then div.box1将覆盖div.box2.

就z轴而言,它指的是三维平面上的深度。在您的计算机上,它可以被解释为物体离您越来越近和越来越远的平面。 (了解更多关于笛卡尔坐标系 https://en.wikipedia.org/wiki/Cartesian_coordinate_system.)

enter image description here Source: Wikipedia https://es.wikipedia.org/wiki/Tridimensional


z-index适用于定位元素

除非您正在处理弹性项目或网格项目,否则z-index属性仅适用于定位元素。这意味着您可以使用z-index在元素上position: absolute, position: relative, position: fixed or position: sticky。如果该元素有position: static(默认值),或其他一些定位方案,例如float, then z-index不会有任何影响。

如前所述,尽管z-index,如定义CSS 2.1 https://www.w3.org/TR/CSS2/visuren.html#z-index,仅适用于定位元素,弹性项目 https://www.w3.org/TR/css-flexbox-1/#painting and 网格项目 https://drafts.csswg.org/css-grid/#z-order即使在以下情况下也可以创建堆叠上下文position is static.

4.3.弹性项目 Z 顺序 https://www.w3.org/TR/css-flexbox-1/#painting

Flex 项目的绘制与内联块完全相同,只是使用顺序修改的文档顺序来代替原始顺序 文件顺序,以及z-index以外的值auto创建一个堆叠上下文,即使position is static.

5.4. Z 轴排序:z-index财产 https://drafts.csswg.org/css-grid/#z-order

网格项的绘制顺序与内联块完全相同,只是顺序修改的文档顺序是 用于代替原始文件订单,以及z-index以外的值auto创建一个堆叠上下文,即使position is static.

这是一个演示z-index处理非定位的弹性项目:https://jsfiddle.net/m0wddwxs/ https://jsfiddle.net/m0wddwxs/


堆叠上下文

一旦一个元素被定位并且z-index应用后,将创建堆栈上下文。

(另请参阅:创建堆栈上下文的情况的完整列表。 https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context)

堆叠上下文是一组用于管理定位元素的规则z-index,及其后代。这些规则控制子元素在堆叠顺序以及财产的影响范围。

本质上,堆叠上下文限制了z-index作用域为元素本身,其子元素不能影响另一个堆叠上下文中元素的堆叠顺序。

如果您曾经尝试申请越来越高z-index值只是发现该元素永远不会移到前面,您可能试图在不同的堆叠上下文中覆盖一个元素。

具有共同父级的向前或向后移动的元素组 按堆叠顺序一起组成所谓的堆叠 语境。充分理解堆叠上下文是真正实现的关键 掌握 z-index 和堆叠顺序的工作原理。

每个堆叠上下文都有一个 HTML 元素作为其根元素。 当元素上形成新的堆叠上下文时,该堆叠 context 将其所有子元素限制在特定位置 堆叠顺序。这意味着如果一个元素包含在 堆叠上下文在堆叠顺序的底部,没有办法 让它出现在另一个元素的前面 即使使用堆栈顺序较高的堆栈上下文 z-index 十亿!

~ 没人告诉你关于 Z-Index 的事 http://philipwalton.com/articles/what-no-one-told-you-about-z-index/


堆叠顺序

CSS 在页面上布局元素时遵循堆叠顺序。这些是没有时的堆叠规则z-index指定,从最远到最近:

  1. 根元素的背景和边框
  2. 非定位、非浮动块元素,按照它们在源代码中出现的顺序排列
  3. 非定位浮动元素,按照它们在源代码中出现的顺序排列
  4. 行内元素
  5. 定位元素,按照它们在源代码中出现的顺序

If a z-index应用属性,修改堆叠顺序:

  1. 根元素的背景和边框
  2. 定位元素z-index小于 0
  3. 非定位、非浮动块元素,按照它们在源代码中出现的顺序排列
  4. 非定位浮动元素,按照它们在源代码中出现的顺序排列
  5. 行内元素
  6. 定位元素,按照它们在源代码中出现的顺序
  7. 定位元素z-index大于 0

Source: W3C http://www.w3.org/TR/CSS2/visuren.html#propdef-z-index


底线:一旦你理解了堆叠上下文,z-index简单。


例如z-index实际行动请参阅:z-index 是如何工作的! http://www.cssmojo.com/extras/everything_you_always_wanted_to_know_about_z-index_but_were_afraid_to_ask/

一篇简短但内容丰富的文章解释了z-index(包括如何opacity影响堆叠顺序)请参阅:没人告诉你关于 Z-Index 的事 http://philipwalton.com/articles/what-no-one-told-you-about-z-index/

完整的概要z-index,有很多示例和插图,请参阅:MDN 理解 CSSz-index https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index

要深入了解堆叠上下文,请阅读:W3C 堆叠上下文的详细描述 https://www.w3.org/TR/CSS22/zindex.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解 z-index 堆叠顺序 的相关文章

  • 如何修复 IE6 上的不透明度

    如何修复 IE6 上的不透明度 此代码不适用于 IE6 filter alpha opacity 50 moz opacity 0 5 khtml opacity 0 5 opacity 0 5 还有这段代码 description ani
  • 严格/过渡 DOCTYPE 之间的浏览器渲染差异

    前段时间我遇到了一个 问题 但我从未深入了解过 希望有人能够照亮它 当我将 DOCTYPE 从严格更改为过渡时 是什么导致某些浏览器 Chrome Opera 和 Safari 以不同方式呈现页面 我知道造成这种情况的一般原因是触发了怪异模
  • 我正在尝试向我的 vue.js 项目添加背景图像

    我想添加覆盖整个页面的背景图像 然而现在看起来是这样的 我希望它跨越整个网页 在 vue js 中这将如何完成 我还想要一个动画工具栏 以便当页面不滚动时工具栏是透明的并呈现背景图像的外观 当它滚动时 工具栏将具有当前的蓝色 这是我的小提琴
  • 如何防止 CFDocument 中的内容中间发生分页?

    我使用 cfdocument 标签从 html css 动态生成 PDF 文件 有些内容块我不想跨越多个页面 经过一番搜索后 我发现根据文档支持 page break inside 样式 然而 在我的测试中 声明 page break in
  • 如何在Eclipse中集成CSS预处理? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在 Eclipse 中编辑 SCSS 文件 最好使用语法突出显示 scss files 我发现这些资
  • iOS 解决方法:在没有 CSS 属性的情况下平滑滚动 滚动行为:平滑?

    编辑 我找到了一个 jQuery 解决方案 https codepen io chriscoyier pen dpBMVP https codepen io chriscoyier pen dpBMVP这个确实可以在 iOS 上运行 我想
  • 如何向 Rails 应用程序添加自定义字体?

    我想在 RoR 应用程序中使用几种字体 但它们的格式主要是 ttf 和 otf 等 我该如何将这些文件嵌入到我的 Rails 应用程序中 也就是说 一旦我将它们放入我的资产文件夹中 将它们嵌入我的 CSS 和 或 LESS 文件中的语法到底
  • 如何适应特定子元素的宽度?

    problem 我正在尝试创建一个技能表 我无法问下一个问题为什么 所以我创建了一个新帐户并询问 当前状态 我想将元素的宽度与 meter 也就是说 如何设定区块的标准 meter 子元素 在上面的 gif 中 img meter 我想要保
  • 如何使用 vanilla JS 实现可维护的反应式 UI

    今天我遇到了一个问题 可以通过使用像 Vue 这样的反应式和状态管理框架来轻松解决 遗憾的是 无法使用它 以下 简化 情况 链接到代码笔 https codepen io theiaz pen BazErKV 我们有一个服务器渲染的页面 其
  • 引导行之间的垂直间距

    所以我正在研究布局 为了 响应能力 我决定使用 Bootstrap 现在我猜网格系统有问题 我想要的结果如下 1 4 2
  • 即使在包裹后也具有等宽的弹性项目

    是否可以制作一个像这样的纯 CSS 解决方案 物品有一些min width 它们应该动态增长以填充所有容器宽度 然后换行到新行 列表中的所有项目都应具有相同的宽度 现在看起来是这样的 这就是我希望它看起来像的样子 我已经手动管理这些底部项目
  • @font-face 和 font-variant 是个坏主意吗?

    如果我使用 font face字体和font variant small caps对于相同的选择器 字体将回退到 Safari 中的下一个系统默认字体 我该如何解决这个问题 我一开始在创建一个示例来复制您的问题时遇到了一些麻烦 这让我意识到
  • 我可以根据同一容器中另一个元素的大小强制内联文本换行吗?

    考虑这个 jsbin http jsbin com ElIKOKe 3 edit html css output 我有这个html div class container span The lime outlined container h
  • 如何向 CSS 形状添加偏移轮廓?

    我在创建带有斜角边缘的块时遇到了一些问题 此外我需要一个斜角的边框并稍微偏离主块 问题是这个块可以根据屏幕响应 不知道具体的方法 希望大家帮忙 这就是我现在所做的 box display flex padding 20px height 2
  • 使用 jQuery 更改父元素样式

    我有下一个 html 设置 div class one div class two a href class three Click a div div 我想更改具有类的元素的背景颜色 one当我点击元素时 three使用 jQuery 这
  • CSS 无法从带有 php“includes”的相对路径工作

    文件夹结构 index php includes header html css style css 我的主项目文件夹中有 2 个子文件夹 一个是名为 includes 的文件夹 另一个名为 css 我有我的 index php主文件夹中的
  • 水平滚动的表格上的“粘性”标题......完全不可能?

    经过过去几个小时的研究后 我开始认为这是不可能的 即使在最新的浏览器上也是如此 HTML table具有水平滚动的元素 带有 粘性 thead在顶部 作为垂直滚动的周围网页的一部分 这是我的尝试 a height 100px backgro
  • 如何将 Vue.js 作用域样式应用于通过视图路由器加载的组件?

    如何将 Vue js 作用域样式应用于通过以下方式加载的组件
  • CSS 精灵按钮

    这些精灵按钮让我抓狂 我几乎可以让他们工作 但不完全是 我正在玩这个非常简单的精灵图像 我有一个 jsfiddle 项目 gt gt 这里 如果你想看的话 但如果你只想看一下 代码就在下面 http jsfiddle net jp2code
  • 如何简化这个 LESS CSS Box-shadow mixin? (带有“方向”的多个阴影)

    如何减少这段代码 可能使用循环 以拥有一个接受方向和数字的 函数 dir 想要的 方向 number 我需要多少次影子 这里是10次 color 阴影的颜色 Example 可以工作 但不是很容易使用 perspective box dir

随机推荐