目录
清除浮动详解
清除前面兄弟元素浮动
闭合子元素浮动
clear:both
新建 BFC
首页 web前端 css教程 css中父元素高度塌陷是什么意思,如何解决?(附代码)

css中父元素高度塌陷是什么意思,如何解决?(附代码)

Aug 14, 2018 pm 02:32 PM

本篇文章给大家带来的内容是关于css中父元素高度塌陷是什么意思,如何解决?,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

<p>首先得回答什么是父元素高度塌陷:

<p>在文档流中,父元素的高度默认是被子元素撑开的,也就是子元素多高,父元素就多高。但是当子元素设置浮动之后,子元素会完全脱离文档流,此时将会导致子元素无法撑起父元素的高度,导致父元素的高度塌陷。

<p>一下是举例说明:

  <p class="box1">
        <p class="box2"></p>
    </p>
登录后复制
<style type="text/css">     
        .box1{
            border: 10px red solid;
            }

        .box2{
            background-color: yellow;
            width: 100px;
            height: 100px;
            float: left;
            
           }
    </style>
登录后复制
<p>

<p>

清除浮动详解

<p>清除浮动主要是为了解决由于浮动元素脱离文流导致的元素重叠或者父元素高度坍塌的问题,而这两个问题分别对应了需要清除浮动的两种种情况:清除前面兄弟元素浮动和闭合子元素浮动(解决父元素高度坍塌)。

清除前面兄弟元素浮动

<p>清除前面兄弟元素浮动很简单,只需要在不想受到浮动元素影响的元素上使用 clear:both 即可, HTML & CSS 代码如下:

<p class="fl">我是左浮动元素</p>
<p class="fr">我是右浮动元素</p>
<p class="cb">我不受浮动元素的影响</p>
登录后复制
.fl {
    float: left;
}
.fr {
    float: right;
}
.cb {
    clear: both;
}
登录后复制
<p>在 CSS2 以前,clear 的原理为自动增加元素的上外边距(margin-top)值,使之最后落在浮动元素的下面。在 CSS2.1 中引入了一个清除区域(clearance)——在元素上外边距之上增加的额外间距,使之最后落在浮动元素的下面。所以如果需要设置浮动元素与 clear 元素的间距,得设置浮动的元素的 margin-bottom,而不是 clear 元素的 margin-top。

<p>demo 可见:clear 清除浮动

闭合子元素浮动

<p>我们知道,在计算页面排版的时候,如果没有设置父元素的高度,那么该父元素的高度是由他的子元素高度撑开的。但是如果子元素是设置了浮动,脱离了文档流,那么父元素计算高度的时候就会忽略该子元素,甚至当所有子元素都是浮动的时候,就会出现父元素高度为 0 的情况,这就是所谓的父元素高度坍塌问题。为了能让父元素正确包裹子元素的高度,不发生坍塌,我们需要闭合子元素的浮动。

<p>一般我们有两种办法可以用来闭合子元素浮动:

  • <p>给最后一个元素设置 clear: both

    <p>

  • <p>给父元素新建一个 BFC(块格式化上下文)

clear:both

<p>由于我们最后一个元素使用 clear:both,所以该元素就能不受浮动元素影响出现在父元素的最底部,而父元素计算高度的时候需要考虑到这个正常元素的位置,所以高度自然包裹到了最底部,也就没有了坍塌。

<p>对于这个方法,以前我们是利用新增一个空元素(<b><span><p> 等)来实现的,如下:

<p class="container">
    <p class="box"></p>
    <span class="clear-box"></span>
</p>
登录后复制
.box {
    float: left;
}
.clear-box {
    clear: both;
}
登录后复制
<p>虽然这种办法比较直观,但是不是很优雅,因为增加了一个无用的空白标签,比较冗余而且不方便后期维护(一般不太建议使用该办法)。所以后期有了通过父元素的伪元素(::after)实现的著名 clearfix 方法,代码如下:

<p class="container clearfix">
    <p class="box"></p>
