index的有的事,index堆叠规则

没人告诉你至于z-index的一部分事

2015/07/23 · CSS ·
z-index

原文出处: Philip
Walton   译文出处:HelKyle(@Helkyle)   

关于z-index的标题是诸多程序员都不了解它是什么样起功用的。说起来不难,不过半数以上人并不曾花时间去看规范,这频仍会照成严重的结局。

你不信?那就一同来看看上面的题材。

z-index堆叠规则,z-index堆叠

关于z-index很少有人去浓厚的刺探它,因为它看起来简单也不复杂,不就是何人的数字大,何人就彰显在头里吧?不过前几日所摘录的那篇博文,让自家震惊了。小编认可小编根本没有花时间去看具体的z-index相关文档,所以笔者所以忽视了关于z-index的部分关键的音信。

<style
type=”text/css”></style>
<link href=”public.css”
rel=”stylesheet” type=”text/css”/>

问题

在下边的HTML大家写了3<div>要素,然后每一个<div>要素里面都有二个元素,每个要素都有个背景象,并且应用absolute固化,为了能更明了地看来z-index的意义,我们写了部分别样的体裁。第壹个`元素的z-index值为1`,其他三个尚未安装。

代码如下:

XHTML

<div> <span class=”red”>Red</span> </div>
<div> <span class=”green”>Green</span> </div>
<div> <span class=”blue”>Blue</span> </div>
.red, .green, .blue { position: absolute; } .red { background: red;
z-index: 1; } .green { background: green; } .blue { background: blue; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<div>
  <span class="red">Red</span>
</div>
<div>
  <span class="green">Green</span>
</div>
<div>
  <span class="blue">Blue</span>
</div>
 
.red, .green, .blue {
  position: absolute;
}
.red {
  background: red;
  z-index: 1;
}
.green {
  background: green;
}
.blue {
  background: blue;
}

See the Pen Stacking Order
(problem) by Philip Walton
(@philipwalton) on
CodePen.

然后挑衅来了:
尝试把青莲的“成分放到任何多个因素前面,但是必须遵循上边的平整:

  • 无法改改HTML的始末
  • 不可以充实或改动任何因素的z-index属性
  • 不能充实或改动任何因素的position属性

想挑衅一些来说,就点击上边Codepen的Edit按钮去尝试一下吧。如果你无法完毕,那就随之看下来。

一、z-index

z-index用来控制成分重叠时堆叠顺序。

适用于:已经固定的成分(即position:relative/absolute/fixed)。

诚如领会就是数值越高越靠上,好像很简短,可是当z-index应用于复杂的HTML成分层次结构,其行事恐怕很难领会甚至不足预测。因为z-index的堆叠规则很复杂,下边一一道来。

第一解释3个名词:

stacking
context:翻译就是“堆叠上下文”。各个成分仅属于3个堆叠上下文,成分的z-index描述成分在一如既往堆叠上下文中“z轴”的显现顺序。

z-index取值:

默认值auto:

当页面新生成多少个box时,它私行认同的z-index值为auto,意味着该box不会协调爆发壹个新的local
stacking context,而是处于和父box相同的堆叠上下文中。

正/负整数

这几个平头就是日前box的z-index值。z-index值为0也会转移多少个local stacking
context,这样该box父box的z-index就不会和其子box做比较,约等于隔离了父box的z-index和子box的z-index。

接下去从最简单易行的不选用z-index的场馆起始将,安份守己。

不信任自个儿吧?好啊,看看您是不是缓解上面那些难点:

优先级 <span style=”color:red;”></span>
越接近成分的css属性优先级越高

赶尽杀绝方案

See the Pen Stacking Order
(problem) by Philip Walton
(@philipwalton)
on CodePen.

缓解方案很简单,你只必要给革命的`标签增加一个opacity小于1`,像下边那样:

XHTML

div:first-child { opacity: .99; }

1
2
3
div:first-child {
  opacity: .99;
}

假设你觉得不可捉摸了,不信任发光度会潜移默化叠加顺序,那么恭喜您,即将学习新的技巧,一开头看到自己也不信。

接下去让我们来寻找一番。

二、不拔取 z-index时堆叠顺序

不使用z-index的情况,也是默许的意况,即怀有因素都并非z-index时,堆叠顺序如下(从下到上)

  • 根元素(即HTML元素)的background和borders
  • 平时流中国和欧洲定位后代成分(这几个成分顺序依据HTML文档出现顺序)
  • 已定位后代成分(那么些成分顺序依照HTML文档出现顺序)

解释一下后两条规则:

  • 平常流中国和欧洲positoned element成分,总是先于positioned
    element成分渲染,所以呈现就是在positioned
    element下方,跟它在HTML中出现的次第毫无干系。

  • 从未点名z-index值的positioned
    element,他们的堆叠顺序取决于在HTML文档中的顺序,越靠前面世的要素,地点越高,和position属性无关。

例子:

澳门葡京 1<!DOCTYPE
html> <html> <head> <meta charset=”UTF-8″>
<title>Stacking without z-index</title> <style
type=”text/css”> div { font: 12px Arial; text-align: center; } .bold
{ font-weight: bold; } .opacity{opacity: 0.7;} #normdiv { height: 70px;
border: 1px dashed #999966; background-color: #ffffcc; margin: 0px
50px 0px 50px; } #reldiv1 { height: 100px; position: relative; top:
30px; border: 1px dashed #669966; background-color: #ccffcc; margin:
0px 50px 0px 50px; } #reldiv2 { height: 100px; position: relative; top:
15px; left: 20px; border: 1px dashed #669966; background-color:
#ccffcc; margin: 0px 50px 0px 50px; } #absdiv1 { position: absolute;
width: 150px; height: 350px; top: 10px; left: 10px; border: 1px dashed
#990000; background-color: #ffdddd; } #absdiv2 { position: absolute;
width: 150px; height: 350px; top: 10px; right: 10px; border: 1px dashed
#990000; background-color: #ffdddd; } </style> </head>
<body> <br /><br /> <div id=”absdiv1″
class=”opacity”> <br /><span class=”bold”>DIV
#1</span> <br />position: absolute; </div> <div
id=”reldiv1″ class=”opacity”> <br /><span
class=”bold”>DIV #2</span> <br />position: relative;
</div> <div id=”reldiv2″ class=”opacity”> <br
/><span class=”bold”>DIV #3</span> <br />position:
relative; </div> <div id=”absdiv2″ class=”opacity”> <br
/><span class=”bold”>DIV #4</span> <br />position:
absolute; </div> <div id=”normdiv”> <br /><span
class=”bold”>DIV #5</span> <br />no positioning
</div> </body> </html> View Code

