码迷,mamicode.com
首页 > Web开发 > 详细

CSS总结篇—可爱的浮动

时间:2016-01-12 21:25:59      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:

浮动

      浮动是浏览器定位的一种方式,也是现在最常用的一种布局方式。通过两次的静态页面练习,加上查阅一些资料,对浮动进行了整理。总结了10种清除浮动的方式以及各自的优缺点。加深了对浮动的理解和认识。

一、浮动的特性

    1、包裹性(BFC-块级元素上下文)2、破坏行(让父元素高度塌陷)

二、浮动产生的原因

    一般浮动是什么情况呢?一般是一个盒子里使用了CSS float浮动属性,导致父级对象盒子不能被撑开,这样CSS float浮动就产生了。

技术分享                       
浮动产生样式效果截图

三、浮动产生负作用

1、背景不能显示
由于浮动产生,如果对父级设置了(CSS background背景CSS背景颜色CSS背景图片,而父级不能被撑开,所以导致CSS背景不能显示。

2、边框不能撑开
如上图中,如果父级设置了CSS边框属性(css border),由于子级里使用了float属性,产生浮动,父级不能被撑开,导致边框不能随内容而被撑开。

3margin padding设置值不能正确显示
由于浮动导致父级子级之间设置了css padding、css margin属性的值不能正确表达。特别是上下边的padding和margin不能正确显示。

四、为何要清除浮动?

    要解答这个问题,我们得先说说CSS中的定位机制:普通流,浮动,绝对定位 (其中"position:fixed" 是 "position:absolute" 的一个子类)。
1)普通流:很多人或者文章称之为文档流或者普通文档流,其实标准里根本就没有这个词。如果把文档流直译为英文就是 document flow ,但标准里只有另一个词,叫做普通流 (normal flow),或者称之为常规流。但似乎大家更习惯文档流的称呼,因为很多中文翻译的书就是这么来的。比如《CSS Mastery》,英文原书中至始至终都只有普通流 normal flow(普通流) 这一词,从来没出现过document flow (文档流)
2)浮动:浮动的框可以左右移动,直至它的外边缘遇到包含框或者另一个浮动框的边缘。浮动框不属于文档中的普通流,当一个元素浮动之后,不会影响到块级框的布局而只会影响内联框(通常是文本)的排列,文档中的普通流就会表现得和浮动框不存在一样,当浮动框高度超出包含框的时候,也就会出现包含框不会自动伸高来闭合浮动元素(“高度塌陷”现象)。顾名思义,就是漂浮于普通流之上,像浮云一样,但是只能左右浮动。
正是因为浮动的这种特性,导致本属于普通流中的元素浮动之后,包含框内部由于不存在其他普通流元素了,也就表现出高度为0(高度塌陷)。在实际布局中,往往这并不是我们所希望的,所以需要闭合浮动元素,使其包含框表现出正常的高度。

3)定位

四、浮动方式

float:left/right/none

注:

1)浮动后的元素当成块级元素对待,因此不会有margin、padding常常困扰行内元素的问题

2)边框(border、background)不会包围浮动

五、清除浮动方式

1、

clear(清除)会指示元素不要包围浮动项目。清除元素时,本质上是迫使它落

.left  样式将落到左浮动元素的下方,但是仍将右浮动的对象

.right 强迫样式落至右浮动对象的下方,但是仍将环绕左浮动的对象

.both 强迫样式落至左浮动和右浮动的元素下方

.none 完全关闭清除属性

.copyright {

       clear: both;

}

如 <div style=”clear:both”></div>,其他标签br等亦可。

  1. <div class="warp" id="float1">
  2. <h2>1)添加额外标签</h2>
  3. <div class="main left">.main{float:left;}</div>
  4. <div class="side left">.side{float:right;}</div>
  5. <div style="clear:both;"></div>
  6. </div>
  7. <div class="footer">.footer</div>

复制代码

优点:通俗易懂,容易掌握
缺点:可以想象通过此方法,会添加多少无意义的空标签,有违结构与表现的分离,在后期维护中将是噩梦,这是坚决不能忍受的,所以你看了这篇文章之后还是建议不要用了吧。

2、使用 br标签和其自身的 html属性

