css中z-index层级

1.z-index简介

(1) 概念

z-index属性指定了元素与元素之间的z轴上的顺序,而z轴决定元素之间发生覆盖的层叠关系。

(2) 属性值

1.默认auto

为什么元素添加定位属性(不包括static)后会覆盖普通元素?

元素添加定位属性(不包括static)后,z-index默认是auto,在层叠水平上相当于z-index为0,但是不会产生层叠上下文,但是会比普通元素没有z-index的层级要高。

2.数值

z-index支持正负值

3.inherit

继承父元素的z-index值

2.css中的层叠上下文

(1) 概念

层叠上下文是html中的一个概念,当一个元素元素含有层叠上下文的时候,那么此元素就更靠近我们的眼睛(假如我们看一堵墙的时候,只能看到墙,后面的东西我们看不到,那这堵墙就相当于含有层叠上下文,更靠近我们,后面的东西可以看做是普通元素)。

(2) 如何产生层叠上下文?

第一种方法,页面根元素(html页面根元素就是html)天生具有层叠上下文,我们称它为“根层叠上下文”。

字体在背景上就是以页面根元素为层叠上下文为基础进行覆盖的,字体是inline元素,而background是层叠顺序最低的元素,遵循层叠顺序。

第二种方法,定位元素的z-index为数值的层叠上下文。

div{position:absolute; z-index:1;}

第三种方法,其他css的属性。

这些属性可以看做z-index为auto

z-index值不为auto的flex项(父元素display:flex|inline-flex)。

 元素的opacity值不是1。

 元素的transform值不是none。

 元素的mix-blend-mode值不是normal。

 元素的filter值不是none。

 元素的isolation值不是isolate。

 position:fixed声明。

元素的-webkit-overflow-scrolling为touch。

3.css中的层叠水平

在层叠上下文中往往包含很多元素,这么多元素由层叠水平来决定z轴上的先后顺序,不至于相互打架,一起相争。

4.css中的层叠顺序

层叠顺序是指不同元素相互层叠,规定先后顺序的一套规则。而层叠上下文和层叠水平都是概念。

层叠水平有七个级别!我们引用大神张鑫旭的七阶图。

图一

小栗子:

id为box的div内部包含span元素

图二
图三

根据图三我们看出,span元素由于设置负的z-index位于div后,这里我们可以从上图中块状元素覆盖z-index为负值的元素,而层叠顺序是需要在层叠上下文中,这里的层叠上下文就是根层叠上下文。

下面布局为div中有span和img元素,span在前,并且设置position:relative,图片透明度为0.7。

图四

图四我们可以看出图片在文字之上,由于span标签已经设置了position:relative,此时span标签默认z-index:auto,根据图一我们可以看出,图片层级低于z-index:auto,此时图片应该会在文字之下,这种情况就是透明度改变了图片的层级。

图五

图五所示,图片透明度为1,自然图片变成普通流中的元素,被相对定位元素span覆盖,这里的opacity我们可以换成上面如何产生层叠上下文第三种方法中的任意一个,请自行尝试。

5.z-index的层叠

(1) 不发生嵌套

没有层叠上下文,则根据DOM顺序,后面的覆盖前面的。

在有层叠上下文的时候,根据z-index的数值大小,谁大谁在上面。

(2) 发生嵌套

每个层叠上下文相当于每一个独立的个体,内部的元素无论z-index为多大,对最顶部同级的层叠上下文元素毫无影响。


图六



效果如下:


图七

子级无论z-index为何值,都不会对父级元素层级造成影响。

为了方便理解,你可以把同一层级的层叠上下文元素看做是两个不同的人,不同的人有不同的高度,你可以比较两个人的高度,但是你不能说手长身高就更高一点吧。

层叠上下文内部的其他元素的覆盖关系就是以父级为根层叠上下文,重新按照上面的规则进行覆盖。

5.z-index使用

(1) z-index的技巧

1.定位元素z-index:auto可以看成z-index:0

例如:定位元素(不包括static)的层级要比普通元素层级要高。

2.z-index不为auto会产生层叠上下文

例如:两个同级div都设置relative和z-index为数值,这两个div就会产生层叠上下文,内部元素永远不会影响到父级div的覆盖关系。

3.z-index层叠顺序终止与父级层叠上下文

(2) z-index值最好不要超过9

z-index在使用过程中,为避免一个项目多人协作产生互相覆盖的问题,所以在使用z-index的时候,不要让z-index大于9,防止同事设置弹出框或其他层级要求很高的无法覆盖。

(3) 获取最高层级

我们在用到一些插件什么的时候,有时插件有一个很高的层级,我们自定义的元素需要覆盖在其之上,这时我们可以通过js获取body内最高层级,让我们自定义的元素z-index等于最高层级的z-index+1。

下面是js获取最高层级代码,感兴趣的可以看一下。

图八

(4) 利用z-index隐藏

在模拟button和input.submit的时候,我们可以设置样式如下:

button{

position:absolute;

z-index:-1;

}

label{

background:#999;

padding:8px 16px;

line-height:30px;

color:#fff;

}

<button id="btn"></button>

<label for='btn'></label>

上面父级无定位z-index设置,自然不会创建层叠上下文,此时层叠上下文为根层叠上下文html,则button是以为层叠上下文根元素html来进行覆盖,由于label为inline元素,button层级为z-index负值,根据层叠顺序我们可以明白button在body上面,而label位于button之上。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 1.z-index基础 z-index属性指定了元素及其子元素的[z顺序],而[z顺序]可以决定当元素发生覆盖的时...
    徐国军_plus阅读 6,347评论 1 6
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,737评论 1 92
  • z-index 与 css 定位属性 z-index 只对定位元素有作用。 如果定位元素z-index没有发生嵌套...
    soojade阅读 844评论 0 2
  • 第一节:z-index基础 较大的z-index会覆盖较小的那个z-index元素 z-index:auto 默认...
    胖鱼尾巴阅读 997评论 0 0
  • 作为一个有健身经历的健身爱好者,基本上每天一个小时健身,不管刮风下雨,在云南高原上的夏天有着极强的紫外线和极热的天...
    口述笔录阅读 279评论 0 1