css的relative、absolute和float

前言总结

  1. 绝对定位的元素脱离了文档流,而浮动元素依旧在文档流中
  2. 浮动就是个带有方位的display:inline-block属性,absolute也是个inline-block化属性。

z-index

position:relative、position:absolute和position:fixed参与的情况下才有作用,表示层级

relative的特性

没有脱离正常的文档流,被设置元素相对于其原始位置而进行定位,其原始占位信息仍存在。
它可以提升元素的z-index层级,如下面的两列布局。如果左边不设置position:relative,会造成左边区域不可点击。

  <div class="g-bd1 f-cb">
    <div class="g-sd1">
        <p>左侧定宽</p>
    </div>
    <div class="g-mn1">
        <div class="g-mn1c">
            <p>右侧自适应</p>
        </div>
    </div>
</div>

/* 两列右侧自适应布局 */
.g-bd1{margin:0 0 10px;}
.g-sd1{position:relative;float:left;width:190px;margin-right:-190px;}
.g-mn1{float:right;width:100%;}
.g-mn1c{margin-left:200px;}

absolute的特性

包裹性

简单点就是元素inline-block化,如一个div默认宽度为100%,一旦被设置absolute属性,那么100%默认宽度会变成内部自适应的宽度:

  // html
  <div class="div">
    ![](http://upload-images.jianshu.io/upload_images/1975863-f1c832ca67a391af.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  </div>
  
  <div class="div absdiv">
    ![](http://upload-images.jianshu.io/upload_images/1975863-f1c832ca67a391af.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  </div>

// css
.div{
  background-color: #0f9345;
  padding: 20px;
  margin: 10px 0;
}
.absdiv{
  position: absolute;
}

得到的结果图:

normal和absolute

float也是典型的inline-block化,正常情况下我们要给行内元素设置宽高需要设置display:block属性,但是设置float或者absolute属性后,display:block就可以省了:

  // html
  <span class="normal">normal</span>
  <span class="fl">float left</span>
  <span class="abs">position absolute</span>

  //css
  .normal{
  display: block;
  width: 100px;
  height: 100px;
  background-color: red
}
.fl{
  float: left;
  width: 100px;
  height: 100px;
  background-color: yellow
}
.abs{
  position:absolute;
  width: 100px;
  height: 100px;
  background-color: green
}
Paste_Image.png

破坏性

浮动的破坏性在于切断line box链,致使高度塌陷,但其占据的实体位置还是在的。而absolute绝对定位不占据文档流的实体位置,因此会造成高度和宽度的塌陷。

  // html
  <div class="divdes">
    ![](http://upload-images.jianshu.io/upload_images/1975863-f1c832ca67a391af.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  </div>
  
  <div class="divdes">
    ![](http://upload-images.jianshu.io/upload_images/1975863-f1c832ca67a391af.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  </div>

// css
.divdes{
  padding: 20px;
  margin: 10px;
  float:left;
  background-color: #0f9345;
}
.abs{
  position: absolute;
}
Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,683评论 1 92
  • 一 外部式css样式 (也可称为外联式)就是把css代码写一个单独的外部文件中,这个css样式文件以“.css...
    KunMitnic阅读 4,572评论 0 1
  • display:设置元素的显示方式 display:block(块级元素) 默认为父元素宽高,可设置宽高相对前序换...
    bluishwhiteC阅读 3,848评论 0 0
  • 以下文章是我在网上收集的内容,为了记录自己的学习以及为了以后不到处找而记录下来,如果对你有用,请感谢写这些文章的前...
    DCbryant阅读 4,472评论 0 2
  • 1,实现梦想,个人独白 2,高薪 3,生活和工作协同 4,被同事认可, 5,被领导认可, 6,工作有成就感 7,事...
    yingying1014阅读 2,880评论 0 48