了解 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 堆叠顺序 的相关文章

  • rvest如何通过id选择特定的css节点

    我正在尝试使用 rvest 包从网页中抓取数据 简单来说 html 代码如下所示 div class style div
  • 添加自定义 CSS 到 Jekyll

    我是 Jekyll 新手 我正在按顺序使用自定义 html 和 css 制作一个网站 Jekyll 默认下载 minima 主题 所以我用以下 html 覆盖了主页 all my html
  • css 表格单元格,内容有不必要的上边距

    我在代码中使用 div 块的表格单元格排列 我的代码有问题 我的 html 的预览是here http jsbin com avozik 10 edit preview 当我的第一个面板中有任何内容 文本或图像 时 inner第二个和第三个
  • Firefox 30 不再隐藏选择框箭头

    我一直使用的 技巧 是 select moz appearance none text indent 0 01px text overflow 在 FF 上进行自定义选择框 但自从版本 30 发布以来 它完全停止工作 我试图找出这是否已被弃
  • SWC with JavaScript:如何处理 CSS 导入以及如何绝对导入?

    TL DR 如何告诉 SWC 编译 React 组件中导入的 CSS 文件 如何告诉 SWC 在测试和 React 组件中编译绝对导入 这是一个最小的可重现示例 https github com janhesters riteway swc
  • 角度按钮单击旋转图标

    我有以下按钮
  • 避免滚轮被嵌入的 youtube / flash 视频劫持

    我正在对主页中嵌入 YouTube 视频的网站进行一些改进 我自己没有添加此代码 但它看起来像
  • FontAwesome 与 PrimeFaces

    我一直渴望在 Primefaces 中包含 FontAwesome 图标 最后 Optimus 昨天发布了这个伟大的新图标 gt http blog primefaces org p 3004 comment 5422 http blog
  • Chrome 扩展:插入固定 div 作为 UI

    我想使用 chrome 扩展将 div 插入固定位置 它将覆盖您当前正在查看的页面 我担心的是 我希望它可以在任何页面上工作而不改变它 除了插入我的固定 div 之外 但我不知道我这样做的方式是否可行 目前 该按钮不会显示 并且我在让 di
  • 如何将两个图像放置在一个div的对角

    如你所见 我不是 CSS 专家 我需要一些帮助来了解如何使用两个图像制作这个 div 如下图所示 托马斯是对的 但还有更好的解决方案 div img class align left src alt description of your
  • CSS3 转换会立即发生吗?

    我有一个名为 artwork需要动画化 artwork webkit transition all 20s ease in transition all 20s ease in width 75 display block margin 0
  • 如何设置引导开关的 css 颜色?

    如何在此引导开关中将蓝色更改为另一种颜色 我尝试更改输入元素的颜色和背景颜色 但它没有更改开关颜色 这是 html 和 bootstraplink https getbootstrap com docs 4 2 components for
  • 使用jquery和css点击按钮后旋转div文本

    我想使用 jquery 和 css 单击按钮后旋转 div 文本 如果用户点击Rotate Left按钮 然后文本在左侧旋转 or用户点击Rotate Right按钮然后文本在右侧旋转 Example div Happy Birthday
  • 输入和文本字段中的背景颜色

    我想更改表单文本和输入字段中的颜色背景 但是当我这样做时 它也会影响提交按钮 是否可以通过其他不影响按钮的方式来完成 我用过这段代码 input textarea background color d1d1d1 input type tex
  • 拖放区缩略图宽度图像大小

    如何更改上传图像的缩略图大小 我在我的javascript中尝试过thumbnailWidth 350 但是这不会增加缩略图大小 而缩略图只是看起来放大了 如何操作图像缩略图大小 HTML section section
  • 在 IE10 中禁用捏合放大

    在 IE10 触摸模式下 我希望仅使页面的特定部分可缩放 其余的不应该 我找到了这个 http msdn microsoft com en US library ie hh772044 aspx http msdn microsoft co
  • Symfony 2 使用 CSS 设置背景图片

    I want to put a background image for a menu in symfony But I can t figure out how to do it I managed to style a lot of t
  • 由于固定导航,增加了 FancyBox v2 的顶部和底部边距

    我目前正在开发一个网站 该网站将来将具有响应能力 该网站主要由图像组成 单击这些图像会加载到 FancyBox 中 FancyBox v2 现在具有响应能力 因此可以在屏幕尺寸发生变化时重新调整图像等的大小 作为我设计的一部分 我有两个固定
  • 如何设置旋转元素背面的样式?

    我有一个figure它是可旋转的 通过用户输入任意角度 该旋转明显地使用transition财产 当该元件旋转超过 90 度 90 度时 元件的背面可见 我想对元素的通常隐藏的一面进行与正面不同的设计 但我不确定如何实现这一点 figure
  • 跨浏览器:禁用输入字段的不同行为(文本可以/不能复制)

    我有一个被禁用的输入 html 字段 在某些浏览器 Chrome Edge Internet Explorer 和 Opera 中可以选择并复制文本 但至少在 Firefox 中这是不可能的 您可以通过在不同浏览器中执行以下代码来测试

随机推荐