有图有实质:

澳门葡京 2

 分析:

#5并未固定,处邹静之常流,所以基于上述规则,先于#1,#2,#3,#4这个已定位成分渲染,在最下方。

#1,#2,#3,#4都以已稳定成分,且未设置z-index,所以根据其在文档中冒出的顺序依次被渲染,可以去掉apacity查看清晰效果。

问题:

在 接下来的HTML里
有多少个<div>成分,并且各个<div>里富含1个<span>元素。逐个<span>被分级给定一个背景颜色:红、绿、蓝。各个<span>被停放到文档的左上角附近,部分重叠着其它的<span>成分,那样你就足以见见什么是被堆叠在面前。第1个<span>有三个z-index的值为1,而任何三个从未任
何z-index值。

以下就是以此HTML和它的为主CSS。

HTML代码

<div>
  Red
</div>
<div>
  Green
</div>
<div>
  Blue
</div>

CSS代码:

.red, .green, .blue {
  position: absolute;
  /*其它样式省略*/
}
.red {
  background: red;
  z-index: 1;
}
.green {
  background: green;
}
.blue {
  background: blue;
}

看起来的效果图应该是那样子的:

澳门葡京 3

 

 

接纳器优先级
行内style >ID采取器 > class类选用器>html标签采取器
.new ul li a.blue{color:blue;}> a:hover{color:red;} >
.white{color:white;}

堆叠顺序

z-index看上去很简短,z-index值大的因素在z-index值小的成分前边,对吗?但事实上那只是z-index的一有个别用法。很多程序猿都觉着很简短,没有花太多时光去认真阅读规则。

HTML中的每一成分都是在其余因素的前头或然前边。那是赫赫有名的堆叠顺序(Stacking
Order),这条规则在w3c规范内部说的很了解,但自身日前提到过了,大多数程序猿并不着实领悟。

若果没有涉及z-indexposition属性的话,那规则很粗略,堆叠顺序就是因素在HTML中出现的逐一。(当然假设你对行内成分运用负margin的话,唯恐情状会复杂一些。)

加上position品质的话,就是负有定位了得成分在并未被一定的要素前边。(两个要素被固化的意思那里指的是它有壹个position质量,不过不是static,而是relative,absolute等)

再加上z-index个性,事情就变得稍微奇怪。首先z-index值越大,越靠前。但是z-index特性只效劳在被定位了的要素上。所以尽管你在二个没被固定的因素上使用z-index的话,是不会有效益的。还有就是z-index会创设二个堆叠的上下文(Stacking
Contexts),大家得以知晓为二个层。

三、浮动堆叠顺序

