关于css清除元素浮动的方法总结(overflow clear floatfix)

作者:文刀日月;

来源:http://www.cnblogs.com/dtdxrk/p/3555438.html

关于css清除元素浮动的方法总结(overflow clear floatfix)

在前两天的一个面试中考官问我web中清除浮动的一些css常用方法,我很轻松的答出了:

1.overflow:hidden

2.clear:both

3.floatfix类

然后问题就来了,考官接着问‘为什么overflow:hidden‘可以清除浮动?这下就把我问住了。写了这么多年css只是单纯的解决问题,但是从来没想过为什么。

看来是需要反省和认真总结一下以前的这些细节问题了,只要不明白的就要加一个‘为什么?‘

clear:both

这三种方法里最好理解的就是clear:both

    <style>
        #con{border: 2px dashed #ccc;padding:5px;}
        div.c{width: 100px;height: 100px;background-color: green;margin-right:5px; _display: inline; float: left;color: #fff;}
    </style>
    <div id="con">
        <div class="c">内容一</div>
        <div class="c">内容二</div>
        <div class="c">内容三</div>
        <div style="clear:both"></div>
    </div>    

原理就是在父元素最后面添加一个非浮动的空div由于有clear:both属性用来清除浮动,父元素会把它包围起来,顺带手把float:left的div也一起包裹起来,高度不再塌陷。

这种方法不再流行的主要原因就是改变了结构添加了无用的内容。

overflow:hidden

写这篇文章的起因就是它overflow:hidden,到底为什么加入这个属性就可以清除浮动呢?我上网查了一下,文章还是挺多的‘block format content‘下面简称BFC,相关文章可以自己搜一下挺多的。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
        <style>
        #con{border: 2px dashed #ccc;padding:5px;overflow: hidden;}
        #con div.c{width: 100px;height: 100px;background-color: green;margin-right:5px; _display: inline; float: left;color: #fff;}
    </style>
</head>
<body>

    <div id="con">
        <div class="c">内容一</div>
        <div class="c">内容二</div>
        <div class="c">内容三</div>
    </div>
</body>
</html>

添加这个属性就使父级容器形成了BFC,它有三个特性:

1.BFC会阻止垂直外边距(margin-top、margin-bottom)折叠

2.BFC不会重叠浮动元素

3.BFC可以包含浮动

父级形成了BFC之后说‘清除浮动‘有点不太恰当,应该改为‘包含浮动‘。形成BFC的一些方法:

  • float为 left|right
  • overflow为 hidden|auto|scroll
  • display为 table-cell|table-caption|inline-block
  • position为 absolute|fixed

当然父级BFC也不是一个很好的解决方法,比如:

1.父级设置float:left会改变宽度,父级也会悬浮

2.父级设置overflow:hidden会影响绝对定位的定位的子元素显示问题

3.ie6兼容性

.floatfix

最后说现在大家都在用的floatfix类

.floatfix{*zoom:1;}
.floatfix:after{content:"";display:table;clear:both;}

.floatfix:after挺好理解的,就是在元素后面添加一个清除浮动的元素等同于<div style="clear:both"></div>,只不过这是用css来添加的。

但是IE6、7不支持a以外的伪类,所以我们再用*zoom:1用来兼容IE6、7。

在IE6、7内有个hasLayout的概念,很多bug都是由hasLayout导致的,当元素的hasLayout属性值为false的时候,元素的尺寸和位置由最近拥有布局的祖先元素控制。当元素的hasLayout属性值为true的时候会达到和BFC类似的效果,元素负责本身及其子元素的尺寸设置和定位。我们可以利用这点儿在IE6、7下完成清浮动,先看看怎么使元素hasLayout为true

  • position: absolute
  • float: left|right
  • display: inline-block
  • width: 除 “auto” 外的任意值
  • height: 除 “auto” 外的任意值
  • zoom: 除 “normal” 外的任意值
  • writing-mode: tb-rl

在IE7中使用overflow: hidden|scroll|auto 也可以使hasLayout为true

最后总结

现在我们已经知道父级div什么情况可以形成BFC,ie6、7的hasLayout属性值什么时候可以形成true,那么在项目的不同应用中就可以使用不同的方法来清除浮动了。

时间: 2024-10-09 22:19:40

关于css清除元素浮动的方法总结(overflow clear floatfix)的相关文章

Web前端面试指导(十九):CSS样式-如何清除元素浮动?

题目点评 本题属于比较常问的题目,也是在网页设计中经常遇到的问题,面试官希望通过这样的面试题来了解你对网页设计的基本功底,如果这样的题目答不出来,必会让面试官大失所望,面试成功的概率是非常小的. 答题思路 可以先回答在工作上常用的清除方法,并说明为什么使用它,然后在讲一些其它的清除方法来说明你的思维广阔,知识丰富的一面. 浮动的方式有以下4种. 1.使用clear:both清除浮动 示例1:使用div html代码 css代码 <div class="box"> <d

css清除&amp;闭合浮动

那些年我们一起清除过的浮动   原文地址:http://www.iyunlu.com/view/css-xhtml/55.html 浮动(float),一个我们即爱又恨的属性.爱,因为通过浮动,我们能很方便地布局: 恨,浮动之后遗留下来太多的问题需要解决,特别是IE6-7(以下无特殊说明均指 windows 平台的 IE浏览器).也许很多人都有这样的疑问,浮动从何而来?我们为何要清除浮动?清除浮动的原理是什么?本文将一步一步地深入剖析其中的奥秘,让浮动使用起来更加得心应手. 一.清除浮动 还是

css之元素浮动

什么时候用浮动——块级元素一行显示就使用浮动 浮动的特点——让元素脱标不占位置 什么时候清除浮动——父元素没有设置高度:父元素中所有的子元素都设置浮动 清除浮动的方法(掌握): 1.额外标签清除浮动 步骤:(1)在浮动元素后直接添加一个空div标签:(2)选中该div标签设置属性clear: both; 2.单伪元素清除浮动[推荐使用] .clearfix::after { content: ""; display: block; clear: both; height: 0; lin

div标签清除float浮动样式方法

方法一. 这个方法来源于positioniseverything ,通过after伪类实现,完全兼容当前主流浏览器. 1 <style type="text/css"> 2 .clearfix:after { 3 content: "."; 4 display: block; 5 height: 0; 6 clear: both; 7 visibility: hidden; 8 } 9 .clearfix {display: inline-block;}

CSS子元素浮动之后如何撑开父元素

(1)在浮动子元素后面添加 <div style="clear:both;"></div> (2)父元素CSS添加 z-index:1; overflow:hidden; (3)绝对定位/静止定位(absolute/fixed); (4)父元素也跟着浮动 (5)父元素设定高度 (6)最佳方案: 父元素CSS添加: overflow:auto;_height:1%;

css 子元素浮动后父元素没有高度导致页面变形的解决办法

<!DOCTYPE html><html><head><meta charset="UTF-8"><title></title><style type="text/css">.par{width: 100%;height: auto;border: 1px solid red;}.left{width: 40%;float: left;height: 50px;background:

css中子元素浮动,无法自动撑开父元素的解决办法

<div style="overflow:hidden;"> <div style="float:left;">left</div> <div style="float:right;">right</div> </div> 只要给父元素添加overflow:hidden即可

CSS清除浮动第一些方法

清除浮动的方法:常用第5种 第1种 :给父级也加浮动(这种情况当父级margin:0 auto;时不居中 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>无标题文档</title> <style> .box{ width:3

CSS清除浮动使父级元素展开的三个方法

点评:一个没有设置高度的容器div内如果存在浮动元素(即使用了属性float:left或者float:right),那么该父级元素会无法展开,下面举个例子为大家详细介绍下,希望对大家有所帮助 一个没有设置高度的容器div内如果存在浮动元素(即使用了属性float:left或者float:right),那么该父级元素会无法展开. 举个例子,有一个div容器,div容器里有两个小容器,分别向左和向右浮动,为了区别这三个容器,分别设置了不同颜色的边框. 复制代码 代码如下: <html> <h