跳至主要內容

float

Weipeng Qiao大约 3 分钟

来源:MDN-floatopen in new window

浮动的特性

  1. 浮动的元素会脱离标准流(脱标),不在保留原来的位置
  2. 浮动的元素具有行内块元素的特性,浮动的盒子之间没有缝隙,以顶部对齐
  3. 如果父级盒子装不下这些浮动的盒子,多出的盒子会另起一行对齐
属性值含义
none默认不浮动
left左浮动
right右浮动

元素脱离标准流(脱标)的特点

块元素

  1. 块元素不在独占一行
  2. 脱离文档流以后,块元素的宽度和高度默认都会被内容撑开

行内元素

  1. 行内元素脱离文档流以后会变成块元素,特点和块元素一样

    注意: 脱离文档流以后,不需要在区分块和行内了

浮动的注意事项

  1. 一个盒子里面有多个子盒子,如果其中一个子盒子浮动了,那么其他兄弟也应该浮动,以防引起问题
  2. 浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流
  3. 多个块级元素纵向排列找标准流。多个块级元素横向排列找浮动
  4. 如果要实现文字环绕效果,可以使用浮动(也是浮动最初产生的目的),定位则不可以

为什么要清除浮动?

由于父级盒子很多情况下,不方便给高度,但是子盒子浮动又不占有位置,最后父级盒子的高度为 0 时,就会影响父级盒子之后的盒子。

  1. 清除浮动的本质是清除浮动元素脱离标准流造成的影响
  2. 如果父盒子本身有高度,则不需要清除浮动
  3. 清除浮动后,父级盒子会根据浮动的子盒子自动检测高度。父级盒子有了高度,就不会影响下面的标准流了

clear标签

属性值说明
left清除左侧浮动的影响
right清除右侧浮动的影响
both左右两边同时清除

清除浮动的方法有哪些?

  1. 父级添加 after 伪元素
.clearfix:after {
  content: "";
  display: block;
  height: 0;
  clear: both;
  visibility: hidden;
}
.clearfix {
  /* IE6、7 专有 */
  zoom: 1;
}
  1. 父级添加双伪元素
.clearfix:before,
.clearfix:after {
  content: "";
  display: table;
}
.clearfix:after {
  clear: both;
}
.clearfix {
  *zoom: 1;
}
  1. 父级添加 overflow 属性
    可以给父级添加 overflow 属性,并将其属性值设置为 hidden、 auto 或 scroll
  2. 额外标签法(w3c 推荐的方法)
    额外标签法也叫隔墙法, 就是在最后一个浮动的子元素后面添加一个额外标签(必须是块级元素), 添加清除浮动样式。例如<div style=" clear:both"></div>,或者添加其他标签也可以
方法代表网站优点缺点
父级添加双伪元素小米、腾讯代码简洁照顾低版本浏览器
父级添加 after 伪元素百度、淘宝、网易没有增加标签、结构更简单照顾低版本浏览器
父级添加 overflow 属性无代码简洁无法显示溢出部分
额外标签法(w3c 推荐的方法)无通俗易懂、书写方便添加许多无意义的标签,结构化较差
上次编辑于:
贡献者: qiaoweipeng