浮动成分z-index地点介于非定位成分和一直成分之间。(从下到上)

  • 根成分(即HTML成分)的背景和border
  • 不荒谬流中国和北美洲永恒后代成分(那几个成分顺序依照HTML文档出现顺序)
  • 变迁成分(浮动成分之间是不会出现z-index重叠的)
  • 符合规律流中inline后代成分
  • 已稳定后代元素(这个成分顺序依据HTML文档出现顺序)

 non-positioned成分的背景和境界没有被扭转成分影响,可是成分中的内容受影响(浮动布局特性)

举例:

澳门葡京 4<!DOCTYPE
html> <html> <head> <meta charset=”UTF-8″>
<title>Stacking and float</title> <style
type=”text/css”> div { font: 12px Arial; text-align: center; } .bold
{ font-weight: bold; } .opacity{ opacity: 0.7;} #absdiv1 { position:
absolute; width: 150px; height: 200px; top: 10px; right: 140px; border:
1px dashed #990000; background-color: #ffdddd; } #normdiv { /*
opacity: 0.7; */ height: 100px; border: 1px dashed #999966;
background-color: #ffffcc; margin: 0px 10px 0px 10px; text-align: left;
} #flodiv1 { margin: 0px 10px 0px 20px; float: left; width: 150px;
height: 200px; border: 1px dashed #009900; background-color: #ccffcc;
} #flodiv2 { margin: 0px 20px 0px 10px; float: right; width: 150px;
height: 200px; border: 1px dashed #009900; background-color: #ccffcc;
} #absdiv2 { position: absolute; width: 150px; height: 100px; top:
130px; left: 100px; border: 1px dashed #990000; background-color:
#ffdddd; } </style> </head> <body> <br /><br
/> <div id=”absdiv1″ class=”opacity”> <br /><span
class=”bold”>DIV #1</span> <br />position: absolute;
</div> <div id=”flodiv1″ class=”opacity”> <br
/><span class=”bold”>DIV #index的有的事,index堆叠规则。2</span> <br />float:
left; </div> <div id=”flodiv2″ class=”opacity”> <br
/><span class=”bold”>DIV #3</span> <br />float:
right; </div> <br /> <div id=”normdiv”> <br
/><span class=”bold”>DIV #4</span> <br />no
positioning </div> <div id=”absdiv2″ class=”opacity”> <br
/><span class=”bold”>DIV #5</span> <br />position:
absolute; </div> </body> </html> View Code

澳门葡京 5

分析:

#4是不奇怪流中国和欧洲一向的成分,所以先被渲染,在最尾部。

#2
#33个左浮动,多个右浮动,接着被渲染。相互不会因为z-index值被覆盖。见下图。

#1
#5为已定位的元素,最后被渲染,当浏览器窗口变小时,#5在#1上面,因为HTML文档中#5在#1后面。见下图。

 澳门葡京 6

挑战:

品味使革命<span>元素堆在淡褐和红棕<span>的后面,不要打破以下规则:

  • 并非以其余方式改变HTML标记
  • 毫无添加/修改任何因素的z-index属性
  • 绝不添加/修改任何因素的position属性

只要您找到了答案,那么它应当像上面那样:

澳门葡京 7

<span style=””>优先级最高</span>

堆叠上下文

同一个父成分上边的要素会受父成分的堆叠顺序影响,所以堆叠上下文是我们知晓z-index和堆叠顺序的根本。(上面为了简化,大家称堆叠上下文为层。)

每二个层都有唯一的根节点。当壹个要素创设1个层,那么它的所有子成分都会碰到父成分的堆叠顺序影响。意味着一旦2个因素位于四个低于地点的层,那您z-index设置得再大,它也不会油但是生在此外层成分的地方。

现行我们来说说什么样处境下会发出新的层:

  • 当3个要素位于HTML文档的最外层(<html>元素)
  • 当二个要素被固定了并且具有一个z-index值(不为auto)
  • 当贰个因素被安装了opacitytransformsfilterscss-regionspaged media等属性。

一二条条条框框,Web开发者都了解,尽管她们不必然知道怎么描述

最后一条,是广大非w3c规范内部的稿子很少涉及的。平常来讲,如果多个CSS属性须要做一些特效的话,它都会创建二个新的层。

潜移默化堆叠顺序的成分有过多,小编推荐你去看w3c规范,这篇小说大家根本探索关于层的情节。

四、z-index

暗许的堆叠顺序下面说了,要想更改 成分的堆叠顺序就得用到z-index。

Note:前二种情状中,纵然有成分之间的重叠覆盖,可是它们都以处在同壹个z-layer的。因为尚未设置z-index属性,暗中同意的渲染层就是layer
0。所以要专注,差别层中成分之间覆盖是当然的,不过同样层中的成分也会发送覆盖。

z-index只适用于已经固定的要素(即position:relative/absolute/fixed)。

举例:

