张鑫旭的CSS深刻理解之z-index学习笔记
什么是层叠上下文?
在z轴上延伸出一个层级,离父级层叠上下文的顶部更近。css
如何产生层叠上下文?web
opacity
属性值小于 1 的元素,transform
属性值不为 "none"的元素,mix-blend-mode
属性值不为 "normal"的元素,filter
值不为“none”的元素,perspective
值不为“none”的元素,isolation
属性被设置为 "isolate"的元素,position: fixed
(Chrome等webkit内核浏览器)will-change
中指定了任意 CSS 属性,即使你没有直接指定这些属性的值(参考 这篇文章)-webkit-overflow-scrolling
属性被设置 "touch"的元素什么是层叠水平?
层叠上下文中的每一个元素都有一个层叠水平,决定同一个层叠上下文中的元素在z轴上的显示顺序。遵循“后来居上”和“谁大谁上”的层叠原则。segmentfault
一个层叠上下文内,元素发生层叠时候有着特定的垂直显示顺序,也就是下图显示的层叠规则浏览器
关于“依赖z-index的层叠上下文”
建立层叠上下文的方式前文已列出,定位元素以及父元素为flex定位的元素,必须依赖z-index值才能建立层叠上下位,因此统称为依赖z-index的层叠上下文元素。而其余属性即不依赖z-index的层叠上下文。curl
https://codepen.io/curlywater...
第一组,蓝色盒子设置opacity:0.8;z-index:2,红色盒子设置transform,证实z-index对不依赖z-index的层叠上下文元素无效
第二组,蓝色盒子relative,红色盒子flex的子元素,二者都未设置z-index,未产生层叠上下文,红色盒子父级为块状盒子,蓝色盒子为z-inedx为auto的层叠上下文元素
第三组,蓝色盒子relative,红色盒子flex的子元素,二者都z-index: 0,产生层叠上下文,后来居上布局