CSS之浮动布局及相关问题
 
1.什么是浮动:
      在我们布局的时候用到的一种技术,能够方便我们进行布局,默认流动布局有不足,让块元素可以并排显示,通过让元素浮动,我们可以使元素在水平上左右移动,再通过margin属性调整位置。
2.浮动的原理;
      使当前元素脱离普通流,相当于浮动起来一样,浮动的框可以左右移动,直至它的外边缘遇到包含框或者另一个浮动的边缘
3、浮动的生成:
     使用css属性 float:left/right/none左浮动/右浮动/不浮动(默认)
4、浮动的影响:
 不会影响未浮动的块级元素布局,但会影响内联元素的布局
浮动后的元素可以设置宽度和高度,也就是说内联元素浮动后会变成块级元素,但我更倾向内联元素与变成inline-block元素,即同时拥有块级与行内元素的特征
因为浮动元素脱离了普通流,会出现一种高度坍塌的现象:原来的父容器高度是当前子元素撑开的,但是当子元素浮动后,脱离普通流浮动起来,那父容器的高度就坍塌(前提是父容器高度小于子元素高度)
 
5、产生高度塌陷的触发条件及解决方法
     当父元素未设置高度时,所有子元素浮动后,造成子元素脱离文档流进而无法把父元素撑开,父元素高度为0产生高度塌陷,称为高度塌陷问题
父元素高度塌陷后,父元素以下的元素都会向上移动,导致布局混乱,所以我们要解决高度塌陷的问题。
 
解决方法一:

解决高度塌陷最直接的办法就是给父元素添加高度

优点:简单。
缺点:只适合固定页面的布局,无法进行自适应,不推荐使用。
二、触发BFC
 
BFC即 Block Formatting Contexts (块级格式化上下文), 是 W3C CSS2.1 规范中的一个概念。它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。
 
BFC有一个特性是计算BFC的高度时,浮动元素也参与计算,所以将box出发为BFC后可以解决高度塌陷。可以通过给box添加overflow: hidden;等声明触发BFC。

三、给所有的浮动元素后面(即div2后)加一个空的标签。给添加的这个空标签添加声明 clear: both; 。

可以再加上height: 0; overflow: hieedn;是为了避免这个空标签如果是li的话,在IE6和IE7. 上有默认高度撑着,所以要解决一下。)
 
 
四、万能清除法:给高度塌陷的元素添加如下after伪类
.box::after{
    content: '';
    clear: both;/*清除两侧浮动*/
    display: block;/*转成成一个块元素*/
    both; overflow: hidden;
    visibility: hidden;
}
::after对IE8以下有兼容问题,可以通过增加zoom: 1;声明来解决。
 
 
 
 
 
 
 
CSS清除浮动的8种方法以及优缺点
浮动会使当前标签产生向上浮的效果,同时会影响到前后标签、父级标签的位置及 width height 属性。而且同样的代码,在各种浏览器中显示效果也有可能不相同,
这样让清除浮动更难了。解决浮动引起的问题有多种方法,但有些方法在浏览器兼容性方面还有问题。
 