澳门葡京 8<!DOCTYPE
html> <html> <head> <meta charset=”UTF-8″>
<title>Stacking without z-index</title> <style
type=”text/css”> div { font: 12px Arial; text-align: center; opacity:
0.7; } .bold { font-weight: bold; } #normdiv { z-index: 8; height:
70px; border: 1px dashed #999966; background-color: #ffffcc; margin:
0px 50px 0px 50px; } #reldiv1 { z-index: 3; height: 100px; position:
relative; top: 30px; border: 1px dashed #669966; background-color:
#ccffcc; margin: 0px 50px 0px 50px; } #reldiv2 { z-index: 2; height:
100px; position: relative; top: 15px; left: 20px; border: 1px dashed
#669966; background-color: #ccffcc; margin: 0px 50px 0px 50px; }
#absdiv1 { z-index: 5; position: absolute; width: 150px; height: 350px;
top: 10px; left: 10px; border: 1px dashed #990000; background-color:
#ffdddd; } #absdiv2 { z-index: 1; position: absolute; width: 150px;
height: 350px; top: 10px; right: 10px; border: 1px dashed #990000;
background-color: #ffdddd; } </style> </head> <body>
<br /><br /> <div id=”absdiv1″> <br /><span
class=”bold”>DIV #1</span> <br />position: absolute;
<br />z-index: 5; </div> <div id=”reldiv1″> <br
/><span class=”bold”>DIV #2</span> <br />position:
relative; <br />z-index: 3; </div> <div id=”reldiv2″>
<br /><span class=”bold”>DIV #3</span> <br
/>position: relative; <br />z-index: 2; </div> <div
id=”absdiv2″> <br /><span class=”bold”>DIV
#4</span> <br />position: absolute; <br />z-index: 1;
</div> <div id=”normdiv”> <br /><span
class=”bold”>DIV #5</span> <br />no positioning <br
/>z-index: 8; </div> </body> </html> View Code

澳门葡京 9

化解方案:

以此消除措施是在率先个<div>里(石青<span>的父节点)添加一个低于1的opacity属性值。下边就是被加上的CSS的事例:

div:first-child {
  opacity: .99;
}

假定您今后很震惊,可是仍旧百思不得其解,并且不看重opacity能说了算哪些成分堆在眼下,那么是时候看看关于体制的文档了。当第三遍在那个难题上被苦恼时我一样很受惊。

瞩望接下去的内容可以让您对这么些题材更明了些。

