float
属性可以让元素显示在任意的问题,下面是 float
的几个常用值:
值 | 描述 |
---|---|
left | 左浮动 |
right | 右浮动 |
none | 无浮动 |
inherit | 继承浮动 |
float
属性最初被设计出来,是为了解决图片的排版问题,也就是让文字环绕着图片。
浮动的原因和副作用
CSS 的定位有 3 种机制:
- 标准流,也叫做普通流;
- 定位;
- 浮动;
浮动这种方式元素脱离了文档的标准流,但也会影响它周围的元素。浮动的元素不再占有原始的空间,转而占有其他的空间,这会导致父元素无法检测子元素的高度,从而出现父元素塌陷的问题,父元素的塌陷又导致依赖这个父元素布局的元素被浮动元素所遮挡,那么这样的问题如何解决呢?
解决浮动副作用
我们知道浮动带来的主要问题是父元素的塌陷,这个问题可以通过以下几种方案解决:
- 手动给父元素添加高度;
- 通过
clear
清除内部和外部浮动; - 给父元素添加
overflow
属性并结合zoom:1
使用; - 给父元素添加浮动。
手动给父元素添加高度
|
|
以上就是通过手动设定父元素高度来解决塌陷,但这种解决方法不是很好,首先我们要确定子元素高度,其次,如果子元素很多,宽度不够导致子元素换行,父元素的高度就又不够了。
clear 属性
clear
属性定义了元素的哪边上不允许出现浮动元素。在 CSS1 和 CSS2 中,这是通过自动为设置了 clear
属性的元素增加上外边距实现的。在 CSS2.1 中,会在元素上外边距之上增加清除空间,而外边距本身并不改变。不论哪一种改变,最终结果都一样,如果声明为左边或右边清除,会使元素的上外边框边界刚好在该边上浮动元素的下外边距边界之下。对于 CSS 的清除浮动 clear
,一定要牢记:这个规则只能影响使用清除的元素本身,不能影响其他元素。clear
属性有以下几个常用的值:
值 | 描述 |
---|---|
left | 在左侧不允许浮动元素。 |
right | 在右侧不允许浮动元素。 |
both | 在左右两侧均不允许浮动元素。 |
none | 默认值。允许浮动元素出现在两侧。 |
inherit | 规定应该从父元素继承 clear 属性的值。 |
|
|
overflow 和 zoom
overflow
属性规定当内容溢出元素框时发生的事情。这个属性定义溢出元素内容区的内容会如何处理。如果值为 scroll,不论是否需要,用户代理都会提供一种滚动机制。因此,有可能即使元素框中可以放下所有内容也会出现滚动条。这个属性有以下几个常用的值:
|
|
zoom
则是 IE 浏览器专用的一个属性。它可以根据子元素的总体高度来放大缩小父元素的高度。这种方法同样不是很完美,如果子元素宽度超过父元素,overflow
属性会导致子元素的部分内容不可见。
|
|
给父元素添加浮动
给父元素添加 float
属性后,父元素和子元素相当于在同一个流里,所以自然子元素会撑开父元素,因此父元素就不再塌陷,但是这会导致父元素的兄弟元素收到影响,那么如何解决呢?我们可以给父元素的兄弟元素添加 clear
属性:
|
|