CSS float 与 清除浮动

CSS浮动规则:

浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。

浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样。

浮动1:

设置float : right,元素脱离文档流并向上向右移动,直到它的右边缘碰到包含块的右边缘。

浮动2:

当框 1 向左浮动时,它脱离文档流并且向左移动,直到它的左边缘碰到包含框的左边缘。

因为它不再处于文档流中,所以它不占据空间,实际上覆盖住了框 2,使框 2 从视图中消失。

浮动3:

如果把所有三个框都向左浮动,那么框 1 向左浮动直到碰到包含框,另外两个框向左浮动直到碰到前一个浮动框。

浮动4:

如果包含框太窄,无法容纳水平排列的三个浮动元素,那么其它浮动块向下移动,直到有足够的空间。

如果浮动元素的高度不同,那么当它们向下移动时可能被其它浮动元素“卡住”:

       浮动的包裹性:浮动元素会生成一个块级框,而不论它本身是何种元素。

       注:如果浮动非替换元素,则要指定一个明确的宽度;否则,它们会尽可能地窄。

CSS float的最初作用:

应用于图像,使文本围绕在图像周围。

文字围绕图像的原理

行框都会围绕浮动元素。文字是一种行框。

(这里的行框,它的位置可以在其他非行框内,只要它紧挨浮动元素,且包含它的非行框没有设置清除浮动,它都会围绕浮动元素。)

浮动的影响:影响它的兄弟元素的位置和父元素产生高度塌陷

1.影响兄弟元素

兄弟元素是块级元素:那么兄弟元素会无视这个浮动的块框,也就是我们平时看到的效果——使到自身尽可能与这个浮动元素处于同一行,导致被浮动元素覆盖

兄弟元素是内联元素:则兄弟元素会尽可能围绕浮动元素。

2.影响父元素

浮动的元素脱离了普通流,这样使得包含它的父元素并不会因为这个浮动元素的存在而自动撑高,这样就会造成高度塌陷

清除浮动:

1.使用clear清除浮动

clear 属性定义了元素的哪边上不允许出现浮动元素。

在 CSS1 和 CSS2 中,是通过自动为清除元素(即设置了 clear 属性的元素)增加上外边距实现的。

在 CSS2.1 中,会在元素上外边距之上增加清除空间,而外边距本身并不改变。

不论哪一种改变,最终结果都一样,如果声明为左边或右边清除,会使元素的上外边框边界刚好在该边上浮动元素的下外边距边界之下。

2.使用空DIV清除浮动

这是较为古老的方法了,除了 div ,也有使用其他标签的,但 div 更为适用,因为除了浏览器赋予它的 display: block 外,它没有其他的样式了,也不会有特殊的功能。

(注意:display: block 是浏览器赋予 div 的,存在于浏览器的 user agent stylesheet ,而不是 div 默认 display 的值就为 block ,在 W3C 中,所有的 HTML 标签 display 的默认值都为 inline 。)

代码:

<div class="ele float">box 2</div>

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

<div class="ele float">box 3</div>

3.overflow 方法(使用BFC和hasLayout)

在浮动元素的父元素上设置了 overflow 的值为 hidden 或 auto ,可以闭合浮动。

在 IE6 中还需要触发 hasLayout ,例如为父元素设置容器宽高或设置 zoom:1

4.使用 :after伪元素方法(只能避免父元素高度塌陷的问题)

结合 :after 伪元素(注意这不是伪类,而是伪元素,代表一个元素之后最近的元素)和 IEhack ,可以完美兼容当前主流的各大浏览器。

相对来说,这个办法不但完美兼容主流浏览器,并且也很方便,使用重用的类,可以减轻代码编写,另外网页的结构也会更加清晰。

代码:

<style>

.clearfix {/* 触发 hasLayout */ zoom: 1; }

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

</style>

<div class="box clearfix">

<div class="main left">我设置了左浮动 float: left</div>

<div class="aside left">我是页脚,但是我也设置了左浮动。</div>

</div>

参考文章:http://www.zhangxinxu.com/wordpress/?p=583

http://kayosite.com/remove-floating-style-in-detail.html

http://www.w3school.com.cn/cssref/pr_class_float.asp

http://www.w3school.com.cn/cssref/pr_class_clear.asp

时间: 2024-08-03 17:15:25

CSS float 与 清除浮动的相关文章

css用clearfix清除浮动

