6.1.2 float 的作用机制
“高度塌陷”只是让跟随的内容可以和浮动元素在一个水平线上,但这只是实现“环绕效果”的条件之一,要想实现真正的“环绕效果”,就需要另外一个平时大家不太在意的特性,那就是“行框盒子和浮动元素的不可重叠性”,也就是“行框盒子如果和浮动元素的垂直高度有重叠,则行框盒子在正常定位状态下只会跟随浮动元素,而不会发生重叠”
“文字环绕效果”是由两个特性(即“父级高度塌陷”和“行框盒子区域限制”)共同作用的结果,定高只能解决“父级高度塌陷”带来的影响,但是对“行框盒子区域限制”却没有任何效果,结果导致的问题是浮动元素垂直区域一旦超出高度范围,或者下面元素 margin-top 负值上偏移,就很容易使后面的元素发生“环绕效果”
原因是:内联状态下的图片底部是有间隙的,使得后面所在的“行框盒子”和浮动元素在垂直位置有了重叠。于是,区域被限制
6.1.3 float 更深入的作用机制
浮动锚点是 float 元素所在的“流”中的一个点,这个点本身并不浮动,就表现而言更像一个没有 margin、border 和 padding 的空的内联元素。
浮动参考指的是浮动元素对齐参考的实体。
在 CSS 世界中,float 元素的“浮动参考”是“行框盒子”,也就是 float 元素在当前“行框盒子”内定位。注意:是“行框盒子”,不是外面的包含块盒子之类的东西
每一行内联元素都有一个“行框盒子”,这个例子中标题文字比较多,两行显示了,因此有上下两个“行框盒子”,而“更多”所在的<a>元素是在标题文字后面,位于第二行,因此,这里设置了 float:right 的<a>元素是相对于第二行的“行框盒子”对齐的“浮动锚点”:其作用就是产生“行框盒子”,因为“浮动锚点”表现如同一个空的内联元素,有内联元素自然就有“行框盒子”,于是,float 元素对齐的参考实体“行框盒子”对于块状元素也同样适用了,只不过这个“行框盒子”由于没有任何内容,所以无尺寸,看不见也摸不着罢了。
6.1.4 float 与流体布局
利用 float 破坏 CSS 正常流的特性,实现两栏或多栏的自适应布局。
6.2 float 的天然克星 clear6.2.1 什么是 clear 属性
clear 属性值的理解是下面这样的。
• none:默认值,左右浮动来就来。• left:左侧抗浮动。• right:右侧抗浮动。• both:两侧抗浮动。
clear 属性是让自身不能和前面的浮动元素相邻,注意这里“前面的”3 个字,也就是 clear 属性对“后面的”浮动元素是不闻不问的
6.2.2 成事不足败事有余的 clear
clear 属性只有块级元素才有效的,而::after 等伪元素默认都是内联水平,这就是借助伪元素清除浮动影响时需要设置 display 属性值的原因。由于 clear:both 的作用本质是让自己不和 float 元素在一行显示,并不是真正意义上的清除浮动,因此 float 元素一些不好的特性依然存在,于是,会有类似下面的现象。
(1)如果 clear:both 元素前面的元素就是 float 元素,则 margin-top 负值即使设成-9999px,也不见任何效果。(2)clear:both 后面的元素依旧可能会发生文字环绕的现象。
“高度塌陷”只是让跟随的内容可以和浮动元素在一个水平线上,但这只是实现“环绕效果”的条件之一,要想实现真正的“环绕效果”,就需要另外一个平时大家不太在意的特性,那就是“行框盒子和浮动元素的不可重叠性”,也就是“行框盒子如果和浮动元素的垂直高度有重叠,则行框盒子在正常定位状态下只会跟随浮动元素,而不会发生重叠”
“文字环绕效果”是由两个特性(即“父级高度塌陷”和“行框盒子区域限制”)共同作用的结果,定高只能解决“父级高度塌陷”带来的影响,但是对“行框盒子区域限制”却没有任何效果,结果导致的问题是浮动元素垂直区域一旦超出高度范围,或者下面元素 margin-top 负值上偏移,就很容易使后面的元素发生“环绕效果”
原因是:内联状态下的图片底部是有间隙的,使得后面所在的“行框盒子”和浮动元素在垂直位置有了重叠。于是,区域被限制
6.1.3 float 更深入的作用机制
浮动锚点是 float 元素所在的“流”中的一个点,这个点本身并不浮动,就表现而言更像一个没有 margin、border 和 padding 的空的内联元素。
浮动参考指的是浮动元素对齐参考的实体。
在 CSS 世界中,float 元素的“浮动参考”是“行框盒子”,也就是 float 元素在当前“行框盒子”内定位。注意:是“行框盒子”,不是外面的包含块盒子之类的东西
每一行内联元素都有一个“行框盒子”,这个例子中标题文字比较多,两行显示了,因此有上下两个“行框盒子”,而“更多”所在的<a>元素是在标题文字后面,位于第二行,因此,这里设置了 float:right 的<a>元素是相对于第二行的“行框盒子”对齐的“浮动锚点”:其作用就是产生“行框盒子”,因为“浮动锚点”表现如同一个空的内联元素,有内联元素自然就有“行框盒子”,于是,float 元素对齐的参考实体“行框盒子”对于块状元素也同样适用了,只不过这个“行框盒子”由于没有任何内容,所以无尺寸,看不见也摸不着罢了。
6.1.4 float 与流体布局
利用 float 破坏 CSS 正常流的特性,实现两栏或多栏的自适应布局。
6.2 float 的天然克星 clear6.2.1 什么是 clear 属性
clear 属性值的理解是下面这样的。
• none:默认值,左右浮动来就来。• left:左侧抗浮动。• right:右侧抗浮动。• both:两侧抗浮动。
clear 属性是让自身不能和前面的浮动元素相邻,注意这里“前面的”3 个字,也就是 clear 属性对“后面的”浮动元素是不闻不问的
6.2.2 成事不足败事有余的 clear
clear 属性只有块级元素才有效的,而::after 等伪元素默认都是内联水平,这就是借助伪元素清除浮动影响时需要设置 display 属性值的原因。由于 clear:both 的作用本质是让自己不和 float 元素在一行显示,并不是真正意义上的清除浮动,因此 float 元素一些不好的特性依然存在,于是,会有类似下面的现象。
(1)如果 clear:both 元素前面的元素就是 float 元素,则 margin-top 负值即使设成-9999px,也不见任何效果。(2)clear:both 后面的元素依旧可能会发生文字环绕的现象。