理解 CSS 的 z-index 属性

简介: 通常认为HTML页面是二维的,但实际上,CSS还有一个z-index属性,允许层叠元素。所有的盒模型元素都处于三维坐标系中。 除了我们常用的横坐标和纵坐标, 盒模型元素还可以沿着“z轴”层叠摆放, 当他们相互覆盖时, z轴顺序就变得十分重要。

通常认为HTML页面是二维的,但实际上,CSS还有一个z-index属性,允许层叠元素。

所有的盒模型元素都处于三维坐标系中。 除了我们常用的横坐标和纵坐标, 盒模型元素还可以沿着“z轴”层叠摆放, 当他们相互覆盖时, z轴顺序就变得十分重要。

-- CSS 2.1 Section 9.9.1 - Layered presentation


默认的摆放规则

假定元素没有指定z-index属性,那么元素按照如下顺序叠放(从底到顶)

  1. 根元素的背景和边界
  2. 普通流(无定位)里的块元素(没有position或者position:static;)按HTML中的出现顺序堆叠
  3. 定位元素按HTML中的出现顺序堆叠

image.png


浮动

对于浮动的块元素来说,堆叠顺序变得有些不同。浮动块元素被放置于非定位块元素与定位块元素之间:

  1. 根元素的背景与边框
  2. 位于普通流中的后代块元素按照它们在 HTML 中出现的顺序堆叠
  3. 浮动块元素
  4. 常规流中的后代行内元素
  5. 后代中的定位元素按照它们在 HTML 中出现的顺序堆叠

image.png


使用 z-index

如果需要改变默认的摆放顺序,只需给元素指定z-indexz-index必须是整数,体现了元素在z轴的位置:

  • 底层:距离观察者最远
  • ……
  • -3 层
  • -2 层
  • -1 层
  • 0 层 (默认)
  • 1 层
  • 2 层
  • 3 层
  • ……
  • 顶层:最接近观察者

没有指定z-index的时候,所有元素默认在0层渲染。多个元素的z-index属性相同时,将按照上文描述的顺序布局。

使用z-index排序的例子:

image.png

注意,div#5的z-index无效,因为未指定position属性。


堆叠上下文

指定z-index属性将构造一个堆叠上下文。

以下元素构成堆叠上下文指:

  • 根元素html
  • 定位元素,且其z-index值不为auto
  • opacity小于1的元素
  • 在移动WebKit、Chrome22+以上,指定position: fixed的元素总是会构造堆叠上下文,即使z-indexauto

堆叠上下文中的子元素按照前述顺序摆放。堆叠上下文内部的子堆叠上下文的z-index只在父堆叠上下文中有意义。

总而言之:

  • z-index不为autoopacity小于1的元素会构建堆叠上下文。
  • 堆叠上下文可以嵌入其他堆叠上下文。
  • 每个堆叠上下文和它的同级上下文是独立的。
  • 每个堆叠上下文是自包含的。

image.png

相关文章
|
2月前
|
前端开发
css的渐变属性linear-gradient
css的渐变属性linear-gradient
|
2月前
|
前端开发
CSS属性:盒子模型
CSS属性:盒子模型
31 0
|
2月前
|
前端开发
CSS属性
CSS属性
29 0
|
10天前
|
Web App开发 前端开发 iOS开发
css所有缩写属性,CSS属性简写整理
css所有缩写属性,CSS属性简写整理
12 1
|
2月前
|
前端开发
前端基础(五)_CSS文本文字属性、背景颜色属性
本文详细介绍了CSS中关于文本和背景颜色的样式属性。包括字体大小、字体族、字体加粗、字体样式、文本行高、`font`属性、文本颜色、文本对齐方式、文本装饰线、首行缩进等文本属性,以及背景颜色、背景图片、背景重复、背景位置等背景属性。文章通过示例代码展示了这些属性的具体应用和效果。
28 3
前端基础(五)_CSS文本文字属性、背景颜色属性
|
30天前
|
前端开发
CSS 中哪些属性可以继承
在 CSS 中,属性分为可继承与不可继承。可继承属性会在子元素中沿用父元素的样式设定。常见可继承属性包括:文本属性(如 `font-family`, `color`),列表属性(如 `list-style`),表格布局属性(如 `border-collapse`),以及其他如 `visibility` 和 `direction` 等属性。正确理解这些属性有助于更高效地进行样式设计。
|
10天前
|
前端开发
css简写属性
css简写属性
20 0
|
27天前
|
前端开发 JavaScript
如何在CSS中添加自定义属性
如何在CSS中添加自定义属性
11 0
|
27天前
|
前端开发
运用CSS伪类与属性,巧妙实现背景图片旋转效果
运用CSS伪类与属性,巧妙实现背景图片旋转效果
23 0
|
29天前
|
前端开发
哪些 CSS 属性可以继承?
哪些 CSS 属性可以继承?
41 0