css层叠规则

html-css024

css层叠规则,第1张

之前只是认为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 值只在父级层叠上下文中有意义。子级层叠上下文被自动视为父级层叠上下文的一个独立单元。

层叠上下文,英文称作”stacking context”. 是HTML中的一个三维的概念。如果一个元素含有层叠上下文,我们可以理解为这个元素在z轴上就“高人一等”。

z轴通常指用户眼睛到屏幕的一条直线。所有的元素都有层叠顺序。

首先,我们创建一个div框。

当我们试着去改变background: black,我们会发现由于背景颜色盖在边框之上,边框的颜色会有所改变。

我们试着给这个div中加个内联元素,会发现,内联元素比那个没有因为背景是黑色,而隐藏掉。

内联元素是在background之上的,所以不会被背景色覆盖掉。

接着,我们在div中再创建一个内联元素

我们会发现,子元素的背景色覆盖掉了父元素的背景色。然后,我们给子元素加个margin-top,子元素中的内联元素会将父元素中的文字覆盖掉。

我们继续添加一个浮动元素,同时稍微修改下子元素的样式,方便我们观察。

给float元素加一个margin,我们可以看到,蓝色的float元素,覆盖在div之上。

我们继续添加两个div元素

此时,我们可以看到,后出现的元素会覆盖在先出现的元素之上,但是,浮动元素仍然在顶端。

我们给两个元素都加上position。

这时,两个div都在float元素的上层。后出现的橙色元素暂时在最上面。

我们接着给.relative1加上一个z-index

此时.relative1就在最上层。但是我们给.child加上z-index并没有效果,因为要给定位元素加上z-index(不为auto)才能触发堆叠上下文。

总结下来就是下图所示(原谅我盗图):

.wrap li:last-child{ border-right:none} 吧最后一个li的border-right的border去掉。。。但是兼容不好,ie好像是ie9以上的浏览器才行~~

不行还有一种方法li给border,通过margin-left:-1px合并border,具体如下

body,ul{

margin:0

padding:0}

li{

list-style:none}

.wrap{

width:385px

height:39px

overflow:hidden

border-left:1px

solid

#0000f0

margin:30px

auto}

.wrap

li{

width:76px

height:37px

line-height:37px

text-align:center

border:1px

solid

#0000f0

float:left

margin-left:

-1px

}

妙味

妙味

妙味

妙味

妙味

演示: