articles's People
articles's Issues
从z-index失效理解层叠上下文和层叠顺序
z-index失效原因
工作中遇到了一个问题,想通过设置z-index将元素渲染出来,遮盖后面的元素,却没有成功,谷歌了一圈发现有以下几种原因:
- 父级元素position属性为relative
- 目标元素的position属性为默认值static
层叠上下文(stacking context)
为什么position属性为默认值static的话z-index就失效了呢?查阅资料后得知,CSS中有层叠上下文(Stacking Context)
这一概念。
层叠上下文这个概念不太好直接说到底是什么,它有些类似于块级格式上下文(BFC)
,只要元素满足了一定条件,这个元素就是层叠上下文。层叠上下文在浏览器决定各个元素在z轴上的顺序起作用。
那么满足哪些条件,一个元素就可以称作是层叠上下文呢?
- 根元素,也就是html元素默认就是层叠上下文
- position属性不是static而且z-index值不为auto的元素
- opacity属性值小于1的元素
- 一些新的CSS属性也会创建层叠上下文。这些属性包括
transform
、filter
,等等,具体信息请查阅此链接。- 还有一条基本准则,如果一个CSS属性要渲染一个用户看不到的上下文的元素时,它肯定要创建一个新的层叠上下文。
好了,我们现在知道什么是层叠上下文了,也知道如何创建层叠上下文了。那么如何决定层叠上下文和层叠上下文之间,以及层叠上下文和非层叠上下文之间在z轴上的渲染顺序呢?这就引出了下一个概念,层叠顺序(stacking order)
。
层叠顺序(stacking order)
元素在z轴层叠顺序遵循下面的规则:
- 根元素,即html元素
- z-index值为负数的定位元素,z-index值大的在z-index值小的之前,相同z-index值根据在HTML中的出现顺序排列
- 非定位元素,按照在HTML中出现的顺序排列
- z-index值为auto的定位元素(以及它的子元素),按照在HTML中出现的顺序排列
- z-index值为正的定位元素(以及它的子元素),z-index值大的在z-index值小的之前,相同z-index值根据在HTML中的出现顺序排列
元素根据上面的规则,从1到5离用户越来越近。
问题解决方式
说了这么多概念上的事,最后我是怎么解决这个z-index不生效的问题的呢?按照文章开头找到的方法修改了position属性的值并没有起作用。
其实问题是父级元素有overflow: hidden
,把我想控制的子元素遮盖住了,把父级元素的overflow属性改为默认的visible就可以正常显示了。
参考资料
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.