• 解决高度塌陷问题


    目录:

    1. 产生原因

    2. 造成后果

    3. 高度塌陷的例子

    4. 解决办法

        方法 1 : 开启父元素的 BFC

        方法 2 : 在塌陷的父元素的最后添加一个空白的 div, 然后对该 div 进行清除浮动

        方法 3 :使用 after 伪类,向父元素后添加一个块元素,并对其清除浮动

    产生原因

      父元素在文档流中高度默认是被子元素撑开的,当子元素脱离文档流之后,将无法撑起父元素的高度,也就会导致父元素的高度塌陷。

    造成后果

      父元素的高度一旦塌陷,所有文档流中的元素位置将会上移,导致整个页面布局混乱。

    高度塌陷的例子

    盒子 box1 没有设置高度。盒子 box2 是盒子 box1 的子盒子。盒子 box2 有高度,所以把它的父盒子 box1 的高度撑开了。

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <style>
                #box1{
                    border: 1px solid blue;
                }
                #box2{
                    width: 100px;
                    height: 200px;
                    background-color: yellow;
                }
                #box3{
                    height: 100px;
                    background-color: orange;
                }
            </style>
        </head>
        <body>
            <div id="box1">
                <div id="box2"></div>
            </div>
            <div id="box3"></div>
        </body>
    </html>
    View Code

    页面表现:

    ( 蓝边盒子是 box1, 黄盒子是 box2,  橙盒子是 box3 )

    下面实现盒子 box1 高度塌陷:

    页面效果:

    说明:

    盒子 box1 的子盒子 box2 脱离了标准流,父元素盒子 box1 的高度无法被撑起,就会导致父元素 box1 的高度塌陷,父元素盒子 box1 高度塌陷之后,盒子 box3 位置将会上移。

    设置浮动或者定位都可以实现脱离标准流。

    解决方法

    下面 3 种方法中方法 3 最常用,次之是方法 1。

    方法 1:开启父元素的 BFC

    Q: 什么是 BFC?

    A: BFC(Block Formatting Context)块级格式化环境,是 Web 页面中盒模型布局的 CSS 渲染模式,指一个独立的渲染区域或者说是一个隔离的独立容器。BFC 是元素的隐含属性,默认是关闭状态,可以通过设置一些特殊的样式来开启 BFC。

    Q: BFC 的特性?

    A:

      1. 父元素的垂直外边距不会与子元素重叠。垂直方向上的距离由 margin 决定。

      2. 开启 BFC 的元素不会被浮动元素所覆盖。BFC 的区域不会与 float 元素重叠。

      3. 开启 BFC 的元素可以包含浮动子元素。内部的 box 会在垂直方向上一个接一个地放置。

      4. 计算 BFC 的高度时,浮动元素也参与计算。

      5. BFC 就是页面上的一个独立容器,容器里面的子元素不会影响外面元素。

    Q: 可以设置哪些样式来开启 BFC ?

    A: 可以设置的样式有 4 种。推荐使用 4

       1. 元素浮动,float 除 none 以外的值

       2. 定位元素,position( absolute, fixed )

       3. display 的值为以下其中之一: inline-block、table-cell、table-caption

       4. overflow 除了 visible 以外的值( hidden、auto、scroll )

    例:设置 overflow 解决高度塌陷

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <style>
                #box1{
                    border: 1px solid blue;
                    /* 开启 BFC */
                    overflow: hidden;
                }
                #box2{
                    width: 100px;
                    height: 200px;
                    background-color: yellow;
                    /* 脱离标准流 */
                    float: right;
                }
                #box3{
                    height: 100px;
                    background-color: orange;
                }
            </style>
        </head>
        <body>
            <div id="box1">
                <div id="box2"></div>
            </div>
            <div id="box3"></div>
        </body>
    </html>
    View Code

    页面表现:

    方法 2 : 在塌陷的父元素的后面添加一个空白的 div, 然后对该 div 进行清除浮动。

    缺点:使用这个方式会在页面中添加多余的结构

    Q: 怎么清除浮动?

    A: 清除浮动是清除其它元素浮动对当前元素产生的影响,可以使用 clear 来完成功能。clear 有四个可选值。分别是:

      none : 默认值,不清除浮动

      left : 清除左侧浮动元素对当前元素的影响

      right : 清除右侧浮动元素对当前元素的影响

      both : 清除两侧浮动元素对当前元素的影响

    方法 3 : 使用 after 伪类,向父元素后添加一个块元素,并对其清除浮动

    这种方法的原理与方法二原理一样,但是不用向页面中添加多余的结构。注意:该方法只适用于 IE8 及以上版本浏览器和其他非 IE 浏览器

    这个方法相当于在盒子尾部追加内容,在盒子内部通过 display 属性设置块元素,然后通过 clear 属性对其清除浮动。

  • 相关阅读:
    Gartner:安全软件在经济危机中独善其身 狼人:
    美军正式成立网络战司令部 保护美军网络 狼人:
    警惕“搜房网”“凯业房园”等网站被挂马 狼人:
    Gartner:08年全球杀毒软件市场份额排名 微软第七 狼人:
    专访梭子鱼:以“立体交付”保障Web应用安全 狼人:
    安全专家称Opera Unite或成黑客“好友” 狼人:
    微软正式提供免费杀毒软件下载 仅限7.5万份 狼人:
    电信故障引发全国多地上网难 京沪等地受影响 狼人:
    中国拟修订保守国家秘密法 严防通过互联网泄密 狼人:
    Google推反恶意广告网站 防护恶意软件威胁 狼人:
  • 原文地址:https://www.cnblogs.com/xiaoxuStudy/p/13222253.html
Copyright © 2020-2023  润新知