7.2 层叠上下文和层叠水平
层叠上下文是一个概念,跟“块状格式化上下文”(BFC)类似。然而,概念这个东西是比较虚、比较
抽象的,要想轻松理解,我们需要将其具象化。
我们可以把层叠上下文理解为一种“层叠结界”,自成一个小世界。
层叠水平,决定了同一个层叠上下文中元素在 z 轴上的显示顺序。页面中的每个元素都是独立的个体,它们一定是会有一个类似的排名顺序的存在。而这个排名顺序、论资排辈就是这里所说的“层叠水平”。
7.3 理解元素的层叠顺序
再来说说层叠顺序。层叠顺序,英文称作 stacking order,表示元素发生层叠时有着特定的垂直显示顺序。注意,这里跟上面两个不一样,上面的“层叠上下文”和“层叠水平”是概念,
(1)位于最下面的 background/border 特指层叠上下文元素的边框和背景色。每一个层叠顺序规则仅适用于当前层叠上下文元素的小世界。
(2)inline 水平盒子指的是包括 inline/inline-block/inline-table 元素的“层叠顺序”,它们都是同等级别的。
(3)单纯从层叠水平上看,实际上 z-index:0 和 z-index:auto 是可以看成是一样的。注意这里的措辞— “单纯从层叠水平上看”,实际上,两者在层叠上下文领域有着根本性的差异。
7.4 层叠准则
(1)谁大谁上:当具有明显的层叠水平标识的时候,如生效的 z-index 属性值,在同一个层叠上下文领域,层叠水平值大的那一个覆盖小的那一个。
(2)后来居上:当元素的层叠水平一致、层叠顺序相同的时候,在 DOM 流中处于后面的元素会覆盖前面的元素。
7.5 层叠上下文
层叠上下文的层叠水平要比普通元素高
层叠上下文可以阻断元素的混合模式
层叠上下文可以嵌套,内部层叠上下文及其所有子元素均受制于外部的“层叠上下文”。
每个层叠上下文和兄弟元素独立,也就是说,当进行层叠变化或渲染的时候,只需要
考虑后代元素。
每个层叠上下文是自成体系的,当元素发生层叠的时候,整个元素被认为是在父层叠
上下文的层叠顺序中。
层叠上下文的创建
(1)天生派:页面根元素天生具有层叠上下文,称为根层叠上下文。
(2)正统派:z-index 值为数值的定位元素的传统“层叠上下文”。
(3)扩招派:其他 CSS3 属性。
层叠上下文与层叠顺序
(1)如果层叠上下文元素不依赖 z-index 数值,则其层叠顺序是 z-index:auto,可看成 z:index:0 级别;
(2)如果层叠上下文元素依赖 z-index 数值,则其层叠顺序由 z-index 值决定。
7.6 z-index 负值深入理解
(1)可访问性隐藏。z-index 负值可以隐藏元素,只需要层叠上下文内的某一个父元素加个背景色就可以。它与 clip 隐藏相比的一个优势是,元素无须绝对定位,设置position:relative 也可以隐藏,另一个优势是它对原来的布局以及元素的行为没有任何影响,而 clip 隐藏会导致控件 focus 的焦点发生细微的变化,在特定条件下是有体验问题的。它的不足之处就是不具有普遍适用性,需要其他元素配合进行隐藏。
(2)IE8 下的多背景模拟。CSS3 中有一个多背景特性,就是一个 background 可以写多个背景图。虽然 IE8 浏览器不支持多背景特性,但是 IE8 浏览器支持伪元素,于是,IE8 理论上也能实现多背景,这个背景最多 3 个,好在绝大多数场景 3 个背景图足矣。最麻烦的其实是这个伪元素生成的背景一定是使用 absolute 绝对定位,以免影响内容的布局。于是问题来了,绝对定位会覆盖常规的元素,此时则必须借助 z-index 负值
(3)定位在元素的后面。例如处理阴影
层叠上下文是一个概念,跟“块状格式化上下文”(BFC)类似。然而,概念这个东西是比较虚、比较
抽象的,要想轻松理解,我们需要将其具象化。
我们可以把层叠上下文理解为一种“层叠结界”,自成一个小世界。
层叠水平,决定了同一个层叠上下文中元素在 z 轴上的显示顺序。页面中的每个元素都是独立的个体,它们一定是会有一个类似的排名顺序的存在。而这个排名顺序、论资排辈就是这里所说的“层叠水平”。
7.3 理解元素的层叠顺序
再来说说层叠顺序。层叠顺序,英文称作 stacking order,表示元素发生层叠时有着特定的垂直显示顺序。注意,这里跟上面两个不一样,上面的“层叠上下文”和“层叠水平”是概念,
(1)位于最下面的 background/border 特指层叠上下文元素的边框和背景色。每一个层叠顺序规则仅适用于当前层叠上下文元素的小世界。
(2)inline 水平盒子指的是包括 inline/inline-block/inline-table 元素的“层叠顺序”,它们都是同等级别的。
(3)单纯从层叠水平上看,实际上 z-index:0 和 z-index:auto 是可以看成是一样的。注意这里的措辞— “单纯从层叠水平上看”,实际上,两者在层叠上下文领域有着根本性的差异。
7.4 层叠准则
(1)谁大谁上:当具有明显的层叠水平标识的时候,如生效的 z-index 属性值,在同一个层叠上下文领域,层叠水平值大的那一个覆盖小的那一个。
(2)后来居上:当元素的层叠水平一致、层叠顺序相同的时候,在 DOM 流中处于后面的元素会覆盖前面的元素。
7.5 层叠上下文
层叠上下文的层叠水平要比普通元素高
层叠上下文可以阻断元素的混合模式
层叠上下文可以嵌套,内部层叠上下文及其所有子元素均受制于外部的“层叠上下文”。
每个层叠上下文和兄弟元素独立,也就是说,当进行层叠变化或渲染的时候,只需要
考虑后代元素。
每个层叠上下文是自成体系的,当元素发生层叠的时候,整个元素被认为是在父层叠
上下文的层叠顺序中。
层叠上下文的创建
(1)天生派:页面根元素天生具有层叠上下文,称为根层叠上下文。
(2)正统派:z-index 值为数值的定位元素的传统“层叠上下文”。
(3)扩招派:其他 CSS3 属性。
层叠上下文与层叠顺序
(1)如果层叠上下文元素不依赖 z-index 数值,则其层叠顺序是 z-index:auto,可看成 z:index:0 级别;
(2)如果层叠上下文元素依赖 z-index 数值,则其层叠顺序由 z-index 值决定。
7.6 z-index 负值深入理解
(1)可访问性隐藏。z-index 负值可以隐藏元素,只需要层叠上下文内的某一个父元素加个背景色就可以。它与 clip 隐藏相比的一个优势是,元素无须绝对定位,设置position:relative 也可以隐藏,另一个优势是它对原来的布局以及元素的行为没有任何影响,而 clip 隐藏会导致控件 focus 的焦点发生细微的变化,在特定条件下是有体验问题的。它的不足之处就是不具有普遍适用性,需要其他元素配合进行隐藏。
(2)IE8 下的多背景模拟。CSS3 中有一个多背景特性,就是一个 background 可以写多个背景图。虽然 IE8 浏览器不支持多背景特性,但是 IE8 浏览器支持伪元素,于是,IE8 理论上也能实现多背景,这个背景最多 3 个,好在绝大多数场景 3 个背景图足矣。最麻烦的其实是这个伪元素生成的背景一定是使用 absolute 绝对定位,以免影响内容的布局。于是问题来了,绝对定位会覆盖常规的元素,此时则必须借助 z-index 负值
(3)定位在元素的后面。例如处理阴影