(2)七个选取器的先行级计算
设若,用1意味着标签选用器,10意味类接纳器,100意味ID选用器,一千意味行内样式
H2{color:#FF0000} 优先级 1
.news h2{color:#0000FF} 优先级 11
div.news h2{color:#00FF00} 优先级 12
div#news h2{color:#FFFF00} 优先级 102

平等层里面的堆叠顺序

上面是一模一样层里面的堆叠顺序(从后到前):

  • 层的根成分
  • 被固定了得成分并且z-index值为负,相同z-index的情况下,依照HTML成分的书写顺序排列,上面相同。
  • 尚无被固化的因素
  • 被定位的要素,并且z-index值为auto
  • 被一定了的要素并且z-index值为正。

注意:z-index值为负的要素相比奇特,他们会先被绘制,意味着她们得以出现在其余因素的前边,甚至出今后它的父成分后边。但是需求条件是该因素必须与父成分处于相同层,并且父成分不是其一层的根成分。二个很好的事例

略知一二了怎么着和什么日期会发出一个新的层,那么下次假诺你蒙受z-index值设了很大,然而不起成效的话就去探视它的祖辈是还是不是发生了三个新的层。

五、stacking context

干什么上个例子中成分的堆叠顺序受z-index的震慑啊?因为这么些因素有些尤其的本性触发它们生活堆叠上下文(stacking
context)。

题材来了,什么样的因素会变动堆叠上下文呢?符合上边规则之一的:

  • 根元素(即HTML元素)
  • 已稳定成分(即相对定位或相对稳定)并且z-index不是暗中认同的auto。
  • a flex item with a z-index value other than “auto”,
  • 要素opacity属性不为1(See the specification for opacity)
  • 元素transform不为none
  • 元素min-blend-mode不为normal
  • 要素filter属性不为none
  • 元素isolation属性为isolate
  • on mobile WebKit and Chrome 22+, position: fixed always creates a
    new stacking context, even when z-index is “auto” (See this post)
  • specifing any attribute above in will-change even you don’t write
    themselves directly (See this post)
  • elements with -webkit-overflow-scrolling set to “touch”

在堆叠上下文(stacking context)中
,子元素的堆叠顺序还是按照上述规则。重点是,子成分的z-index值只在父元素范围内有效。子堆叠上下文被作为是父堆叠上下文中三个独自的模块,相邻的堆叠上下文完全没什么。

统计几句:

渲染的时候,先确定小的stacking context中的顺序,1个小的stacking
context确定了以往再将其坐落父stacking
context中堆叠。有种由内而外,由小及大的痛感。

比喻:HTML结果如下,最外层是HTML成分,包括#1 #2
#3,#3中又饱含着#4,#5,#6。

Root(HTML)

  • DIV #1
  • DIV #2
  • DIV #3
    • DIV #4
    • DIV #5
    • DIV #6

澳门葡京 10<!DOCTYPE
html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN”
“; <html
xmlns=”” xml:lang=”en”> <head>
<title>Understanding CSS z-index: The Stacking Context: Example
Source</title> <style type=”text/css”> * { margin: 0; }
html { padding: 20px; font: 12px/20px Arial, sans-serif; } div {
opacity: 0.7; position: relative; } h1 { font: inherit; font-weight:
bold; } #div1, #div2 { border: 1px solid #696; padding: 10px;
background-color: #cfc; } #div1 { z-index: 5; margin-bottom: 190px; }
#div2 { z-index: 2; } #div3 { z-index: 4; opacity: 1; position:
absolute; top: 40px; left: 180px; width: 330px; border: 1px solid #900;
background-color: #fdd; padding: 40px 20px 20px; } #div4, #div5 {
border: 1px solid #996; background-color: #ffc; } #澳门葡京 ,div4 { z-index: 6;
margin-bottom: 15px; padding: 25px 10px 5px; } #div5 { z-index: 1;
margin-top: 15px; padding: 5px 10px; } #div6 { z-index: 3; position:
absolute; top: 20px; left: 180px; width: 150px; height: 125px; border:
1px solid #009; padding-top: 125px; background-color: #ddf;
text-align: center; } </style> </head> <body> <div
id=”div1″> <h1>Division Element #1</h1>
<code>position: relative;<br/> z-index: 5;</code>
</div> <div id=”div2″> <h1>Division Element
#2</h1> <code>position: relative;<br/> z-index:
2;</code> </div> <div id=”div3″> <div id=”div4″>
<h1>Division Element #4</h1> <code>position:
relative;<br/> z-index: 6;</code> </div>
<h1>Division Element #3</h1> <code>position:
absolute;<br/> z-index: 4;</code> <div id=”div5″>
<h1>Division Element #5</h1> <code>position:
relative;<br/> z-index: 1;</code> </div> <div
id=”div6″> <h1>Division Element #6</h1>
<code>position: absolute;<br/> z-index: 3;</code>
</div> </div> </body> </html> View Code

效果:

澳门葡京 11 

 分析一下:

壹,因为安装了div {opacity: 0.7; position:
relative;},所以#1~#6的z-index都以行得通的。

2、为什么#4的z-index比#1高,但是却在#1下面?因为#4的z-index纵然值大,但它的作用域在富含块#3内,而#1的z-index的功能域在html内,和#3同属html,而#3的z-index小于#1。

3、为什么#2的z-index值比#5的大,还在底下?同上。

4、#3的z-index是4,但该值和#4,#5,#6的z-index不富有可比性,它们不在三个上下文环境。

伍,如何轻易的论断七个成分的堆叠顺序?

z-index对堆叠顺序的控制类似于排版时候一大章下多少个小节的规范,只怕版本号中多个大的版本号跟着小版本号。

Root-z-index值为默许auto,即0

  • DIV #2 – z-index 值为2
  • DIV #3 – z-index 值为4
    • DIV #5 – z-index值为 1,其父成分z-index值 4,所以最后值为4.1
    • DIV #6 – z-index值为 3,其父成分z-index值 4,所以最终值为4.3
    • DIV #4 – z-index值为 6,其父成分z-index值 4,所以最后值为4.6
  • DIV #1 – z-index 值为5

想看更加多例子,可参考作品最终的财富链接。

仓库顺序

Z-index看上去如此简约:高的z-index堆在低的z-index的前方,对啊?那实际上是错的,是z-index难点的一部分。它看起来如此的简要,以至于许多开发者没有花相应的年华去读相关的条条框框。

每三个在HTML文档中的成分既可以在别的因素的面前,也可以在任何因素的末尾。那就是所谓的库房顺序。决定以此顺序的平整被丰富亮堂的概念在印证文档中,不过似乎从前自身早就涉及过,这一个文档没有被多数开发者们完全弄领会。

当z-index和position属性不被回顾在内时,那个规则格外简单:基本上,堆栈顺序和因素在HTML中出现的各种一样。(好啊,其实是有几许扑朔迷离的,不过假设你不采纳压缩边界来重叠行内成分,你大概不会遇上边界难点。)

当您把岗位属性也囊括在内介绍时,任何固定成分(和她俩的子成分)都在非定位成分前被出示出来。(说3个要素被“定位”意思是它有3个分裂于静态的地点值,例如相对的,相对的,等等。)