下面总结8种清除浮动的方法(测试已通过 ie chrome firefox opera,后面三种方法只做了解就可以了):
1,父级div定义 height
<style type="text/css">
    .div1{background:#000080;border:1px solid red;/*解决代码*/height:200px;}
    .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px}
    .left{float:left;width:20%;height:200px;background:#DDD}
    .right{float:right;width:30%;height:80px;background:#DDD}
    </style>
    <div class="div1">
    <div class="left">Left</div>
    <div class="right">Right</div>
    </div>
    <div class="div2">
    div2
    </div>
原理:父级div手动定义height,就解决了父级div无法自动获取到高度的问题。
优点:简单、代码少、容易掌握
缺点:只适合高度固定的布局,要给出精确的高度,如果高度和父级div不一样时,会产生问题
建议:不推荐使用,只建议高度固定的布局时使用
2,结尾处加空div标签 clear:both;
 <style type="text/css">
    .div1{background:#000080;border:1px solid red}
    .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px}
    .left{float:left;width:20%;height:200px;background:#DDD}
    .right{float:right;width:30%;height:80px;background:#DDD}
    /*清除浮动代码*/
    .clearfloat{clear:both;height:0;overflow:hidden;}
    </style>
    <div class="div1">
    <div class="left">Left</div>
    <div class="right">Right</div>
    <div class="clearfloat"></div>
    </div>
    <div class="div2">
    div2
    </div>
原理:添加一个空div,利用css提高的clear:both清除浮动,让父级div能自动获取到高度
优点:简单、代码少、浏览器支持好、不容易出现怪问题
缺点:不少初学者不理解原理;如果页面浮动布局多,就要增加很多空div,让人感觉很不好
建议:不推荐使用,但此方法是以前主要使用的一种清除浮动方法
3,父级div定义 伪对象:after 和 zoom
<style type="text/css">
    .div1{background:#000080;border:1px solid red;}
    .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px}
    .left{float:left;width:20%;height:200px;background:#DDD}
    .right{float:right;width:30%;height:80px;background:#DDD}
    /*清除浮动代码*/
    .clearfloat:after{display:block;clear:both;content:"";visibility:hidden;height:0;overflow:hidden;}
    .clearfloat{zoom:1}
    </style>
    <div class="div1 clearfloat">
    <div class="left">Left</div>
    <div class="right">Right</div>
    </div>
    <div class="div2">
    div2
    </div>
原理:IE8以上和非IE浏览器才支持:after,原理和方法2有点类似,zoom(IE转有属性)可解决ie6,ie7浮动问题
优点:浏览器支持好、不容易出现怪问题(目前:大型网站都有使用,如:腾迅,网易,新浪等等)
缺点:代码多、不少初学者不理解原理,要两句代码结合使用才能让主流浏览器都支持。
建议:推荐使用,建议定义公共类,以减少CSS代码。
4,父级div定义 overflow:hidden
<style type="text/css">
    .div1{background:#000080;border:1px solid red;/*解决代码*/width:98%;overflow:hidden}
    .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px;width:98%}
    .left{float:left;width:20%;height:200px;background:#DDD}
    .right{float:right;width:30%;height:80px;background:#DDD}
    </style>
    <div class="div1">
    <div class="left">Left</div>
    <div class="right">Right</div>
    </div>
    <div class="div2">
    div2
    </div>
原理:必须定义width或zoom:1,同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度
优点:简单、代码少、浏览器支持好
缺点:不能和position配合使用,因为超出的尺寸的会被隐藏。
建议:只推荐没有使用position或对overflow:hidden理解比较深的朋友使用。
5,父级div定义 overflow:auto
 <style type="text/css">
    .div1{background:#000080;border:1px solid red;/*解决代码*/width:98%;overflow:auto}
    .div2{background:#800080;border:1px solid red;height:100px;margin-top:10px;width:98%}
    .left{float:left;width:20%;height:200px;background:#DDD}
    .right{float:right;width:30%;height:80px;background:#DDD}
    </style>
    <div class="div1">
    <div class="left">Left</div>
    <div class="right">Right</div>
    </div>
    <div class="div2">
    div2
    </div>
原理:必须定义width或zoom:1,同时不能定义height,使用overflow:auto时,浏览器会自动检查浮动区域的高度
优点:简单、代码少、浏览器支持好
缺点:内部宽高超过父级div时,会出现滚动条。
建议:不推荐使用,如果你需要出现滚动条或者确保你的代码不会出现滚动条就使用吧。
6,父级div 也一起浮动
<style type="text/css">
    .div1{background:#000080;border:1px solid red;/*解决代码*/width:98%;margin-bottom:10px;float:left}
    .div2{background:#800080;border:1px solid red;height:100px;width:98%;/*解决代码*/clear:both}
    .left{float:left;width:20%;height:200px;background:#DDD}
    .right{float:right;width:30%;height:80px;background:#DDD}
    </style>
    <div class="div1">
    <div class="left">Left</div>
    <div class="right">Right</div>
    </div>
    <div class="div2">
    div2
    </div>
原理:所有代码一起浮动,就变成了一个整体
优点:没有优点
缺点:会产生新的浮动问题。
建议:不推荐使用,只作了解。
7,父级div定义 display:table
<style type="text/css">
    .div1{background:#000080;border:1px solid red;/*解决代码*/width:98%;display:table;margin-bottom:10px;}
    .div2{background:#800080;border:1px solid red;height:100px;width:98%;}
    .left{float:left;width:20%;height:200px;background:#DDD}
    .right{float:right;width:30%;height:80px;background:#DDD}
    </style>
    <div class="div1">
    <div class="left">Left</div>
    <div class="right">Right</div>
    </div>
    <div class="div2">
    div2
    </div>
原理:将div属性变成表格
优点:没有优点
缺点:会产生新的未知问题。
建议:不推荐使用,只作了解。
8,结尾处加 br标签 clear:both
 <style type="text/css">
    .div1{background:#000080;border:1px solid red;margin-bottom:10px;zoom:1}
    .div2{background:#800080;border:1px solid red;height:100px}
    .left{float:left;width:20%;height:200px;background:#DDD}
    .right{float:right;width:30%;height:80px;background:#DDD}
    .clearfloat{clear:both}
    </style>
    <div class="div1">
    <div class="left">Left</div>
    <div class="right">Right</div>
    <br class="clearfloat" />
    </div>
    <div class="div2">
    div2
    </div>
原理:父级div定义zoom:1来解决IE浮动问题,结尾处加 br标签 clear:both
建议:不推荐使用,只作了解。
 
 
 
 

CSS之浮动布局及相关问题的更多相关文章

  1. CSS之浮动布局(float,浮动原理,清除/闭合浮动方法)

    css之浮动布局 本人博客:查看文章   1.什么是浮动:在我们布局的时用到的一种技术,能够方便我们进行布局,通过让元素浮动,我们可以使元素在水平上左右移动,再通过margin属性调整位置 2.浮动的 ...

  2. html5 css练习浮动布局

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

  3. css浮动布局,浮动原理,清除(闭合)浮动方法

    css浮动 1.什么是浮动:在我们布局的时用到的一种技术,能够方便我们进行布局,通过让元素浮动,我们可以使元素在水平上左右移动,再通过margin属性调整位置 2.浮动的原理:使当前元素脱离普通流,相 ...

  4. CSS多列布局Multi-column、伸缩布局Flexbox、网格布局Grid详解

    新css属性为我们提供了更加便捷的网页布局方式.来自微软的thomas lewis将带你认识去Grid Alignment,Flexibox Box以及Multi-column Layout这三大领域 ...

  5. 前端开发:css基础知识之盒模型以及浮动布局。

    前端开发:css基础知识之盒模型以及浮动布局 前言 楼主的蛮多朋友最近都在学习html5,他们都会问到同一个问题 浮动是什么东西?  为什么这个浮动没有效果?  这个问题楼主已经回答了n遍.今天则是把 ...

  6. [html/css]清除浮动的相关技巧

    以前只了解得很浅显,转载了一篇不错的文,学习参考 浮动会使当前标签产生向上浮的效果,同时会影响到前后标签.父级标签的位置及 width height 属性.而且同样的代码,在各种浏览器中显示效果也有可 ...

  7. CSS浮动布局与菜单栏设计

    公司周六停电,终于可以双休了.用周五空余时间再夯实一下css基础,<CSS权威指南>概念性的内容看起来容易犯困,不如实践来得快,动手操作吧. 一.浮动布局 浮动存在问题:浮动使元素脱离文档 ...

  8. css浮动布局

    上次我们一起对盒子模型进行了一定的了解,今天我们就对css浮动布局做一下研究.首先我们来了解一下网页基本布局的三种形式. 首先我们来了解一下什么是网页布局: 网页的布局方式其实就是指浏览器是如何对网页 ...

  9. Css - 浮动布局

    Css - 浮动布局 浮动布局 float 取值:left | right | none 利用float属性可设置元素的浮动,虽然浮动主要是应用于块元素,但行内元素其实也可以浮动,但行内元素本来就是一 ...

随机推荐

  1. Cloud插件,链接oracle数据库

    业务场景:客户需要在Cloud中获取第三方系统的数据,但是第三方系统的数据库是oracle,这是就需要连接oracle数据库获取数据了. 需要引用Oracle.ManagedDataAccess.dl ...

  2. 如何通过注解方式给项目添加Swagger功能

    在Java后端,每次开发一个新的接口后需要自测,此时可以借助Swagger功能很好地完成自测,下面将通过注解的方式来添加Swagger. (1)代码部分 package com.bien.edge; ...

  3. easyui-numberbox后台获取数据后,鼠标一点击就自动清空了

    <input type="text" name="txtMeterInitData" id="txtMeterInitData" cl ...

  4. Codeforce 515A - Drazil and Date

    Someday, Drazil wanted to go on date with Varda. Drazil and Varda live on Cartesian plane. Drazil's ...

  5. 剑指offer 39. 是否为平衡二叉树

    39. 是否为平衡二叉树 题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树 任意结点的左右子树高度差不大于1就是平衡二叉树. C++解法 class Solution { public: boo ...

  6. 走进电影院观看VTK

    VTK影院模型: 从这个模型去介绍VTK的应用,整个电影院就是VTK的显示窗口(vtkRenderWindow),舞台就是VTK的渲染场景(vtkRenderer),场景中有不同的演员就是VTK的各种 ...

  7. 智能手机中下一次被消灭的部件是电话卡和TF卡

    智能手机中下一次被消灭的部件是电话卡和TF卡. 侧滑实体键盘,实体拍照键,HDMI外接接口,实体切换双卡键,可拆卸后盖……这些都消亡了,被其更好的内在设计所取代.而电话卡和TF卡仍在使用.将来的智能手 ...

  8. 搭建GithubPages静态博客踩过的坑

    前言 搭建了属于自己的GitHub Page作为个人博客,上手Hexo+Material感觉比较花哨,后改用Yilia主题效果良好.期间发现并解决了一些问题,贴出值得记录的部分作为参考: 维护 书写 ...

  9. 打开UML类图的正确姿势

    UML(Unified Modeling Language) 统一建模语言,又称标准建模语言.是用来对软件密集系统进行可视化建模的一种语言.UML的定义包括UML语义和UML表示法两个元素.UML是在 ...

  10. MySQL5.5升级至5.7

    一.下载免安装MySQL5.7包 下载页面 下载链接 二.替换mysql的安装目录 解压mysql5.7 tar -zxf mysql-5.7.23-linux-glibc2.12-x86_64.ta ...