请解释一下为什么需要清除浮动?清除浮动的方式,原理(十四)

请解释一下为什么需要清除浮动?清除浮动的方式

清除浮动是为了清除使用浮动元素产生的影响。浮动的元素,高度会塌陷,而高度的塌陷使我们页面后面的布局不能正常显示。

1、父级div定义height;
2、父级div 也一起浮动;
3、常规的使用一个class;

			.clearfix::before, .clearfix::after {
			    content: " ";
			    display: table;
			}
			.clearfix::after {
			    clear: both;
			}
			.clearfix {
			    *zoom: 1;
			}

4、SASS编译的时候,浮动元素的父级div定义伪类:after

			&::after,&::before{
			    content: " ";
		        visibility: hidden;
		        display: block;
		        height: 0;
		        clear: both;
			}

解析原理:

  1. display:block 使生成的元素以块级元素显示,占满剩余空间;
  2. height:0 避免生成内容破坏原有布局的高度。
  3. visibility:hidden 使生成的内容不可见,并允许可能被生成内容盖住的内容可以进行点击和交互;
  4. 通过 content:".“生成内容作为最后一个元素,至于content里面是点还是其他都是可以的,例如oocss里面就有经典的 content:”.",有些版本可能content 里面内容为空,一丝冰凉是不推荐这样做的,firefox直到7.0 content:”" 仍然会产生额外的空隙;
  5. zoom:1 触发IE hasLayout。

通过分析发现,除了clear:both用来闭合浮动的,其他代码无非都是为了隐藏掉content生成的内容,这也就是其他版本的闭合浮动为什么会有font-size:0,line-height:0。

zoom:1的清除浮动原理?

  • 清除浮动,触发hasLayout;
  • Zoom属性是IE浏览器的专有属性,它可以设置或检索对象的缩放比例。解决ie下比较奇葩的bug。
  • 譬如外边距(margin)的重叠,浮动清除,触发ie的haslayout属性等。

来龙去脉大概如下:

当设置了zoom的值之后,所设置的元素就会就会扩大或者缩小,高度宽度就会重新计算了,这里一旦改变zoom值时其实也会发生重新渲染,运用这个原理,也就解决了ie下子元素浮动时候父元素不随着自动扩大的问题。

Zoom属性是IE浏览器的专有属性,火狐和老版本的webkit核心的浏览器都不支持这个属性。然而,zoom现在已经被逐步标准化,出现在 CSS 3.0 规范草案中。目前非ie由于不支持这个属性,它们又是通过什么属性来实现元素的缩放呢?可以通过css3里面的动画属性scale进行缩放。

什么是外边距合并?

外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。
w3school介绍网址: http://www.w3school.com.cn/css/css_margin_collapsing.asp

你可能感兴趣的:(面试直通车)