css层叠

2018-09-03  本文已影响0人  浮若年华_7a56

最近在写代码,整到层叠上下文和图层相关的事情,然后发现自己对于CSS中的层叠相关的知识并没有自己想象中那样理解的透彻。因此花了一段时间重新学习了一下相关的知识。

在DOM树中最先出现的元素被放在首位,之后出现的元素被放在前面的元素之上。但它并不总是那么简单。只有当页面上的所有元素是在文档流之中才起作用。也就是说,当没有元素在流中的位置被改变或者已经脱离文档流,才起作用。

CSS中有两种方式影响元素的流和位置:

事实上,每个HTML元素都属于一个层叠上下文。给定层叠上下文中的每个定位元素都具有一个整数的层叠层级,具有更大堆栈级别的元素盒子总是在具有较低堆栈级别的盒子的前面(上面)。盒子可能具有负层叠级别。层叠上下文中具有相同堆栈级别的框根据文档树出现的顺序层叠在一起。

在CSS中可以使用z-indextransform可以改变元素的堆叠顺序。但也可能会导致一些奇怪的情况,比如具有较大的z-index的元素并不总是位于具有较低z-index元素的上方。在一些情况下,z-index有可能失效。

这个时候可以使用transform:translateZ()改变元素z轴的层级
Web中的任何元素都存在于一个三维空间中,除了大家熟知的平面画布中的x轴和y轴之外,还有控制第三维度的z轴,那么如何控制z轴

控制z是通过z-indextransform来实现的。先简单的了解一下这两种控制z轴的方法。

通过z-index控制z轴,需要配合position属性,且position的属性值为relativeabsolutefixedsticky时。并且给z-index显式的设置数值,数值越大,其层级越高。简单点说,数值越高,元素越在顶上。
transform可以通过它的translateZ()来改变元素的层叠顺序,其值越大,越在顶层,离屏幕越近。
不过通过transform:translateZ()改变元素z轴的层级,必须在元素的父元素中显示的设置transform-style: preserve-3d或者在transform中显示的设置perspective()

不过在一些浏览器和设备上,当transformz-index在一起使用时会发生异样,造成z-index失灵。至于为什么会失灵,
以及如何解决,这里就不多讲了
原文: [https://www.w3cplus.com/css/3d-transform-and-z-index.html]

上一篇 下一篇

猜你喜欢

热点阅读