CSS解决高度塌陷的方法

2023-05-16

一、什么是高度塌陷

当父元素不设置高度的时候靠子元素撑大,也就是说子元素有多高,父元素就有多高,当子元素浮动后,父元素就会高度塌陷。父元素高度塌陷后,父元素下面的元素就会向上移动,这样会导致整个页面的布局混乱。

比如下面的效果:

<div class="box1">
    <div class="box2"></div>
</div>
    <div class="box3"></div>
.box1 {
        border: 10px red solid;
        }
.box2 {
        width: 100px;
        height: 100px;
        background-color: blue;
        float: left;
        }
.box3 {
        height: 100px;
        background-color: green;
        }

可以看到父元素高度塌陷后,下面的子元素都往上移动了,脱离了文档流。

二、解决高度塌陷的方法

方法一:

给父元素设置固定的高度,固定高度后,父元素的高度就无法自适应子元素的高度了。

弊端:但是不能让元素高度自适应了 。

.box1 {
        border: 10px red solid;
        height:100px;
        }

方法二:

给父元素设置overflow:hidden,解决高度塌陷并能实现高度自适应的方法(遵循BFC的显示原则)

弊端:只要里面的内容或者元素超出父元素以外,就会被隐藏;

.box1 {
        border: 10px red solid;
        overflow: hidden;
        }

方法三:

在浮动元素的下方添加一个空元素,并且给他设置一下属性。

弊端:会添加很多空标记,增加结构负担,产生代码冗余

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style type="text/css">
            .box1 {
                border: 10px red solid;
            }
            
            .box2 {
                width: 100px;
                height: 100px;
                background-color: blue;
                float: left;
            }
            
            .clear_fix{   /*空白div的属性*/
                clear:both; /*清除两侧浮动*/
                height:0;
                overflow:hidden;
            }
        </style>
    </head>
    <body>
        <div class="box1">
            <div class="box2"></div>
            <div class="clear_fix"></div> /*添加空白div*/
        </div>
    </body>

方法四:

display:table; 给父元素添加display:table;让父元素转换元素类型跟表格的特性一样;

弊端:会改变当前元素的元素类型;

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style type="text/css">
            .box1 {
                border: 10px red solid;
                display: table; /* 改变元素类型为表格 */
            }
            
            .box2 {
                width: 100px;
                height: 100px;
                background-color: blue;
                float: left;
            }
        </style>
    </head>
    <body>
        <div class="box1">
            <div class="box2"></div>
        </div>
    </body>

方法五:万能清除法

通过after伪类元素添加一个空白的块元素,css加下列属性,并给要清除的div加上clear_fix的类名

推荐使用的方式,没有什么副作用。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style type="text/css">
            .box1 {
                border: 10px red solid;
            }

            .box2 {
                width: 100px;
                height: 100px;
                background-color: blue;
                float: left;
            }

            .clear_fix:after { /* 要加的属性 */
                content: ""; /* 添加内容 */
                clear: both; /* 清楚两侧浮动 */
                display: block; /* 转换元素类型为块元素 */
                height: 0;
                overflow: hidden; /* 溢出隐藏属性 */
                visibility: hidden;/* 隐藏属性 */
            }
        </style>
    </head>
    <body>
        <div class="box1 clear_fix">
            <div class="box2"></div>
        </div>
    </body>

技术总结:

父元素里的子元素会浮动的情况下,要注意高度塌陷问题并解决,这里推荐使用万能清除法解决

