深入理解relative

该文章总结自张鑫旭慕课,以及自己的使用经验和建议。

relative的具体作用

  • relative限制absolute

    • 限制偏移(绝对定位根据相对定位元素进行偏移)
    • overflow: hidden截断隐藏超出部分(如果没有relativeoverfloww:hidden对于绝对定位的元素失效)
    • relative会影响本身有z-index属性的绝对定位元素(如果a元素的z-index: 1;,b元素的z-index:3;,此时ab下面,假如a的父元素有[relative]的z-index: 3,而b父元素有[relative]的z-index:2,不管ab元素的z-index如何,a元素始终高于b元素。)
  • relative与定位

    • 相对自身定位
    • 无侵入,不影响文档流(跟margin比较一下)
    • topbottom失效,leftright失效
    • 设置relative元素的图片会盖过没有设置relative的图片(用margin-left: -xxpx试一下就知道了)
  • 新建层叠上下文与层级控制

    上面讲的relative影响层级情况就是新建层叠上下文的原因,又在上面的基础上衍生出这些情况。

    • 如果b元素的带有relative的父元素的Z-index设置为auto时,此时父元素的relative不再对子元素的z-index有限制作用,所以此时bz-index变成3(层叠上下文不存在),此时b便会超过a
    • 但是这种情况不限于ie6&ie7,因为ie6&ie7z-index: auto也会出现新建层叠上下文,此时也就是说a依旧是比b高的。(这是bug

应用

为了避免relative覆盖,有下面两个经验应用

  • 避免使用relative(绝对定位不依赖于relative,具体看绝对定位一节)

  • relative 最小化
    把img定位在左上角,一般的做法是

      <div style="position: relative;">
          <img style="position: absolute; top: 0;left: 0;">
          <div></div>
          <div></div>
          <div></div>
          <div></div>
      </div>
    

    这里会出现的问题就是很可能会因为父级的relative出现层级覆盖。

    现在可以这样子做:

    <div>
        <div style="position: relative;">
            <img style="position: absolute; top: 0;left: 0;">
        </div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
    </div>
    

    以上, 便是实现relative最小化,这里面的div进行相对定位以后并不会对布局造成任何影响。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,679评论 1 92
  • 第一节:z-index基础 较大的z-index会覆盖较小的那个z-index元素 z-index:auto 默认...
    胖鱼尾巴阅读 4,668评论 0 0
  • 1.z-index基础 z-index属性指定了元素及其子元素的[z顺序],而[z顺序]可以决定当元素发生覆盖的时...
    徐国军_plus阅读 11,495评论 1 6
  • 1.浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响? 浮动元素 浮动元素是设置float...
    Volcaner阅读 2,744评论 0 0
  • 我还是喜欢你,无论是以前无人问津不受关注的你还是现在红遍大江南北的你;我还是喜欢你,无论是拼命搞笑薛梗王的你还是认...
    如我伊九阅读 4,276评论 13 15