这个方法有些小众,br 有 clear=“all | left | right | none” 属性

  1. <div class="warp" id="float2">
  2. <h2>2)使用 br标签和其自身的 html属性</h2>
  3. <div class="main left">.main{float:left;}</div>
  4. <div class="side left">.side{float:right;}</div>
  5. <br clear="all" />
  6. </div>
  7. <div class="footer">.footer</div>

复制代码

优点:比空标签方式语义稍强,代码量较少
缺点:同样有违结构与表现的分离,不推荐使用

3、父元素设置 overflow:hidden

通过设置父元素overflow值设置为hidden;在IE6中还需要触发 hasLayout ,例如 zoom:1;

  1. <div class="warp" id="float3" style="overflow:hidden; *zoom:1;">
  2. <h2>3)父元素设置 overflow </h2>
  3. <div class="main left">.main{float:left;}</div>
  4. <div class="side left">.side{float:right;}</div>
  5. </div>
  6. <div class="footer">.footer</div>

复制代码

优点:不存在结构和语义化问题,代码量极少
缺点:内容增多时候容易造成不会自动换行导致内容被隐藏掉,无法显示需要溢出的元素;04年POPO就发现overflow:hidden会导致中键失效,这是我作为一个多标签浏览控所不能接受的。所以还是不要使用了

4、父元素设置 overflow:auto 属性

同样IE6需要触发hasLayout,演示和3差不多
优点:不存在结构和语义化问题,代码量极少
缺点:多个嵌套后,firefox某些情况会造成内容全选;IE中 mouseover 造成宽度改变时会出现最外层模块有滚动条等,firefox早期版本会无故产生focus等, 请看 嗷嗷的 Demo ,不要使用

5、父元素也设置浮动

优点:不存在结构和语义化问题,代码量极少
缺点:使得与父元素相邻的元素的布局会受到影响,不可能一直浮动到body,不推荐使用

6、父元素设置display:table

优点:结构语义化完全正确,代码量极少
缺点:盒模型属性已经改变,由此造成的一系列问题,得不偿失,不推荐使用

7、使用:after 伪元素

需要注意的是 :after是伪元素(Pseudo-Element),不是伪类(某些CSS手册里面称之为“伪对象”),很多清除浮动大全之类的文章都称之为伪类,不过csser要严谨一点,这是一种态度。
由于IE6-7不支持:after,使用 zoom:1触发 hasLayout。
该方法源自于:How To Clear Floats Without Structural Markup
原文全部代码如下:

  1. <style type="text/css"> .clearfix:after { content: ".";display: block;height: 0;clear: both;visibility: hidden; }  .clearfix {display: inline-block;}  /* for IE/Mac */  </style><!--[if IE]> <style type="text/css">.clearfix {zoom: 1;/* triggers hasLayout */ display: block;/* resets display for IE/Win */}</style> <![endif]-->

复制代码

鉴于 IE/Mac的市场占有率极低,我们直接忽略掉,最后精简的代码如下:

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

9对父级设置适合CSS高度
对父级设置适合高度样式清除浮动,这里对“.divcss5”设置一定高度即可,一般设置高度需要能确定内容高度才能设置。这里我们知道内容高度是100PX+上下边框为2px,这样具体父级高度为102px

               
                           使用height高度清除浮动

10、父级div定义 overflow:hidden
对父级CSS选择器加overflow:hidden样式,可以清除父级内使用float产生浮动。优点是可以很少CSS代码即可解决浮动产生。

overflow:hidden解决CSS代码:

1.    .divcss5{ width:400px;border:1px solid #F00;background:#FF0; overflow:hidden} 
2.    .divcss5-left,.divcss5-right{width:180px;height:100px; 
border:1px solid #00F;background:#FFF} 
3.    .divcss5-left{ float:left} 
4.    .divcss5-right{ float:right} 

HTML代码不变。

为什么加入overflow:hidden即可清除浮动呢?那是因为overflow:hidden属性相当于是让父级紧贴内容,这样即可紧贴其对象内内容(包括使用float的div盒子),从而实现了清除浮动。Css overflow:hidden清除浮动方法DIVCSS5推荐使用。

 

CSS总结篇—可爱的浮动

标签:

原文地址:http://www.cnblogs.com/nankeyimeng/p/5125514.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!