.clear_fix:after {
                content: ""; /* 添加内容 */
                clear: both; /* 清楚两侧浮动 */
                display: block; /* 转换元素类型为块元素 */
                height: 0;
                overflow: hidden; /* 溢出隐藏属性 */
                visibility: hidden;/* 隐藏属性 */
            }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSS解决高度塌陷的方法 的相关文章

  • SVG 内部跨度与文本不在同一行

    我在一个跨度内有一个 SVG 文件 同时包含文本 文本和 SVG 的高度相同 但是 SVG 与文本不在同一行 相关jsfiddle https jsfiddle net tcrnjd53 https jsfiddle net tcrnjd5
  • SVG 中虚线的悬停事件

    带有线 或路径 的 SVG 使用stroke dasharray当用户将鼠标悬停在虚线的实心部分上时 似乎只会触发 CSS 和 JS 悬停事件 https codepen io anon pen YeXoZy https codepen i
  • Django base.html扩展为homepage.html,出现静态图像,但home.css不起作用

    Problem 正如标题所示 我正在构建一个 django 项目 base html 扩展为 homepage html 并且工作正常 出现静态图像 但 home css 在任何地方都不起作用 Update 我已经切换了base html
  • 有没有带有保存和语法突出显示功能的 HTML、CSS 在线文本编辑器?

    我想让 css 文件可以从任何地方 家庭 办公室等 访问并准备好编辑 并保存 我将进行手工编码 只想语法突出显示并保存在网络设施上 我尝试了谷歌文档 这很好 因为我可以在线保存 而且它也有修订历史记录功能 这很有用 但它没有语法突出显示 也
  • CSS class 和 id 同名

    css class 和 id 同名有什么问题吗 就像文章 帖子页脚的 footer 和页面页脚的 footer 一样 不 完全可以接受 一个类是使用 a 来定义的 并且 ID 是使用定义的 因此 就浏览器而言 它们是两个完全独立的项目 唯一
  • 如何使子元素被访问/活动时父元素的颜色发生变化

    我有一个下拉导航 我想要做的是 当我单击任何子菜单链接时 我希望父按钮的颜色在链接处于活动状态时保持更改 这是代码的小提琴链接 https jsfiddle net v28ydshL https jsfiddle net v28ydshL
  • 高度在 IOS (iphone) 上无法正常工作

    我已经创建了this https codepen io salman15 project live DWbWpo Codepen 上的网站 在尝试使其响应所有平台时 我遇到了问题 看起来单个 div 覆盖了整个页面 仅在 IOS 上 并且并
  • Bootstrap 居中 div 内的文本左对齐

    我有一段 4 行诗 位于居中的 div 中 因为它是诗歌 所以我需要将 4 行左对齐 但不要对齐到 div 的左侧 这是它的居中方式 Lorem ipsum dolor sit amet onsectetur adipisicin Dolo
  • 更改 Angular 对话框的背景颜色

    我正在尝试更改对话框背景 无需触摸style css file 正如其他一些答案所说 有很多方法可以设置对话框样式 1 此解决方案适用于宽度和高度 但透明背景被 忽略 this dialog open DialogComponent dis
  • CSS3 与 JavaScript

    所以我试图在网页上创建一个动画 并试图找到一种使用 CSS3 来实现它的方法 但我对如何做到这一点感到非常困惑 我需要发生的是 当用户单击链接元素时 我希望 div 展开并填充特定于所单击的链接元素的内容 例如 当用户单击标题为 About
  • 为什么table-layout:fixed会影响父元素的宽度?

    有人可以解释为什么我的div with table layout fixed正在改变其父元素的宽度 body在本例中 使其在不应该是 100 的情况下达到 100 因为它已经定位了 body border 2px solid red hei
  • 裁剪响应式全宽图像

    我必须剪辑跨越整个宽度的图像 以下事情对我不起作用 剪辑 这需要绝对位置 因此块元素不会堆叠在下面 背景位置 缩放时无法正确剪辑 放大时剪辑的部分会增加 反之亦然 包装器 包装器高度取决于浏览器宽度 因此其值应该是动态的 我使用了 seti
  • 强制应用媒体查询

    我有这个 html 和 css 代码 div class wrapper div class a div div class b div div media all and max width 400px max height 300px
  • iPhone 4 上不稳定的 CSS3 动画

    我有一个非常简单的 或者至少我认为是 动画 我所做的只是 webkit background size 的动画 bubble position relative width 397px height 326px background url
  • 如何在索引视图中打印关联数据

    subjects this gt Subjects gt find all contain gt Users fields gt Users username Users email gt hydrate false gt toArray
  • 移动设备上的剩余悬停效果

    我一整天都在努力做这个JSFiddle http jsfiddle net gsamaras q2w4jjyt 4 也适用于手机 但我所有的尝试都没有效果 在桌面上 当用户将鼠标悬停在箭头上时 它会变成红色 在移动设备上 当用户触摸 为了单
  • 角度材质表-表内边框

    I am using Angular material table and I want to set border inside the table Using CSS I was able to set border Normal ca
  • Ace Editor 自动完成和多种语言

    如何为 Ace 编辑器创建自动完成功能以及如何突出显示 php 中的 html javascript 和 csshttp ace ajax org http ace ajax org
  • 等高列并将最后一项与底部对齐

    我有一个列表 其中每个li有嵌套容器 我尝试为所有列表项保留相同的高度 并将最后一个 div 推到底部 我将如何使用 flex 来做到这一点 ul list container display inline flex justify con
  • 如何使弹出窗口溢出:在溢出内可见:自动上下文

    我有一个 div 列表 如果超过父框 overflow x 应该滚动 并且在悬停时 我想看到一个弹出窗口 我的问题是 如果我将鼠标悬停在任何子 div 上 弹出窗口将被考虑用于溢出计算 但我只想让它在所有内容之上可见 而不是使其扩展滚动区域