最后,当z-index被提及时,事情变的片段复杂。最初,很当然的就算带有高z-index值的要素会在含有低z-index值的成分前边,不过后来发
现没那么粗略。首先,z-index只对定点成分起效果。假设你品味对非定位成分设定3个z-index值,那么早晚不起成效。其次,z-index值能
创制堆栈上下文环境,并且突然发现接近不难的东西变的更是错综复杂了。

 

总结

说了那般多,大家来给前边的代码加上堆叠顺序。

XHTML

<div><!– 1 –> <span class=”red”><!– 6
–></span> </div> <div><!– 2 –> <span
class=”green”><!– 4 –><span> </div>
<div><!– 3 –> <span class=”blue”><!– 5
–></span> </div>

1
2
3
4
5
6
7
8
9
<div><!– 1 –>
  <span class="red"><!– 6 –></span>
</div>
<div><!– 2 –>
  <span class="green"><!– 4 –><span>
</div>
<div><!– 3 –>
  <span class="blue"><!– 5 –></span>
</div>

当我们设置了opacity将来成为上边那样。

XHTML

<div><!– 1 –> <span class=”red”><!– 1.1
–></span> </div> <div><!– 2 –> <span
class=”green”><!– 4 –><span> </div>
<div><!– 3 –> <span class=”blue”><!– 5
–></span> </div>

1
2
3
4
5
6
7
8
9
<div><!– 1 –>
  <span class="red"><!– 1.1 –></span>
</div>
<div><!– 2 –>
  <span class="green"><!– 4 –><span>
</div>
<div><!– 3 –>
  <span class="blue"><!– 5 –></span>
</div>

红色的`从6变成1.1`,我用’.’来标记它是新生成的层里面的首先个要素。

末段大家来统计一下为什么石榴红的会去到下面:
一开始有两个层,一个由根节点产生,一个由设置了`z-index:1`并且`position:absolute`的红色
发出。当我们设置了opacity时,爆发了第多个层,并且第多少个层把蔚蓝`产生的层包裹了,意味着刚开始的z-index的作用域只在第三个层里面。而所有的

`都尚未一向依旧z-index,所以她们的堆叠顺序根据HTML出现顺序排列,于是第七个层就去到上面。

六、 合理施用z-index数值

如果现有三个堆叠的层,从上到下分别为:DIV3,DIV2,DIV1,设置时以100为距离,设置DIV1的z-index为0,DIV2的z-index为100,设置DIV3的z-index为200。那样早先时期假若急需在DIV1和DIV2之间投入一些层的话,以10为距离,设置z-index为10,20等。再须求向z-index0和z-index10之内投入一层的话以5为距离。那样的写法可以方便后期扩大添加内容。

尽量防止给z-index使用负值。当然不是纯属的,比如在做图文替换的时候可以动用负值。

仓库上下文

一组具有协同双亲的成分,依照堆栈顺序一起前进或向后移动构成了所谓的仓库上下文。丰裕知情堆栈上下文是真正主宰z-index和储藏室顺序工作原理的机要。


多个仓库上下文都有三个HTML成分作为它的根元素。当二个新的堆栈上下文在贰个因素上形成,那么那些库房上下文少禽限制所有的子成分以堆栈的顺序存储在多个尤其的地点。那表示倘诺3个成分被含有在地处尾部堆栈顺序的仓库上下文中,那么就从未有过章程先出现于任何处于更高的堆栈顺序的两样堆栈上下文成分,就算z-index值是十亿也极度!

现行,堆栈上下文有二种办法可以在3个成分上形成:

  • 当三个成分是文档的根元素时(<html>成分)
  • 当三个成分有两个position值而不是static,有二个z-index值而不是auto
  • 当二个要素有三个opacity值小于1

前三种变异堆栈上下文的章程具有很大意义并且被广泛Web开发者所精晓(固然他们不知底那些被号称什么)。第两种方法(opacity)大约一直没在w3c表明文档之外被提及过。

*{font-size:12px;} //通用选拔器 ie6不资助,少用
h1{font-size:12px;} // 标签接纳器
<div class=””></div> //类样式 【使用最多】
<div id=””></div> // id 选择器 【多用于js调用,id唯一】

引进阅读

  • Elaborate description of Stacking
    Contexts
  • The stacking
    context
  • The Z-Index CSS Property: A Comprehensive
    Look

    1 赞 3 收藏
    评论

澳门葡京 12

七、财富链接

MDN z-index

understanding css z-index

w3c z-index

 

一、z-index
z-index用来控制成分重叠时堆叠顺序。 适用于
:已经固定的因素(即position:relative/absolute/fixed)。 一…

用堆栈顺序决定贰个因素的职分