</p>
登录后复制
.clearfix::after {
    content:"";
    display:table;
    clear: both;
}
登录后复制
<p>上面方法给父元素增加一个专门用于处理闭合子元素浮动的 clearfix 类名,该类使用 ::after 伪元素类选择器增加一个内容为空的结构来清除浮动,可能你们比较疑惑的是为什么要设置 display:table 属性,这其实涉及到一个比较复杂的进化过程,具体可以参考资料——clearfix浮动进化史

新建 BFC

<p>该方法的原理是:父元素在新建一个 BFC 时,其高度计算时会把浮动子元素的包进来。

<p>下面我们以实例为证:如下图我们的图片为浮动,父元素 article 的高度就出现了坍塌(没有包括图片),而根元素 HTML (默认情况下我们的根元素 HTML 就是一个 BFC)的高度则包括了图片的高度。

<p>

<p>

<p>既然新建一个 BFC 可以解决父元素高度坍陷问题,那就好办了,下面这些都可以创建一个 BFC :

  • <p>根元素或其它包含它的元素

    <p>

  • <p>浮动 (元素的 float 不是 none)

    <p>

  • <p>绝对定位的元素 (元素具有 position 为 absolute 或 fixed)

    <p>

  • <p>内联块 inline-blocks (元素具有 display: inline-block)

    <p>

  • <p>表格单元格 (元素具有 display: table-cell,HTML表格单元格默认属性)

    <p>

  • <p>表格标题 (元素具有 display: table-caption, HTML表格标题默认属性)

    <p>

  • <p>块元素具有overflow ,且值不是 visible

    <p>

  • <p>display: flow-root

<p>虽然有这么多方法可用,可我们常用的就是 overflow: hidden,代码如下:

<p class="container">
    <p class="box"></p>
</p>
登录后复制
.container {
    overflow: hidden;
}
.box {
    float: left;
}
登录后复制
<p>上面主要讲解了我们比较常的一些清除浮动解决方案,看似简单的清除浮动方法其实则涉及到了很多复杂的CSS规则,大家在实际操作的时候可以针对不同的情况参考上面的方法。

<p> 相关推荐:

<p>CSS清除浮动_清除float浮动_html/css_WEB-ITnose

<p>[CSS] 定位和清除浮动_html/css_WEB-ITnose

<p> 

以上是css中父元素高度塌陷是什么意思,如何解决?(附代码)的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1677
14
CakePHP 教程
1431
52
Laravel 教程
1334
25
PHP教程
1280
29
C# 教程
1257
24
静态表单提供商的比较 静态表单提供商的比较 Apr 16, 2025 am 11:20 AM

让我们尝试在这里造成一个术语:“静态表单提供商”。你带上html

每周平台新闻:HTML加载属性,主要的ARIA规格以及从iframe转移到Shadow dom 每周平台新闻:HTML加载属性,主要的ARIA规格以及从iframe转移到Shadow dom Apr 17, 2025 am 10:55 AM

在本周的平台新闻综述中,Chrome引入了一个用于加载的新属性,Web开发人员的可访问性规范以及BBC Move

使Sass更快的概念证明 使Sass更快的概念证明 Apr 16, 2025 am 10:38 AM

在一个新项目开始时,Sass汇编发生在眼睛的眨眼中。感觉很棒,尤其是当它与browsersync配对时,它重新加载

带有HTML对话框元素的一些动手 带有HTML对话框元素的一些动手 Apr 16, 2025 am 11:33 AM

这是我第一次查看HTML元素。我已经意识到了一段时间,但是尚未将其旋转。它很酷,

纸张形式 纸张形式 Apr 16, 2025 am 11:24 AM

购买或建造是技术的经典辩论。自己构建东西可能会感觉更便宜,因为您的信用卡账单上没有订单项,但是

'订阅播客”链接应在哪里? '订阅播客”链接应在哪里? Apr 16, 2025 pm 12:04 PM

有一段时间,iTunes是播客中的大狗,因此,如果您将“订阅播客”链接到喜欢:

快速吞噬缓存破坏 快速吞噬缓存破坏 Apr 18, 2025 am 11:23 AM

您应该肯定会在CSS和JavaScript(以及图像和字体以及其他内容)等资产上设置遥远的高速缓存标头。告诉浏览器

See all articles