用例子验证w3c的stack-level在不同浏览器中的显示

      z-index是我们非常熟悉的属性,用来确定定位元素在垂直于显示屏方向的层叠顺序
      需要明确的是仅仅作用于定位元素,relative和absulute有效。没有继承性。

      stack-level不同于z-index,在每一个stacking context中的每个box都有一个stack level,
      值大的显示在上,值小的显示在下,同一stack-level的遵循后来居上的原则.
     

w3c规定的stack-level规则
      1、定位元素:父级的背景、边界
      2、定位元素:z-index为负值的定位元素
      3、非定位元素(文本流中):block块级元素
      4、非定位元素(文本流中):float浮动元素
      5、****能产生stack-context的inline元素。
                 否则,将位于3之前。
      6、定位元素:z-index为0或者为auto的定位元素
      7、定位元素:z-index为正的定位元素

      在定位元素中又包含 absolute 和 relative 两种。两者在stack level上有差别吗

      直接上例子。通过例子可以发现 absolute 和 relative 在stack-level上属于同一级别,谁在前面仅和文档流的先后顺序有关。

<!DOCTYPE HTML>
<html>
 <head>
  <title> 测试Stack-level </title>
  <meta charset="utf-8"/>
  <style>
        .p,p{    width:100px;    height:100px;}
  </style>
 </head>
 <body>
      <div id="container" style="background-color:#eee;">0.这是父级元素
            <p style="position:absolute;top:0px;left:0px;   background-color:red" >1.这是一个absolute的定位元素</p>
            <p style="position:relative;top:50px;left:50px; background-color:green;color:white">2.这是一个relative的定位元素</p>
            <span class="p" style="display:inline;background-color:black;color:white">8.这是一个inline的元素</span>
            <p style="margin-top:-50px;margin-left:20px;background-color:yellow">3.这是一个非定位的块级元素</p>
            <p style="float:left;background-color:pink;margin-top:-90px;margin-left:40px;">4.这是一个浮动的块级元素</p>
            <p style="position:absolute;top:90px;left:60px; background-color:purple;z-index:1;color:white">6.这是一个relative的定位元素</p>
            <p style="position:absolute;top:70px;left:100px; background-color:blue;color:white">5.这是一个relative的定位元素</p>            
      </div>
 </body>
</html>

在chrome中的显示如下图所示:

可见这里inline是在block和float之前的,通过这个例子可以发现chrome是完全遵循w3c对于stack-level定义的。

经测试发现ie8、 ie9、 ff、 chrome、 safari都是ok的。那么最后看一下万恶的ie6,哇,各种不正常。

有人说IE下(无论ie6.0或者ie7.0)“float元素”和“block元素”属同一stack level,而“inline元素”较其stack level低。

于是写个简单的例子验证一下

<!DOCTYPE HTML>
<html>
 <head>
  <title> 测试Stack-level </title>
  <meta charset="utf-8"/>
  <style>
        .p,p{    width:100px;    height:100px;}
  </style>
 </head>
 <body>
      <div id="container" style="background-color:#eee;">0.这是父级元素    
            <p style="float:left;background-color:pink;">4.这是一个浮动的块级元素</p>
            <p style="background-color:yellow;margin-left:-10px;">3.这是一个非定位的块级元素</p>
            
      </div>
 </body>
</html>

正常的显示应该是

而在ie7中,显示为:

发现在IE中浮动块级元素和非定义的块级元素是不会重叠的,始终出现在同一层。除非给元素加position。

由于ff版本都出到13.0.1,基本上是非常规范的。有很多地方解释ff2的异常,即 z-index为负的定位元素的stack level

比父级stacking context(此处是root stacking context)低,所以显示在root stacking context下方。故不能看见。

这里需要用opacity(1除外)去触发stack-context。

由于本人没装ff2,这种情况就不作验证啦

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值