【CSS】 布局之浮动float和绝对定位absolute的选择

  浮动float:

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

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

  绝对定位absolute:

    设置为绝对定位的元素框从文档流完全删除,并相对于其包含块定位,包含块可能是文档中的另一个元素或者是初始包含块。元素原先在正常文档流中所占的空间会关闭,就好像该元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。(W3C)  



  以上是W3C里对浮动和绝对定位的解释。

  乍一看貌似两者没有什么关系,不过仔细想想,两者又有很多的相似之处。比如两者都从文档流中独立出来,并且元素在文档流中的原有空间都会被关闭。

  我们可以用两者达成同一个目的。

  首先写一个坯子: 

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3     <head>
 4         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5         <title>inline、block、inline-block的区别</title>
 6         <style>
 7             * {
 8                 margin: 0;
 9                 padding: 0;
10             }
11             #box {
12                 width: 500px;
13                 margin: 100px auto 0 auto;
14                 border: 1px solid red;
15             }
16
17             #a, #b, #c,#d {
18                 width: 100px;
19                 height: 100px;
20                 margin: 2px;
21             }
22             #a {
23                 background: #ccc;
24             }
25             #b {
26                 background: #666;
27             }
28             #c {
29                 background: blue;
30             }
31             #d {
32                 background: green;
33             }
34         </style>
35     </head>
36     <body>
37         <div id="box" class="clearfix">
38             <div id="a"></div>
39             <div id="b"></div>
40             <div id="c"></div>
41             <div id="d"></div>
42         </div>
43     </body>
44 </html>

  效果:

 

  现在我们给a块做向左浮动:

1 #a {
2     background: #ccc;
3     float: left;
4 }

  我们看到a块向左浮动,文档流中失去了空间,之后的b、c、d逐次补上。

  如果给a块设置绝对定位又是什么情况呢?

1 #a {
2     background: #ccc;
3     position: absolute;
4 }

  我们发现效果是一样的。

  不过如果a块后面有一段文字呢?

1 <body>
2     <div id="box" class="clearfix">
3     <div id="a"></div>
4     <span>SD卡收到货我ID号为活动文化低哦按活动ihawoidh</span>
5     <div id="b"></div>
6     <div id="c"></div>
7     <div id="d"></div>
8     </div>
9 </body>

  浮动float:

  绝对定位absolute:

  这么看差别就出来了,绝对定位独立于整个模型中,没有影响到文档流中的元素,而浮动则影响到了其之后的文档流。  



  接下来,我们给a、b、c、d全部都浮动或者绝对定位:

  浮动float:

  绝对定位absolute:

  这样也看出区别了,元素进行浮动后,会按照浮动流的先后顺序进行排列,而绝对定位则是每一个元素都独立存在于其他所以元素。 



  现在,我们想把a、b、c、d的父元素box框给撑起来,其实也就是其父元素自适应高度,则浮动可以用clear属性:

  我们可以在d块后面加一个

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

  或者有更好的方法:

