CSS浮动

传统网页布局方式

网页布局的本质——用 CSS 来摆放盒子,把盒子放到相应位置

  • 普通流
  • 浮动
  • 定位

标准流(普通流/文档流)

标准流,就是标签按照规定好的默认方式排列。

  1. 块级元素会独占一行,从上到下顺序排列 常用元素:div、hr、p、h1-h6、ul、ol、dl、form、table
  2. 行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行。 常用元素:span、a、i、em

标准流是最基本的布局方式。

以上三种方式都是来摆放盒子的,盒子摆到合适位置,布局自然就完成了。

实际开发中,一个页面基本包含三种布局方式。

浮动

很多布局效果,标准流没办法完成,此时就可以利用浮动完成布局。浮动可以改变元素标签默认排列方式。如 让多个块级元素一行显示。

网页布局第一准则:多个块级元素 纵向 排列找 标准流,多个块级元素 横向 排列找 浮动

网页布局第二准则:先设置盒子大小,再设置盒子位置。

1
2
3
4
5
6
/*
none 元素不浮动
left 元素向左浮动
right 元素向右浮动
*/
选择器 { float: 属性值; }

特性

  1. 浮动元素会脱离标准流,移动到指定位置(脱标);浮动的盒子 不占位置,会漂浮在文档流的盒子上面(浮在空中,不占位置)

  2. 如果多个盒子都设置了浮动,则它们会按照属性值 一行显示 并且 顶端对齐排列。 浮动的元素是相互贴在一起的(盒子间没有间隙),若父级 宽度放不下盒子,多出的盒子会 另起一行对齐。

  3. 浮动的元素会 具有行内块元素的特性任何元素都可以浮动,增加浮动后具有行内块元素相似特性。如果块级盒子没有设置宽度,默认宽度和父级一样宽,但是添加浮动后,它的大小根据内容来决定

浮动元素经常和标准流父级元素搭配使用:先用标准流父元素上下排列位置,之后内部子元素采取浮动排列左右位置,符合网页布局第一准则。(大盒子束约小盒子)

未完待续…

清除浮动

为什么要清楚浮动:由于父级盒子很多情况下,不方便给高度,当时盒子浮动又不占有位置,最后父级盒子高度为 0 时,就会影响下面的盒子,对后面元素排版产生影响。

清除浮动的本质

  • 清除浮动的本质是清除浮动元素脱离标准流造成的影响
  • 如果父盒子本身具有高度,则不需要清除浮动
  • 清除浮动之后,父级会根据浮动的子盒子自动检测高度,父级有了高度,就不会影响下面的标准流了。
1
2
3
4
5
6
7
8
9
/*
属性值
left 不允许左侧有浮动元素
right 不允许右侧有浮动元素
both 同时清除左右两侧浮动
*/
选择器: {
clear: 属性值;
}

清除浮动的方法

  1. 额外标签法(隔墙法),是 W3C 推荐的方法
  2. 父级添加 overflow 属性
  3. 父级添加 after 伪元素
  4. 父级添加双伪元素
额外标签法

额外标签法是在最后一个 浮动元素末尾 添加一个 空块级元素,给其赋以属性 clear:both;

父级添加 overflow

父级 添加 overflow 属性,将其属性设置为 hiddenautoscroll

父级添加 after
1
2
3
4
5
6
7
8
9
10
11
.clearfix:after {
content: "";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.clearfix {
/*IE6、7专有*/
*zoom: 1;
}
父级添加双伪元素
1
2
3
4
5
6
7
8
9
10
11
.clearfix::before,
.clearfix::after {
content: "";
display: table;
}
.clearfix::after {
clear: both;
}
.clearfix {
*zoom: 1;
}

清除浮动的方法总结

清除浮动的方式 优点 缺点
额外标签法(隔墙法) 通俗易懂,书写方便 添加许多无意义的标签,结构化较差
父级 verflow:hidden 书写简单 溢出隐藏
父级 after 伪元素 结构语义化正确 由于IE6-7不支持:after,兼容性问题
父级双伪元素 结构语义化正确 由于IE6-7不支持:after,兼容性问题

定位