什么是.clearfix .clearfix:after { content: "."; /*内容为"."就是一个英文的句号而已.也可以不写.*/ display: block; /*加入的这个元素转换为块级元素.*/ clear: both; /*清除左右两边浮动.*/ visibility: hidden; /*可见度设为隐藏.注意它和display:none;是有区别的.visibility:hidden;仍然占据空间,只是看不到而已:*/ line-heig

CSS基础之清除浮动

CSS基础之清除浮动 本人前端菜鸟一枚,在学习 CSS 过程中发现网上流传的教程参差不齐,要么内容不够详细,要么方法就是错的.本文是在我参考了许多前辈经验的基础上编写的,如有错误的地方,请各位大牛不吝赐教.以下是我总结的三种行之有效而且比较简单实用的方法. 一.父级div定义伪类 :after 代码如下: <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8&

CSS定位机制:浮动 float及清除浮动的常用方法

CSS的定位机制 1.普通流(标准流) 默认状态,元素自动从左往右,从上往下排列 块元素的特征: 独占一行 可以设置宽高 如果不设置宽度,宽度默认为容器的100% 常见的块元素:div p h1-h6 ul ol li dl dt d 行内元素的特征: 与其他元素同行显示 不可以设置宽和高 宽和高就是文字或图片的宽高 常见的行内元素:span a b i u em 2.浮动 浮动基础 会使元素向左或向右移动,只能左右,不能上下 浮动元素碰到包含框或另一个浮动框,浮动停止 浮动元素之后的元素将围绕

Css学习之清除浮动的方法详解

本文和大家分享的主要是css中浮动清除相关内容,一起来看看吧,希望对大家学习css http://www.maiziedu.com/course/web/有所帮助. 当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高度,使得内容溢出到容器外面而影响(甚至破坏)布局的现象.这个现象叫浮动溢出,为了防止这个现象的出现而进行的CSS处理,就叫CSS清除浮动. #div { background-color: blu

ife任务刷题总结(一)-css reset与清除浮动

本文同时发布于本人的个人网站www.yaoxiaowen.com 百度创办的前端技术学院,是一个面向大学生的前端技术学习平台.虽然只有大学生才有资格报名,提交代码进行比赛排名.但是这并不妨碍我们这些初学者也可以按照他们的任务列表,进行刷题.虽然ife名义上是针对初学者,但是我看了一下任务列表,那些任务还并不是那么简单.所以很适合初学者把任务刷一遍,我觉的,把这些任务都刷完,那么前端算是入门了. 对于代码学习来讲,除了实际的去敲,还有其他更好的学习方法吗?因此我计划按照ife的任务都刷一遍,代码提

css技巧:清除浮动

1.常用方法——overflow 给浮动元素的容器添加overflow:hidden;或overflow:auto;可以清除浮动,另外在 IE6 中还需要触发 hasLayout ,例如为父元素设置容器宽高或设置 zoom:1. 不过不能和position配合使用,因为超出的尺寸的会被隐藏. overflow:auto会在内部宽度超过父元素时出现滚动条. 在添加overflow属性后,浮动元素又回到了容器层,把容器高度撑起,达到了清理浮动的效果. 2.终极方法——伪元素 如果遇到水平排列列表需要

(前端)html与css css 18、清除浮动

清除浮动 1.浮动存在的问题 a) 浮动的元素不能撑高父级,代码↓ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en

float与清除浮动的注意事项有哪些?

先来一个常见的bug:代码:效果:描述:当我们给一个元素设置float浮动之后,其后面的元素不再按照正常的排列方式跟随在这个元素后面,而是会被float元素压在下面,并且float元素不再作为撑开父元素的子元素.那么为什么会出现这样的问题呢?可显而知是浮动元素带来的影响,那么浮动元素布局的时候为什么会出现这样的影响呢?接下来我们来探究一下浮动元素的问题一.float的本质首先我们来探究一下float的本质,float的出现其实是为了实现文字环绕的效果的,类似于如下效果:我们会发现当让图片浮动之后

css 三(清除浮动专题)

1.  三个关于浮动的概念  不浮动float:none; 清除周围的浮动元素   float:both   这是清除浮动的本意 清除子元素浮动对父元素的影响  clearfix    很多人都理解成这个叫清除浮动.. 2. 什么是清除浮动 清除浮动不是把当前标签的浮动给清除了,如果这样,还加浮动做什么 其实清除浮动指的是清楚当前元素旁边的浮动元素,但是当前元素又不能影响别人,打不赢就跑,所以自己就跑到下面去了. 3. 为什么要清楚浮动 在布局的时候我们经常希望某些内容能够水平排布,水平排布后,