1 .clearfix:after {
2     content: ‘.‘;
3     display: block;
4     height: 0;
5     clear: both;
6     visibility: hidden;
7 }

   这种方法是用":after"伪元素在元素的内容之后插入了一个块级元素(display: block)。将其属性设置"clear:both"从而达到与前者同样的效果。

  至于上面两种方法的取舍,建议使用下一种,因为下面一种不用在html代码里添加额外的div块代码,不会对html的结构造成影响。 

  如果我们要让进行绝对定位的父元素边框自适应该怎么办?clear只能应用在清除浮动的操作中,对进行绝对定位的元素块是不起作用的。所以我们只能通过计算给父元素框设置高度,这样才能达到这样的效果。



  如果我们需要达到这样的效果:

    页面四角固定有四个元素块,页面中央有一个固定长宽的元素块居中,并且当我们调整页面的大小时,这些元素块相对于页面的位置不发生改变。

  有2种方法可以达到这样的效果:

  第一种: 浮动+定位:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5         <title>float和absolute</title>
 6         <style>
 7             * {
 8                 margin: 0;
 9                 padding: 0;
10             }
11
12             #a, #b, #c,#d {
13                 width: 100px;
14                 height: 100px;
15                 margin: 2px;
16                 background: #666;
17             }
18             #a {
19                 float: left;
20             }
21             #b {
22                 float: right;
23             }
24             #c {
25                 float: left;
26                 position: absolute;
27                 left: 0;
28                 bottom: 0;
29             }
30             #d {
31                 float: right;
32                 position: absolute;
33                 right: 0;
34                 bottom: 0;
35             }
36             #content {
37                 width: 400px;
38                 height: 300px;
39                 background: red;
40                 position: absolute;
41                 left: 50%;
42                 top: 50%;
43                 margin-left: -200px;
44                 margin-top: -150px;
45             }
46         </style>
47     </head>
48     <body>
49         <div id="a"></div>
50         <div id="b"></div>
51         <div id="c"></div>
52         <div id="d"></div>
53         <div id="content"></div>
54     </body>
55 </html>

  第二种:绝对定位 :

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5         <title>float和absolute</title>
 6         <style>
 7             * {
 8                 margin: 0;
 9                 padding: 0;
10             }
11
12             #a, #b, #c,#d {
13                 width: 100px;
14                 height: 100px;
15                 margin: 2px;
16                 background: #666;
17             }
18             #a {
19                 position: absolute;
20                 top: 0;
21                 left: 0;
22             }
23             #b {
24                 position: absolute;
25                 top: 0;
26                 right: 0;
27             }
28             #c {
29                 position: absolute;
30                 left: 0;
31                 bottom: 0;
32             }
33             #d {
34                 position: absolute;
35                 right: 0;
36                 bottom: 0;
37             }
38             #content {
39                 width: 400px;
40                 height: 300px;
41                 background: red;
42                 position: absolute;
43                 left: 50%;
44                 top: 50%;
45                 margin-left: -200px;
46                 margin-top: -150px;
47             }
48         </style>
49     </head>
50     <body>
51         <div id="a"></div>
52         <div id="b"></div>
53         <div id="c"></div>
54         <div id="d"></div>
55         <div id="content"></div>
56     </body>
57
58 </html>

  仔细观察发现其实第一种方法完全有点画蛇添足的意思,将四个元素浮动再定位还不如开始就定位来得直接。而且如果用了浮动实现,还会发生很多意外的情况。

  比如在box内容的最上端添加一个高度为100px宽度为400px并居中的长框。

  浮动float:

  绝对定位absolute:

  我们发现后期往html结构里添加内容时,只有绝对定位的布局没有受到影响,这恰恰是我们所需要达到的效果。



  所以在日常的选择中,固定分布的布局尽量使用定位(relative/absolute),而浮动则在导航条等横式布局中运用得多一些。

时间: 2024-10-12 04:48:49

【CSS】 布局之浮动float和绝对定位absolute的选择的相关文章

网站布局之------浮动(float)和定位(position)(绝对定位,相对定位,静态固定定位),***什么叫脱离文档流?

网站布局之------浮动(float)和定位(position)(绝对定位,相对定位,静态固定定位),***什么叫脱离文档流? @参考文档:http://www.cnblogs.com/jenry/archive/2007/07/15/818660.html @什么叫脱离文档流?注意,只有绝对定位absolute和浮动float才会脱离文档流! 答案:CSS中脱离文档流,也就是将元素从普通的布局排版中拿走,其他盒子在定位的时候,会当做脱离文档流的元素不存在而进行定位. ---部分无视和完全无视

CSS布局:浮动与绝对定位的异同点

浮动 ( float ) 和绝对定位 ( position:absolute ) 相同点:(1)都是漂起来( 离开原来的位置 ) (2)并且都不占着原来的位置 (3)另外,如h1包文字的标签,默认只设height的情况下,它的width是铺满父元素的宽度的,而当浮动或绝对定位后,它的宽度就是h1内文字的宽度 不同点:float后,(这里float:left )它后面的对象,会占据它原来的位置, 但是后面对象里的文字和图片等好像知道它在左边,所以他们会自动的在它后面显示, 也就是,后面对象的文字图

