之前只是认为z-index只是简单的值越大就越靠近观察者,越在上层。直到今天因为面试才发现不是这么简单的。在css世界中z-index属性只有和定位元素(position不为static的元素)在一起的时候才起作用,可以是整数或者负数。理论上,数值越大层级越高,但实际上其规则要复杂的多。但随着css3的到来,flex盒子的子元素也可以设置z-index属性。
要知道网页中绝大部分并不是定位元素,并且影响层叠顺序的不止z-index一个,z-index只是css层叠规则中的一叶扁舟。
所谓的层叠规则是指的当前网页中的元素发生层叠时的表现规则。
层叠上下文(stacking context):是HTML中一个三维的概念。在CSS2.1规范中,每个盒模型的位置是三维的,分别是平面画布上的X轴,Y轴以及表示层叠的Z轴。一般情况下,元素在页面上沿X轴Y轴平铺,我们察觉不到它们在Z轴上的层叠关系。而一旦元素发生堆叠,这时就能发现某个元素可能覆盖了另一个元素或者被另一个元素覆盖。
如果一个元素含有层叠上下文,(也就是说它是层叠上下文元素),我们可以理解为这个元素在Z轴上就“高人一等”,最终表现就是它离屏幕观察者更近。
层叠水平(stackinge-level):决定了同一个层叠上下文中元素在z轴上的显示顺序。所有的元素多有层叠水平,包括普通元素,包括层叠上下文环境。
层叠顺序(stacking order):表示元素发生层叠时有着特定的垂直显示顺序,层叠规则。
默认的堆叠规则,即不含有 z-index 属性时:
对于浮动的块元素来说,层叠顺序变得有些不同。浮动块元素被放置于非定位元素与定位元素之间:
z-index属性的值只能是整数(正负均可)
在下一个例子中, 所有的层都是用z-index进行排序的。 元素div#5 的z-index无效, 因为他没有被指定position属性
在之前的[增加 z-index] 的例子中, 某些 DIV 的渲染顺序是由 z-index 的值影响的。这是因为这些 DIV 具有 使他们形成一个 层叠上下文 的特殊属性 。
在层叠上下文中,其子元素同样也按照上面解释的规则进行层叠。 特别值得一提的是,其子元素的 z-index 值只在父级层叠上下文中有意义。子级层叠上下文被自动视为父级层叠上下文的一个独立单元。
所谓的样式表层叠:指的是同一个元素通过不同方式设置样式表产生的样式重叠。
电脑培训http://www.kmbdqn.cn/认为样式表继承:指的是某一个被嵌套的元素得到它父元素样式。
还有一种样式叫浏览器样式,是这个元素在这个浏览器运行时默认附加的样式。
1.浏览器样式<b>这个元素隐含加粗样式</b><spanstyle="font-weight:bold">这个元素通过style加粗</span>解释:<b>元素就是具有加粗的隐含样式,而<span>元素没有任何隐含样式,通过style属性设置样式。
2.样式表层叠样式表层叠通过五种方式进行,如果样式相同,那么比如会产生冲突替换。
这时,它的优先级顺序就显的比较重要。
以下优先级从低到高:(1).浏览器样式(元素自身携带的样式);(2).外部引入样式(使用<link>引入的样式);(3).文档内嵌样式(使用<style>元素设置);(4).元素内嵌样式(使用style属性设置)。
3.样式继承如果某一个元素并没有设置父元素相关的样式,那么就会使用继承机制将父元素的样式集成下来。
//<b>元素继承了<p>元素的样式<pstyle="color:red">这是<b>HTML5</b></p>样式继承只适用于元素的外观(文字、颜色、字体等),而元素在页面上的布局样式则不会被继承。
如果继承这种样式,就必须使用强制继承:inherit。