实则,为2个页面上的有着因素决定全局堆栈顺序(包括边界、背景、文本节点、等等)是不过复杂的,并且远远抢先了本文讲述的限量(再五回,参考文档)。然则大家最大的目标,就是主旨通晓这么些顺序,它亦可在十分短一段时间内支持大家坚实CSS开发的可预测性。所以,让我们打破顺序,分解为单身的仓库上下文。

多成分采纳器
h1,h2{color:red;}

在平等的库房上下文里的堆栈顺序

上面是几条为主的条条框框,来控制在二个独自的仓库上下文里的仓库顺序(从后迈入):

  1. 库房上下文的根成分
  2. 恒定成分(和她们的子成分)带着负数的z-index值(高的值被堆叠在低值的面前;相同值的因素依照在HTML中出现的逐一堆叠)
  3. 非定点成分(依据在HTML中冒出的依次排序)
  4. 固定成分(和他们的子成分)带着auto的z-index值(依照在HTML中冒出的相继排序)
  5. 一向成分(和她俩的子成分)带着正z-index值(高的值被堆叠在低值的前头;相同值的要素依据在HTML中冒出的次第堆叠)

声明:定位成分带有负的z-index值被在3个仓库上下文中先排序,那意味着他们出现在有着其他因素的前边。正因如此,它使一个要素出现在自个儿父成分之后
成为大概,这从前常见是不容许的事。当然,这局限于它的父成分与它在同三个仓房上下文,并且不是可怜堆栈上下文的根成分。七个伟大的例证如尼科尔as
Gallagher的CSS不用图像降低阴影。

后人成分选拔器
子成分接纳器

全局堆栈顺序

坚决的了然了干吗/曾几何时新的堆栈上下文形成,同时控制了同一个储藏室上下文的仓库顺序,今后让你来找出二个特定成分将面世在全局堆栈里的逐条不是那么不好了啊?

幸免不当的第一是力所能及发现新的库房上下文何时形成。假设你对三个成分设置了z-index值为十亿只是它并未在仓库顺序中前进移动,检查一下它的祖辈树,看是还是不是它的父节点形成了储藏室上下文。即便是那样的话,你的z-index值尽管有十亿也不会给你带来好处。