随机推荐

  • 19.RFID复习

    题型 填空题30分 xff08 一空一分 xff09 简答题30分 xff08 三道题 xff09 综合题40分 xff08 两道题 xff09 重点章节第一章 xff0c 第二章 xff08 见整理的练习题 xff09 xff0c 第四章
  • [Linux驱动]-----NAND FLASH

    一 NAND原理及硬件操作 C xff1a fopen xff0c fread xff0c fwrite APP open read write 1 txt 文件读写 文件系统 xff1a vfat ext2 ext3 yaffs xff0
  • sklearn中train_test_split里,参数stratify含义解析

    直接上代码 xff1a span class token keyword from span sklearn span class token punctuation span model selection span class toke
  • CentOS 7/8 预装的新型防火墙firewalld配置详解,

    前言 本文将会详细介绍CentOS 7 firewalld的来由 功能 常用命令 常用的案例及使用方法 希望能帮助读者全面了解firewalld xff0c 并能正确配置和使用它 centos7 firewalld firewalld与ip
  • webpack5常用配置

    该常用配置使用的npm包 xff1a span class token string property property 34 dependencies 34 span span class token operator span span
  • 【Linux】CentOS & Makefile

    目录 1 Ubuntu入门1 1 文件1 2 网络相关1 2 1 Linux网络相关概念和修改IP地址的方法IP信息临时修改ip地址NetworkManager修改主机名 1 2 2 关闭防火墙并设置开机开不启动firewalld临时和永久
  • HTTP请求报文(请求行、请求头、请求体)

    HTTP协议 1 简介 HTTP协议 xff08 Hyper Text Transfer Protocol xff0c 超文本传输协议 xff09 是用于从万维网 xff08 WWW World Wide Web xff09 服务器传输超文
  • Linux 下使用vscode调试C/C++程序记录

    Linux 下使用vscode调试C C 43 43 程序记录 本文主要介绍了 xff0c 在linux下使用vscode调试工程时的 xff0c 一些经验记录 基础配置 常用的配置方法网上的材料很多 xff0c 可以直接参照 链接 lin
  • 形状特征的提取

    物体和区域的形状是图像表达和图像检索中的另一重要的特征 但不同于颜色或纹理等底层特征 xff0c 形状特征的表达必须以对图像中物体或区域的划分为基础 由于当前的技术无法做到准确而鲁棒的自动图像分割 xff0c 图像检索中的形状特征只能用于某
  • c语言中全局变量在不同文件中的引用

    c语言中全局变量在不同文件中的引用 c语言中在某个文件中定义的全局变量可以在不同的文件中引用 xff0c 对数组和指针这两种全局变量在使用时必须要注意 xff0c 外部引用格式不正确时会出现编译或运行错误 下面通过不同的例子来说明数组和指针
  • Linux上MathGL的安装和使用

    Linux上MathGL的安装和使用 本人参考http mathgl sourceforge net doc en index html SEC Contents MathGL官网教程第一种方案在Ubuntu上对MathGL进行了编译安装
  • kvaser在linux下的二次开发

    kvaser在linux下的二次开发 linux下kvaser的驱动和SDK包安装 下载连接 http www kvaser cn software 7330130980754 V5 13 0 linuxcan tar gz 安装过程 解压
  • linux 交叉编译 C和C++

    linux 交叉编译 C和C 43 43 安装编译器Cmake中选择编译器编译运行注意 在ubuntu 中搭建arm交叉编译环境的过程记录 安装编译器 安装aarch64 linux gnu编译器 xff0c 可以参考 参考链接 安装完成后
  • vscode中git使用

    vscode中git使用 目的 xff1a 减少git的命令输出 xff0c 尽量使用vscode可视化完成日常代码提交管理 将该过程简单记录 创建文件 xff0c 并使用Vscode打开 vscode中打开终端 xff0c 并进行git的
  • 程序调试正常 运行错误排查

    调试正常 运行错误排查 检查是否生成core文件 输入ulimit a 第一行core file size 如果0 xff0c core文件不会生成 xff0c 需要设置 ulimit c unlimited 生成core文件 xff0c
  • linux 指定网卡发送UDP数据

    问题 xff1a 解决方法1 xff08 有权限要求 xff09 可以使用SO BINDTODEVICE绕过路由表查找 xff0c 解决该问题 注意 xff1a 该方法需要程序有cap net raw和cap net bind servic
  • TortoiseGit的安装与配置方法

    目录 1 为什么选择Git 效率 历史 TortoiseGit 简介 2 下载安装Git及Tortoisegit 3 Tortoisegit 配置 1 为什么选择Git 效率 很多人有一种习惯吧 xff0c 什么软件都要最新的 xff0c
  • Python isinstance() 函数

    描述 isinstance 函数来判断一个对象是否是一个已知的类型 xff0c 类似 type isinstance 与 type 区别 xff1a type 不会认为子类是一种父类类型 xff0c 不考虑继承关系 isinstance 会
  • uniapp开发微信小程序登录获取openid并解决code无效问题:invalid code

    场景 xff1a 实现微信支付的时候需要获取到openid openid需要在登录的时候用登录返回的code获取 1 登录获取code xff0c 用code获取openid uni login success function res l
  • CSS解决高度塌陷的方法

    一 什么是高度塌陷 当父元素不设置高度的时候靠子元素撑大 xff0c 也就是说子元素有多高 xff0c 父元素就有多高 xff0c 当子元素浮动后 xff0c 父元素就会高度塌陷 父元素高度塌陷后 xff0c 父元素下面的元素就会向上移动