父元素高度塌陷的解决办法

很多时候子元素浮动的,会造成父元素塌陷

解决方法

1.添加一个空元素,并设置成清除浮动,即:

<div style="clear:both;"></div>

优点:通俗易懂,易于掌握

缺点:添加了无意义标签,不易于后期维护,违背了结构和表现的标准

2.给父元素添加 overflow:auto;

3.给父元素也浮动

缺点:影响整体页面布局,若父元素也有父元素呢?

4.使用after伪元素

给父元素添加一个类,即看不见的清除浮动的元素

.clearfix:after
{
content:".";
dispaly:block;
height:0;
clear:both;
visibility:hidden;
}

5.最优解

首先我们说一个CSS的概念——BFC块级格式上下文,简单来说就是只要属性或方法触发了BFC就可以防止高度塌陷.

以下属性就是可以触发BFC的部分

flaot:left;
overflow:auto;
dispaly:table-cell;
dispaly:table-caption;
display:inline-block;
position:fixed;
position:absolute;

前面几个方法也是借助了这个原理,但都有些缺陷。下面我们来介绍一个比较优雅的方法来实现。

.clearfix:after,
.clearfix:before
{
content: " ";
display:table;
}
.clearfix:after
{
clear:both;
}

加入before对于清除浮动没有影响,主要是为了解决浏览器顶部空白崩溃的问题。

例如:现有上下两个盒子,上盒子设置了margin-bottom:10px,下盒子设置了margin-top:10px,按理说两个盒子的上下距离应该是20px,但实际上只有10px,两个盒子的外边距会发生一个叠加。

时间: 2024-12-26 09:42:46

父元素高度塌陷的解决办法的相关文章

css float父元素高度塌陷

css float父元素高度塌陷 float 使父元素高度塌陷不是BUG,反而是标准. float 原本是为了解决文字环绕才出现的. 当然有的时候要解决高度塌陷的问题 以下几个方法可以解决float 父元素高度消失/塌陷的问题 .clearfix:after{content:'';display:block;height:0;overflow:hidden;clear:both;} .clearfix {*zoom:1} 更好的方法是 .clearfix:after{content:'';dis

css 子元素设置float,父元素高度塌陷

以div元素为例.div元素的高度会通过内容自动撑开.也就是说,内容有多少,高度就有多高.但是当内部元素设置了float属性之后,会是父元素高度塌陷 <div class="container"> <p>Hello World!Hello World!</p> <div class="clearfix"></div> </div> 清除浮动的方法 父元素底部添加空div,然后在添加属性clear

float浮动造成高度塌陷的解决办法

Float是我们在页面布局中常用的,也是非常重要的一个属性,可以让页面布局变得更加灵活. 但是在继续学习之后,尤其是掌握了宽高自适应之后,我们常常会发现一个奇怪的现象:如果父元素没有设置高度,而子元素都浮动了的话,父元素就“瘪”了. 就像下面这样 <html> <head> <meta charset="utf-8"> <title></title> <style type="text/css">

float浮动后,父级元素高度塌陷和遮盖问题

当子元素不浮动的时候,父元素的高度是由子元素撑起来的. 子元素A和B是两个div,独占一行 效果如图: 当子元素B浮动起来之后,父元素高度塌陷到只剩子元素A的高度 效果如图: 当给子元素A(div)设置CSS属性:display:inline 后,A的宽高将不起作用,宽高由内容撑开,即被字母A撑开.此时父级元素高度没有塌陷到和A一样,而是和B的高度一样 效果如图: 当子元素A和B同时浮动起来之后,A的CSS属性:display:inline失效,效果为float的效果,同时父级元素的高度彻底塌陷

解决父级元素高度塌陷问题的方法

如果父元素只包含浮动元素,且父元素未设置高度和宽度的时候.那么它的高度就会塌缩为零,也就是所谓的“高度塌陷”,如果父级元素包含背景或者边框,那么溢出的元素就不像父级元素的一部分了.解决“高度塌陷”的问题很简单: 1.浮动父级元素 如果让父级元素浮动,父级元素的高度就会扩大,直到完全包含它里面的浮动元素,虽然这个方法很奇怪,但是很有效.如果选择这种方法,一定要在该元素的下个元素添加clear:both,确保浮动元素落到父级元素的下方. 2.利用overflow:hidden,zoom:1 { ov

解决float浮动带来的父元素高度没有的问题---清除浮动

float的特性 : 1:使元素block块级化: 2:破坏性造成的紧密排列特性. 基于以上的特性,使得我们通常把浮动用来布局,带来的问题是,容易出问题,重用性不行,ie6-的版本下很多问题,因为它是要求固定的宽度,宽度计算错误就会带来整个布局的错乱. float属性出现的初衷是为了让文字环绕图片实现图文混排的效果和应用于流体布局,所以float浮动带来的父元素高度没有的问题并不是我们说的是一个  BUG,这本身就是float的特性. 以下是解决float浮动带来的父元素高度没有的问题 测试为I

子元素浮动时无法撑开父元素,父元素高度为0的解决方法

当子元素浮动时无法撑开父元素,父元素高度为0.这时可以通过在浮动的子元素后清除浮动来使父元素获得正确的高度. <div> <div style="float:left;height:200px;">child</div> <div style="clear:both;"></div> </div>

子元素设置浮动样式,父元素高度为0

子元素如果设置了浮动样式,那么它就会脱离文档流,从而导致父元素高度变成0,当然不能说这是一个Bug,float的出现的初衷就是为了实现文字环绕图片来实现图文混排和流式布局,所以只能说这种情况只能是由于浮动样式的特性决定的. 测试用例: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd

垂直居中——父元素高度确定的单行文本、父元素高度确定的多行文本

声明:来自http://www.imooc.com/learn/9 学习 父元素高度确定的单行文本的竖直居中 是通过设置父元素的 height 和 line-height 高度一致来实现的. .container{ height:100px; line-height:100px; background:#999; } 父元素高度确定的多行文本 使用插入 table (包括tbody.tr.td)标签,同时设置 vertical-align:middle. <body> <table>