.new li{border:1px solid #ccc;} 后代所有因素【特别哦】
.new > .title{color:red;} 子代成分 【只有一代】【少用】
<div class=”new”>
<div class=”title”>title</div>
<div class=”content”>
<li>公司创造</li>
</div>
</div>

包扎救治

回来以前的原本难题,小编早就重建了那一个HTML的构造,添加了一些诠释,每2个标签指明了它在库房里的相继。这一个顺序是若是最初的CSS。

<div><!-- 1 -->
  <!-- 6 -->
</div>
<div><!-- 2 -->
  <!-- 4 -->
</div>
<div><!-- 3 -->
  <!-- 5 -->
</div>

那是我们熟识的,所以结果在大家的预料之中,但当我们添加opacity到第3个<div>,堆栈顺序像上面这样改变:

<div><!-- 1 -->
  <!-- 1.1 -->
</div>
<div><!-- 2 -->
  <!-- 4 -->
</div>
<div><!-- 3 -->
  <!-- 5 -->
</div>

span.red曾经的各样是6,但前几日改为1.1。作者早已采纳“.”来标注1个新的上下文环境的形成。span.red将来是不行新的上下文的率先个要素。

将来就好像更清晰了,关于为啥松石绿盒子跑到其它盒子的末端。原始的例证只含有多个堆栈上下文,根成分和形成span.red的尤其。当我们抬高
opacity到span.red的父节点上,形成了第多少个堆栈上下文,结果展现在span.red上的z-index值只好采用在老大新的仓库上下文
中。因为第3个<div>(应用opacity的百般)和它的兄弟成分没有position恐怕z-index值的聚众,他们的仓库顺序是由
他们在HTML里的源顺序决定的,也等于说第2个<div>,和它的堆栈上下文里的有所因素被第二个和第多少个<div>成分分
离。

注:以上请在chrome浏览器下测试!

来源:有关z-index的那么些事情

div.box class=”box” 的 div
div#header id=”header”的div

其余html成分都有 width height padding margin border background

body{font:bold italic 24px 燕体;} 简写的格局
letter-spacing: 字间距
line-height:150% 行高1.5倍

padding:0px 0px 1px; 上 左右 下
单行文本上下居中li{height:30px;
line-height:30px;}
li{list-style-type:none; }

伪类选取器 <a>
a:link,a:visited{text-decoration:none;}
a:hover{text-decoration:underline;}

a.a1:link{color:red;} [厉害哦]

<li><a>xx</a></li>
<li><a class=”a1″>xxxxx</a></li>

background-color
background-image
background-attachment 移动滚动条时,背景固定fix 仍然滚动 scroll

<style type=”text/css”>
body,div,li{padding:0; margin:0;}
ul,li{list-style:none;}
li{
padding-left:30px;
background-repeat:no-repeat;
background-image:url();
background-position:left center;} li背景图片水平左对齐 垂直居中对齐
</style>

行内成分 span a img 

行内成分的大大小小由内容决定,设置 width 和 height是看不到效果的

行内成分转块成分

<span style=”float:left;”></span> 变成了块成分

a span{display:block;} //行内元素转成块成分

div{display:inline;}
//块元素转行内成分

行内成分,经过什么样操作,可以改为“块成分”?
变迁、display:block、固定定位、相对定位

<span style=”float:right;”>右对齐
float成分不占空间,不占px

其余因素都可以转变 float
具备图片float:left; 只要宽度不够,就会自动换行,就有如下效果
<ul><li><img src=””/></li></ul>
图片1 图片2
图片3 图片4

p{width:580px; padding:20px 10px;} 宽就是600px了,添加padding margin
要减小width

各种div都定义中度
li{float:left;}
font-weight:bold;

<div class=”class1 class2″></div> 加七个样式

一行三个东西,3个float:left;三个float:right;

css定位
position: static(静态定位) fixed(固定定位) relative 相对固化 absolute
相对定位
left 设置成分距离左边多少路程
right top bottom

其余因素,暗许是静态定位
一贯定位:相对于浏览器窗口(在线QQ)
固定成分,脱离文档,不占空间,是”块元素“
绝对固化:是相对于”它原先的友好“来进展的晃动,所占空间保留(天猫商城图片新品标志)
position:relative;
right:-100px; //用负数

纯属定位:相对于它的先人(上级如故上上级,最终是<body>)定位,不占空间

结合使用
上边相对 position:relative;
切实那多少个成分 position:absolute; top:-10px; right:-30px;

CSS HACK
实在化解不了包容性难点,可以尝试使用css hack
CSS HACK,针对不一样浏览器IE6 IE7 IE8
火狐,编辑不相同的CSS代码的长河,就叫CSS HACK。
(1)CSS属性的HACK:
div{
background-color:red; //所有浏览器都襄助 其余 突显 red
*background-color:green; //ie6和IE7支持 ie7 显示 green
_background-color:blue; //IE6认识 最终 ie6 显示 blue

 

下面的css hack  未验证

CSS Hack的落成格局:

         (1)IE条件语句:只在IE9-有效

                   <!–[if IE]>
小于IE10的浏览器会看到此句<![endif]–>

                   <!–[if IE 6]>
IE6看到此句<![endif]–>

                   <!–[if lt IE 8]> 小于IE8的浏览器会看到此句
<![endif]–>

                   <!–[if lte IE 8]>
小于等于IE8的浏览器会看到此句 <![endif]–>

                   上述标准语句中可以停舍弃何CSS/HTML/JS语句。

         (2)采纳器前缀

                   <style>

                            .content{ }       
所有浏览器都能清楚的采取器

                            *html  .content{}                     
只有IE6能知晓的采取器

                            *+html     .content{}                  
唯有IE7能知道的选用器

                   </style>

         (3)属性前缀

                   <style>

                            .content{

                                     -webkit-animation: anim1  3s;      

                                     -moz-animation: anim1  3s;

                                     -o-animation: anim1  3s;

                                     background: red;              
/*装有浏览器都能辨识*/

                                     *background:green;        
/*IE6/IE7能识别*/

                                     _background:blue;           
/*IE6/IE7能识别*/

                                     +background:yellow;       
/*IE能识别*/

                                     background: yellow\9\0;
/*IE9+能识别*/

                                     background: pink !important; 
/*IE6无法识别*/

}

                   </style>

css 优化

页面访问速度优化

         (0)硬件/互连网优化

         (1)数据库优化

         (2)服务器优化

         (3)前端优化: HTML优化、CSS优化、JS优化

  CSS优化方案:

         优化原则:尽或然裁减HTTP请求数量;尽只怕裁减每回请求的数额大小

         优化措施:

         (1)CSS
Pepsi-Colas:背景图滑动门、把许多的小背景图拼接为一副大图——百度“CSS
Pepsi-Colas在线”可以找到很多这么的工具

         (2)把CSS放到页面顶部,多用<link href=”x.css”/>代替@import
url(x.css)

         (3)避免使用CSS表明式

         (4)防止空的src和href值

         (5)巧用浏览器缓存,把CSS放在尽大概少的HTML外部文件

         (6)首页中尽量不要外部CSS

         (7)不要在HTML中缩放图像

        
(8)对JavaScript文件和CSS文件举办削减(剔除空白/换行/注释等),减小文件大小。可接纳类似YUI
Compressor等工具    Yahoo UI Libary

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website