CSS 中常见的传统布局方式,包括普通流(标准流)、定位和浮动。这三种方式是网页布局中常用的基本手段,可以实现不同的排列和定位效果。
所谓普通流,也称为标准流或文档流,是指在没有进行特殊定位或浮动的情况下,元素按照其在 HTML 文档中的顺序从上到下依次排列的布局方式。
在普通流中,块级元素会垂直排列,各元素占据自己的一行,内联元素则水平排列在各自所在的行内。这种布局方式是 HTML 元素默认的排列方式,也是最常见的网页布局方式之一。
所谓定位,就是咱们之前文所说的CSS基础:position定位的5个类型详解!,指的是使用 CSS 中的定位属性(如 position: relative;、position: absolute;、position: fixed; 等)对元素进行定位,从而脱离文档流的布局方式。在定位流中,元素的位置不再受到普通流中其他元素的影响,可以根据指定的定位属性相对于父元素或视口进行定位。
而今天聊就是浮动了。浮动的主要作用是实现页面布局的多列设计,例如实现2~多栏布局。通过浮动,可以将多个元素水平排列。比如,淘宝的这个 3 栏布局,多行多栏的产品布局,都可以通过浮动实现。
浮动元素的特点和表现方式包括:
了解并实践了浮动以后,基本就可以完成大多数非动态元素过多的网站了,比如,网易云音乐,淘宝,腾讯新闻,公众号等。
好,我们开始吧。
CSS 中的 float 属性有三个属性值,分别是:
代码如下:
- * {
- margin: 0;
- padding: 0;
- }
- .item {
- height: 200px;
- float: left;
- margin-right: 10px;
- line-height: 200px;
- text-align: center;
- color: #fff;
- }
- .item1 {
- width: 100px;
-
- background-color: #f00;
- }
- .item2 {
- background-color: #0f0;
- width: 400px;
- }
- .item3 {
- width: 200px;
- background-color: #00f;
- }
-
- <div class="parent-box">
- <div class="item item1">块1</div>
- <div class="item item2">块2</div>
- <div class="item item3">块3</div>
- </div>
-
效果如下:
代码如下,我们让前 2 个左浮动,最后一个右浮动:
- * {
- margin: 0;
- padding: 0;
- }
- .item {
- width: 200px;
- height: 200px;
- margin-right: 20px;
- line-height: 200px;
- text-align: center;
- color: #fff;
- }
- .item1 {
- background-color: #f00;
- float: left;
- }
- .item2 {
- width: 800px;
- background-color: #0f0;
- float: left;
- }
- .item3 {
- float: right;
- background-color: #00f;
- }
-
html 部分和上个案例一样。
效果如下:
代码就不举例了,默认不设置就是 none。
浮动带来的问题:
我们看一下第一个浮动的案例,当我们用 F12 开发者工具检查元素的时候,发现父级 parent-box 的高度,貌似并没有被子元素的 200 像素的高度,撑起来,是吧。而是这样,高度是 0,如图。
这是因为,浮动元素脱离了文档流,可能导致父容器塌陷或者与其他元素重叠,影响页面布局的正常显示。怎么塌陷和重叠了呢?
比如,我们想在案例 1 下面,再写一行,希望它另起一行,代码如下:
- <div class="parent-box">
- <div class="item item1">块1</div>
- <div class="item item2">块2</div>
- <div class="item item3">块3</div>
- </div>
- <div>
- <h1>我是新行的内容</h1>
- <div class="parent-box">
- <div class="item item1">块1</div>
- <div class="item item2">块2</div>
- <div class="item item3">块3</div>
- </div>
- </div>
-
结果,发现,它跑到第一行右侧去了,这就是第一个父元素 parent-box 塌陷了,布局重叠了。
那怎么办呢,清除浮动,就派上用场了。
清除浮动是指清除浮动元素对父容器的影响,使得父容器能够包含浮动元素及其后续内容。
清除浮动的方法有多种,最通用的写法是最后 1 种,来一起看看。
- <div style="clear: both;"></div>
-
这种方法简单直接,但需要在 HTML 中添加额外的元素,不够简约,而且容易忘,对吧。- .clearfix {
- overflow: hidden;
- }
-
- <div class="clearfix">
- <!-- 浮动元素 -->
- <div style="float: left;"></div>
- <div style="float: right;"></div>
- </div>
-
这种方法不需要添加额外的元素,但可能会影响其他布局,不够合理。- .clearfix::after {
- content: '';
- display: table;
- clear: both;
- }
-
- <div class="clearfix">
- <!-- 浮动元素 -->
- <div style="float: left;"></div>
- <div style="float: right;"></div>
- </div>
-
这种方法不需要额外的 HTML 元素,也不会影响其他布局,只需要加上一个 class名 就行了,是一种最最最常用的清除浮动的方法。需要注意的是:这个 clearfix 呢,也是作为以后的 CSS 基础学习/项目中 重置里面的一个重要内容。项目里都带上就可以了。
下文,我们根据一些热门网站,我们来写几个浮动实例。