CSS float 与 清浮动
一、浮动(float)
浮动(float)的定义:
使元素脱离文档流,按照指定方向发生移动,遇到父级边界或者相邻的浮动元素停了下来。
*文档流:文档中可显示对象在排列时所占用的位置。
float 的值:
left | right | none | inherit
float 的特征:
- 块在一排显示;
- 内联支持宽高;
- 默认内容撑开宽度;
- 脱离文档流;
- 提升层级半层;
二、清除浮动的方法
clear可清除浮动
clear: left | right | both | none | inherit ; 元素的某个方向上不能有浮动元素
clear: both; 在左右两侧均不允许有浮动元素。
1. 加高度
问题:扩展性不好。如果高度不一定就不适用了。
2. 父级浮动
问题:页面中所有父级元素都加要浮动,margin左右 auto 失效(floats bad !)
3. inline-block 清浮动方法
问题:magin左右 auto 失效
4. 父级末尾加空标签(样式 clear: both)
原理:clear: both元素移动到浮动元素的下面,因为该元素本身没有浮动, 所以容器就会扩展,直到包含它
问题:IE6 最小高度 19px;(解决后IE6下还有2px偏差)
5. <br clear="all" /> 标签
| br 的clear属性,已弃用。请不要在新的网站中使用
<body> <div class="container"> <div class="float">box1</div> <div class="float">box2</div> <div class="float">box3</div> <br clear="all" /> </div> </body>
问题:所有有浮动元素的旁边都要加(这个问题好像不存在???)
6. overflow: hidden 清浮动方法
问题1:需要配合 宽度 或者 zoom 兼容 IE6 IE7;
问题2:浏览器右下角的,返回顶部之类的组件,也可能被hidden;
7. :after 伪元素清浮动( 现在的主流方法、推荐!!!)
::伪元素 :伪类
伪元素以双冒号(::)开头,大部分浏览器为了向后兼容以支持单冒号形式。所以如果需要兼容老代码,可以用单冒号。
为浮动元素的父级加 .clearfix 类。
/* after伪元素:元素内部末尾添加内容 */ /* ::after {content: "添加的内容"; } IE6、7下不兼容 */ .clearfix::after { display: block; content: ''; /* 旧版的 Opera 浏览器中有个隐藏的 bug,需要添加一 个空格字符才能解决 */ clear: both; } /* zoom 缩放: a、触发IE下 haslayout,使元素根据自身内容计算宽高。 b、FF不支持。 */ .clearfix { zoom:1; }
问题:不一致性。浮动元素的外边距不会与父级重叠,但非浮动元素会正常重叠。
解决:在意不一致性,可以使用这个版本。这个版本无论浮动还是非浮动元素,均不会与父级的外边距重叠。
.clearfix::before, .clearfix::after { display: table; /* 防止伪元素的外边距折叠 */ content: " "; } .clearfix::after { clear: both; /* 只有::after伪元素需要清浮动 */ }