yibawuqing 2019-06-27
作者:心叶
时间:2018-04-18 17:53
是不是包裹元素overflow设置为hidden以后,内部元素如果超过包裹元素的话就会被剪裁?答案是不一定,这要看此刻的CSS环境。
根据对CSS2.1规范的理解,可以这样表述:如果一个元素的包含块的overflow属性设置为hidden,那么超过这个包含块部分的内容就会被剪裁。
因此我们需要学会寻找一个元素的包含块,不过在这之前,让我们先简单的知道如果一个元素的overflow属性设置为hidden,被其包裹的内容如果溢出需要同时满足的条件:
根据CSS2.1规范里面的说明,简单的说就是:用来确定一个元素的盒子的位置和尺寸的矩形就叫这个元素的包含块。
因此包含块是一个非常有意义而且涉及属性很多的概念,至于如何确定一个元素的盒子的包含块是谁,遵循下面几条规则:
其包含块又叫初始包含块,可以先认为就是可视区域(其实不准确,姑且这样说比较简单)。
它的包含块是由最近的祖先块容器盒的内容区域创建的。
它的包含块由最近的position不为static的祖先元素创建(如果没有找到这样的祖先元素,这个绝对定位的元素的包含块为初始包含块);具体创建方法如下:
一个有趣的现象是:一个没有设置高度的父元素包裹一个子元素,父元素应该会被子元素撑起来,也就是有高了,不过如果你给子元素设置了浮动,显然原来父元素撑起来的高就塌了,到这里好像都很正常;接着,你给父元素加了一个overflow:hidden,发现父元素的高又有了,好像浮动被清除了一样,为什么会这样?
其实归根结底,这里的浮动没有清除,只是因为overflow属性的值是hidden的时候会形成一个BFC,而BFC就是一个隔离的渲染区域,因此浮动造成的高崩塌会导致对外部布局的影响,为了消除这种不益的表现,计算高度的时候浮动元素也计算进去了。
如果说到这里就停止,你可能会非常好奇,除了这里的情况还有什么情况会产生BFC,而BFC环境下具体会有哪些规则?接着下段来讲。
BFC是一个非常有用的环境,如果用一句话来说明它是什么样的存在:一个隔离的渲染区域,容器里面的子元素不会在布局上影响到外面的元素,反之也是如此。
只需要保证满足下面至少一条就会触发BFC:
可以看出来,就是一个比较独立的块,因为是一个独立的环境,在开发时候适度使用会有效降低开发和维护难度。
大致可以归纳为三个方面:独立性、垂直分布规则和水平分布规则。
上面只是大体上说明一下BFC,具体使用的时候还有很多没有说明的,比如上面垂直方向上的重叠如何控制发生与否?如果重叠那么是如何计算的?不过本篇文章到这里就结束了。