首页 > 编程知识 正文

国外地面塌陷,地面塌陷人失踪

时间:2023-05-03 20:22:46 阅读:51806 作者:3130

我相信在各种前端学习教程和视频中都会看到这样的代码

. clearfix :3360 after { content : '; 显示: block; clear: both; }我也知道教程中说,将此属性附加到消除高度消沉的元素可以解决问题,但教程中并没有说明为什么这样写。 本文将了解高级情绪低落的原因和解决方法,并详细说明此代码的来源。

先行知识:

bfc https://developer.Mozilla.org/zh-cn/docs/web/guide/CSS/block _ formatting _ context

BFC定义了对MDN的解释

块格式上下文(BFC )是网页的视觉CSS呈现的一部分,是发生块框布局处理的区域,也是浮动要素与其他要素交互的区域。

听起来像云,但这是文档的问题,用一堆无法理解的概念名词来解释无法理解的概念名词。

简单来说,BFC是一个独立的渲染区域,在该区域内规定了常规流块盒的布局,切断了内部和外部的联系,内部的渲染不影响外部

BFC的作用是创建BFC的要素,其自动高度需要计算浮动要素

创建边界框不与浮动元素重叠的BFC元素

创建BFC的元素不会将其子元素与外部边距合并

本文只讨论暂时浮动导致的崩溃

创建BFC

总结如下

如果根元素的html标记的float属性不为none,overflow属性不为visible,则显示属性为inline-block、table-cell、table-caption、flex、inline 位置属性为absolute或fixed时,contain值为layout、content、paint时,高度塌陷高度塌陷是什么意思?

已知如果父元素没有固定高度值,子元素将扩展高度并显示以下代码

可见,即使从子元素开始,父元素的高度也为100px。 为什么宽度是整个画面的问题也很简单。 div是块级元素,独占一行,所以在此不展开。

在此,将子元素son1设定为浮动

你可以看到父母的高度是0px

再来看看另一个例子

其中,母元素的高度(未给出固定值的情况下)通过子元素扩展,但http://www.Sina.com/http://www.Sina.com/http://www.Sina.com/http://www

这句话非常重要。 这句话解释了高度塌陷的原因,并提供了解决高度塌陷的方法。

高度崩溃是因为没有计算浮动元素的高度,但是父元素计算高度时如何将浮动元素的高度相加?

另外,请记住,首先论述BFC作用的是创建BFC的元素,其自动高度需要计算浮动元素。

BFC解决高度塌陷进化解决高度塌陷,创建BFC块

根元素的html标记

根标记在这里不匹配。 跳过

如果浮点属性不是none

上传代码:

在父元素上设置浮动属性后,可以看到父元素的高度再次从子元素扩展到100px的值。

如果溢出属性不是visible

上传代码:

这里只测试其中的两个属性。 其他属性也一样。 请自己试试。

如果overflow为visible,则高度将再次聚合,因为没有创建BFC块

显示属性为inline-block、table-cell、table-caption、flex、inline-flex (剩下的不太常见,不需要记忆) )时

上传代码:

其他情况也一样,在这里不怎么做测试

如果位置属性为absolute或fixed

位置为relative时

由此可见,创建BFC的元素确实会重新计算浮动元素的高度。

返回到开头的问题,向父元素中添加clearfix类

根元素的html标记

如果浮点属性不是none

如果溢出属性不是visible

显示属性为inline-block、table-cell、table-caption、flex、inline-flex (剩下的不太常见,不需要记忆) )时

如果位置属性为absolute或fixed

contain 值为 layout, content, paint 的时候

在上面演示的五种创建 BFC 块的方法中都可以解决高度塌陷问题,但是每种方法多多少少会有一些缺陷,或者说是会破坏我们希望的布局。我们细致列出每次情况可能会遇到的问题。

根元素 html 标签
这个没什么好说的,一个页面就一个根标签,我们不可能创建多个。

float 属性不为 none 的时候
float 属性会让父元素离开原有的流动模型,会破坏我们原先的理想效果,得不偿失

overflow 不为 visible
讲道理 overflow 属性设置为 hidden 时影响也挺小的,但如果设置为 scroll 的话,会出现滚动条边框,视觉效果还是挺明显的不推荐,当然你本来就像滚动条出现那没事了。

display 的多个属性
设置为 inline-block 影响其实也不大,因为设置为 行块盒不会对布局产生影响,但是影响大的是其他属性,比如设置为 flex 时,会变成 flex 布局模型。

position 属性为 absolute 或者 fixed 的时候
创建 BFC 块时这两个属性影响估计是最大的,设置这两个属性会使该 BFC 块真正的脱离文档流,用这两个属性创建 BFC 块极不推荐

最后有同学可能会说可以给父元素设置一个固定高度,这确实是个解决方法,但是也有个致命缺陷,我们知道在日常的开发中,我们很多情况一个元素的高度是不确定的,比如你刷评论区的时候有加载更多按钮,这时我们不可能给父元素设置固定高度,我们只能让高度由子元素撑开。

看回开头的代码

.clearfix::after { content :''; display: block; clear: both;}

给要清除浮动的元素添加一个伪元素,这样写的目的也是为了把未知的影响降到最低,我们知道这里最关键的一个属性是 clear:both ,(clear是用来清除浮动用到,可选值有 float,left,both), 但是如果我们直接这样子写:

无疑改变了原有的 DOM 结构,所以我们使用 伪元素 ::after,因为伪元素是 CSS 渲染是才加上去的,而且不会改变原有的 DOM 结构,简单的说就是 伪元素不算 DOM元素。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。