
盒子模型位置摆放三大机制 :
普通流 相当于 Android 中的 线性布局 ; 浮动 相当于 Android 中的 帧布局 或 相对布局 或 约束布局 ; 定位 相当于 Android 中的 绝对布局 ;
为 元素 设置了 浮动 CSS 属性 , 可以实现 :
CSS 浮动语法 :
选择器 {
float: 浮动属性值;
}浮动属性值 取值 :
默认的 标准流 布局排列如下 ,
浮动特性 ( 脱离标准流布局 ) : 浮动的元素 会 脱离 标准流布局 , 剩余的标准流布局正常显示 , 脱离的浮动元素在标准流上方显示 ;
浮动特性 ( 取消占用位置 ) : 脱离标准流 的 浮动元素 原来在标准流布局中的位置 , 也被取消 , 被后面的标准流元素占据 ;
网页中的 Display 显示模式有 3 种 ;
元素 的 浮动特性 会改变 该元素的 Display 显示模式 , 原来的 元素 不管是 块级元素 还是 行内元素 , 设置 浮动 样式后 , 其显示模式 类似于 行内块元素 ;
在 父容器 盒子模型 中 , 将 子元素 设置为 浮动元素 , 会出现如下情况 :

在开发页面时 , 遇到下面的情况 ,
父容器 没有设置 内容高度 样式 , 容器中的 子元素 设置了 浮动样式 , 脱离了标准流 , 高度会默认设置为 0 像素 , 这样就会导致各种显示混乱情况 ;
为了应对上述情况 , 可以 使用 " 清除浮动 " 操作 ;
清除浮动 主要作用 : 解决 父容器盒子模型 因为 子元素 被设置为 浮动元素 导致 高度默认为 0 像素 的问题 ;
清除浮动 效果 : 父容器 检测高度时 , 会考虑 浮动子元素 的高度 , 将浮动元素的高度 计算在父容器的总高度中 ;
清除浮动语法 :
CSS 选择器 {
clear: 属性值;
}属性值取值 :
一般在使用的时候 , 只使用 clear: both; 一种样式 ;
推荐使用 " 额外标签法 " , 在最后一个浮动元素的末尾 , 添加一个额外标签 , 如下 :
<div class="clear"></div>使用 其它标签 也可以 , 如 :
<br class="clear"/>父级元素设置 overflow 样式 语法 :
选择器 {
/* 清除浮动 - 父级元素设置 overflow 样式 */
overflow: hidden;
}overflow 样式可设置的属性值 :
父级元素设置 overflow 样式 清除浮动 的优缺点 :
额外标签法 清除浮动 , 会 新增很多无意义标签 , 使得 HTML 标签结构混乱 ;
父级元素设置 overflow 属性 , 会 将溢出元素隐藏 , 或 生成滚动条 , 导致显示结果不理想 ;
这里提出第三种 清除浮动的方法 , 使用 after 伪元素清除浮动 ;
在 CSS 样式最上面 , 声明 清除浮动元素样式 ,
将选择器设置为 .clearfix:after , 其中的 :after 是伪元素 ,
/* 清除浮动元素样式 */
.clearfix:after {
content: "";
display: block;
height: 0;
visibility: hidden;
clear: both;
}这种方式只有在 高版本浏览器才支持 , 低版本浏览器不支持该设置 , 为了兼容低版本浏览器 , 需要使用下面的样式 :
/* 低版本浏览器 IE6 / IE7 清除浮动样式 */
.clearfix {
*zoom: 1;
}如果需要 清除某个父容器中子元素的浮动样式 , 在该父容器的 class 类型上 , 添加 clearfix 类型即可 , 如 :
<div class="father1 clearfix">
<div class="son1"></div>
<div class="son2"></div>
</div>使用上述方法 , 不会改变标签的结构 , 也不会出现隐藏移除元素的问题 ;
为 .clearfix:before 和 .clearfix:after 并集选择器 , 设置如下样式 :
/* 清除浮动 - 使用双伪元素清除浮动 */
.clearfix:before,
.clearfix:after {
content: "";
display: table;
}为 .clearfix:after 伪类选择器设置如下样式 :
.clearfix:after 伪元素选择器 的含义是 在 该父容器盒子 的内部 , 插入新的子元素 , 该子元素设置选择器中的样式 ;
.clearfix:after {
clear: both;
}低版本浏览器 IE6 / IE7 清除浮动样式 :
.clearfix {
*zoom: 1;
}声明完上述元素后 , 在需要清除浮动元素的 父容器 中 , 声明 clearfix 类 ;
<div class="father1 clearfix">
<div class="son1"></div>
<div class="son2"></div>
</div>