CSS基础学习十八:CSS布局之浮动

CSS布局中说到定位就不得不提浮动,浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动 框的边框为止.由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样. 一float属性的定义和用法 float属性:设置元素浮动 可能的值: none 不浮动,在文档流内,默认 left  左浮动,脱离文档流 right 右浮动,脱离文档流 inherit 规定应该从父元素继承 float属性的值. float属性定义元素在哪个方向浮动.以往这个属性总应用于图像,使文

CSS 布局属性(display,float,clear,visibility,overflow,overflow-x,overflow-y)

display:none | inline | block | list-item | inline-block | table | inline-table | table-caption | table-cell | table-row | table-row-group | table-column | table-column-group | table-footer-group | table-header-group |  |  |  |  |  | |  默认值:inline 适用

【css】关于浮动float

浮动对我来说,一直都很神奇. 特别不老实,一会儿跑上来,一会儿跑下去的. float:left;左浮动 float:right;右浮动 float:none;不浮动#注意!1.做水平布局时,所有元素都需要设定浮动(一般出现在header中,又有logo又有nav的)2.元素设定浮动时,本身不占位了,需要给父级盒子固定高度(后期解决方案:需要清楚浮动),这样下面的元素不会往上跑(暂时)3.拥有浮动元素的宽度之和不可大于父级盒子,否则最后一个会被挤下来4.盒子加上浮动后,宽度从100%变成了自适应(

一览css布局标准

回顾历史,CSS1于1996.12.17发正式版,它是为辅助HTML的展现效果而生的.1998.5.12,CSS2发正式版.随后发修订版CSS2.1,纠正了CSS2中的一些错误.注意从CSS2起,CSS的作用就不是辅助展现了,变为全全负责展现.(注:当年CSS2的勘误表有兴趣可以看看) CSS2.1明确了2个模型,一个是众所周知的盒模型(Box model),CSS1没有盒模型的概念,盒模型的前身在CSS1里叫做面向盒的格式化模型.元素抽象为盒,以盒为对象设计思路清晰多了.CSS3的盒模型丰富了

如何理解CSS中的浮动 :其实他就像乘坐扶梯一样

只要你用过自动扶梯,你就能很快的理解CSS中的浮动(Float). 你肯定遇到过这样的情况: 做好了,你想用CSS浮动来调整元素间的位置关系. 在写完代码之后,你发现浮动元素没出现在你设想的位置,而且像个磁铁一样紧紧的靠在div旁边. 为了理解浮动这个概念,我个人曾经花费了很长的时间.有一次,我读到了一篇有关浮动的文章,觉得它说的很有道理,于是去尝试文章中的方法.但是写完代码之后,还是失败了……我也只好从头再来. 如今我已经成功的理解了这个概念,我也想要尽我最大的努力让其他人少走弯路. 浮动创建

10步掌握CSS布局定位: position static relative absolute float

无意中看到此文,因作者强调其中避开了浏览器bug/分歧,所以个人认为值得借鉴. 不才仔细看了此文,自觉受益匪浅 ,屡试不爽,佩服作者对css布局的精炼总结,顺便小译了一段, 英文水平有限,且个人通常写写php,对css了解不深却有点兴趣,错误之处还请指正. 个人没有空间,代码中的css文件和js保留了完整路径:http://www.barelyfitz.com/screencast/html-training/css/positioning/ 原文地址:http://www.barelyfitz

CSS.04 -- 浮动float、overflow、定位position、CSS初始化

标准流:行内/行内块元素横向有序排列 : 块元素纵向有序排列. 浮动:Float 语法:float:left/right :  设置浮动的元素,脱离标准流 可能的值 描述 left 元素向左浮动. right 元素向右浮动 none 默认值,元素不浮动,并会显示在其在文本中出现的位置 inherit 规定应该从父元素继承float属性的值   特点:浮动找浮动,不浮动找不浮动 浮动只影响后面的元素 浮动以元素顶部为基准对齐 浮动可是实现模式转换(span设置浮动可以设置宽高 ) 让块级元素在一行