Float是我们在页面布局中常用的,也是非常重要的一个属性,可以让页面布局变得更加灵活。

但是在继续学习之后,尤其是掌握了宽高自适应之后,我们常常会发现一个奇怪的现象:如果父元素没有设置高度,而子元素都浮动了的话,父元素就“瘪”了。

就像下面这样

<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
.box1{width: 400px;border: 1px solid #000;}
.boxl{width: 200px;height: 200px;float: left;background: red;}
.boxr{width: 100px;height: 100px;float: right;background: orangered;}
</style>
</head>
<body>
<div class="box1">纸
<div class="boxl">大火</div>
<div class="boxr">小火</div>
</div>
</body>
</html>

很显然,纸是包不住火的。

但是这显然不是我们想要的那样。我们希望能使用浮动调整内部的布局,又希望父元素不会高度塌陷,要怎样做呢?我总结了四种方法。

第一种方法:添加高度

很简单,既然父元素高度自适应会塌陷,那就不自适应了,直接加上固定高度,那肯定是不会塌了。但是这种方法在页面设计中显然是不太合适的。因为比较简单,代码就不再附上了。

第二种方法:overflow:hidden;或者overflow:auto;

这两种方法是利用对溢出元素的处理,使父元素紧贴子元素的边界,这样一来,高度塌陷也就解决了,只不过,因为是元素溢出属性,所以真有元素溢出的话,也会按照给的属性值执行。

一种情况无法显示所有的内容,一种则会出现滚动条,都是各有缺陷。

还有一种方法,是在浮动的子元素下面添加一个空元素,添加属性clear:both;

顾名思义,这个属性的作用就是清除浮动,不过不是清除其他元素的浮动,而是清除左右浮动对自己的影响。

<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
.box1{width: 400px;border: 1px solid #000;}
.boxl{width: 200px;height: 200px;float: left;background: red;}
.boxr{width: 100px;height: 100px;float: right;background: orangered;}
.clear{clear: both;border: 1px solid blue;}
</style>
</head>
<body>
<div class="box1">纸
<div class="boxl">大火</div>
<div class="boxr">小火</div>
<div class="clear">The World</div>
</div>
</body>
</html>

看,添加这样一个子元素后,父元素的高度也填充起来了。

只要把这个子元素设置成空的,既不会影响整体样式,父元素也不会塌陷了。

只是这样一来,页面中就要添加很多空标签,无意义的代码很多,也很影响阅读。于是在这之上,可以使用伪对象来简化代码。

在原代码的基础上添加.box1::after{content: "";height: 0;clear: both;display: block;}

再来看一下效果

这下,纸真的可以包住火了。

最后一种方法在我的学习中被称为万能清除法,事实上,现在的页面开发中也常用这种方法来解决高度塌陷问题。

总结一下,解决高度塌陷的方法有四种:

1 添加固定高度 简单粗暴 适合固定内容固定高度的页面布局

2 overflow溢出隐藏 缺点是溢出内容会被隐藏或出现滚动条

3 浮动元素底部添加空标签属性clear:both;  代码冗余 可读性差

4 利用伪对象简化代码 可复用

float浮动造成高度塌陷的解决办法的更多相关文章

  1. float浮动之后高度自适应失效解决方案

    float浮动之后高度自适应失效解决方案 >>>>>>>>>>>>>>>>>>>> ...

  2. css float父元素高度塌陷

    css float父元素高度塌陷 float 使父元素高度塌陷不是BUG,反而是标准. float 原本是为了解决文字环绕才出现的. 当然有的时候要解决高度塌陷的问题 以下几个方法可以解决float ...

  3. [CSS]CSS浮动塌陷及解决办法

    一. CSS浮动 先看一个例子 <html !DOCTYPE> <head> <title>HTML2</title> <style> .d ...

  4. 如何解决浮动元素高度塌陷---CSS

    解决高度塌陷问题的方法: 方法一. //给父元素添加声明 overflow:hidden; 缺点:回隐藏溢出的元素: 方法二. 在浮动的元素下添加空div标签,并给该元素添加声明: clear:bot ...

  5. css之高度塌陷及其解决方法

    浅谈 清除浮动 的多种方式(clearfix) 1.什么是浮动 ? 是否脱离文档流? 1.普通流定位 static(默认方式) 普通流定位,又称为文档流定位,是页面元素的默认定位方式 页面中的块级元素 ...

  6. css关于浮动的高度塌陷

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 外层div高度不随内层div高度改变的解决办法

    当b1和b2都是float=left时候,a1层的高度不会被b1和b2的高度撑开. <div id=“div1″> <div id=”div2″ style="float: ...

  8. jquery获取高度错误(可以获取到宽度,但获取不到高度),及解决办法

    <div class="foo"> <div style="display: none;"> 3333333 </div> ...

  9. ul li列表元素浮动导致border没有底边解决办法

    如图,当ul li,li元素浮动,并且ul元素也overflow:hidden清除浮动的时候,给li元素加了border,但是不显示底边,这时候要看是不是没有给li元素加高,因为加了border之后默 ...

随机推荐

  1. spark sql 查询hive表并写入到PG中

    import java.sql.DriverManager import java.util.Properties import com.zhaopin.tools.{DateUtils, TextU ...

  2. typeof和类型转换

    编程形式 ① 面向过程 ② 面向对象 ③ Js既面向过程又面向对象 typeof(数据) 1)typeof(数据)返回该数据是什么类型的 2)写法: ① typeof(数据) ② typeof 数据 ...

  3. Spring(七)核心容器 - 钩子接口

    目录 前言 1.Aware 系列接口 2.InitializingBean 3.BeanPostProcessor 4.BeanFactoryPostProcessor 5.ImportSelecto ...

  4. 【redisson】分布式锁与数据库事务

    场景: 用户消耗积分兑换商品. user_point(用户积分): id point 1 2000 point_item(积分商品): id point num 101 200 10 传统的contr ...

  5. mysql基础(附具体操作代码)

    # 注释内容 -- 注释内容 -- 创建数据库 king CREATE DATABASE king; -- 查看当前服务器下有哪些数据库 SHOW DATABASES; SHOW SCHEMAS; - ...

  6. [更新ing]zzy的家里蹲网课日记

    前言 精神小(ge)伙(zi)终于记起了他的博客密码...... 寒假以来,积累了巨多的好想法想要写博客,往往都是因为各种原因半途而废--在学习生活上甚至也有各种拖延的毛病:爱欠作业不早睡,不见成绩不 ...

  7. SpringBoot图文教程6—SpringBoot中过滤器的使用

    有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文系列教程技术大纲 鹿老师的Java笔记 SpringBo ...

  8. HTML单词

    html超文本标记语言 head 头部font 字体 字形i(italic) 倾斜,斜体字big 大的,字体加大hr 水平线Pre(predefined)预定义h5标题5Div(division)区隔 ...

  9. JS DOM创建节点

    DOM节点操作之增删改查 document.write() 可以向文档中添加节点 但是有个致命问题,会把文档原有的节点全部清空 因此不推荐使用 <!DOCTYPE html> <ht ...

  10. windows2016_x64搭建ELK(datasource->filebeat->logstash->elasticsearch->kibana)

    windows2016_x64搭建ELK(datasource->filebeat->logstash->elasticsearch->kibana) 本文示例日志程序基于as ...