Heim  >  Artikel  >  Web-Frontend  >  DIV+CSS中清除浮动的7种方法分析_html/css_WEB-ITnose

DIV+CSS中清除浮动的7种方法分析_html/css_WEB-ITnose

WBOY
WBOYOriginal
2016-06-24 12:30:04979Durchsuche

http://www.coolhtml.cn/div+css/2009-11-03/DIV%20+%20CSS-floating-Analysis7.html

 

SS的清除浮动一个凡是做页面的人都会遇到的一个东西,但是是否大家都能够清楚的知道,全方位的了解呢?于是一闲下来了马上写了这样的一篇文章,不能讲面面俱到,然而基本能将我所知道的倾囊相授了。
  我们粗略的一起来看看清除浮动的方法一共有多少种(IE里面用zoom:1就不写了,下一个专题再写)。对应的DEMO

<!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" lang="UTF-8"><head><meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /><meta http-equiv="Content-Language" content="zh-cn" /><meta name="robots" content="all" /><meta name="Description" content="CSS Web Design 我爱CSS-Web标准化 Div+css教程" /><meta name="Keywords" content="我爱CSS,Web标准化,Div+css教程" /><title>CSS经验分享:看看清除浮动的方法一共有多少种 - CSS Web Design 我爱CSS-Web标准化 Div+css教程</title><style type="text/css">/*<![CDATA[*/ul {	list-style:none;	margin:0;	padding:0;	background-color:#A9CE78;}li {	float:left;	width:40px;	height:40px;	background-color:#66C7F7;	padding:5px;	margin-right:2px;	color:#FFF;	font-family:"Arial Black";}.demo {	width:800px;}.demo div {	border:2px solid #FF6767;	background:#FF6767;	margin-bottom:5px;}#after ul{	zoom:1;}#after ul:after {	content:"";	display:block;	height:0;	line-height:0;	clear:both;	visibility:hidden;}#afterout div:after {	content:"";	display:block;	height:0;	line-height:0;	clear:both;	visibility:hidden;}h1 {	color:#66C7F7;	font-family:"Arial Black";	margin:0;	padding:0;	font-size:20px;	clear:both;}h2 {	color:#66C7F7;	font-family:"Arial Black";	margin:0;	padding:0;	font-size:16px;	clear:both;}#brcssclear div{	zoom:1;}#brpropertyclear div{	zoom:1;}#cssoverflowauto ul {	overflow:auto;	zoom:1;}#cssoverflowhidden ul {	overflow:hidden;	zoom:1;}#cssdisplaytable ul {	display:table;	zoom:1;}#cssoverflowautoout div{	overflow:auto;	zoom:1;}#cssoverflowhiddenout div{	overflow:hidden;	zoom:1;}#cssdisplaytableout div{	display:table;	zoom:1;}.cleardiv{	zoom:1;}#brcssclear br.clear,#divcssclear div.clear{	clear:both;	height:0;	line-height:0;	margin:0;	padding:0;	border:0;	overflow:hidden;}/*]]>*/</style></head><body><h1>Cealr Fix Layout</h1><div id="after" class="demo">  <h2>Css :after</h2>  <div>    <ul>      <li>1</li>      <li>2</li>      <li>3</li>      <li>4</li>      <li>5</li>      <li>6</li>      <li>7</li>      <li>8</li>      <li>9</li>    </ul>  </div></div><div id="cssoverflowauto" class="demo">  <h2>Css overflow:auto</h2>  <div>    <ul>      <li>1</li>      <li>2</li>      <li>3</li>      <li>4</li>      <li>5</li>      <li>6</li>      <li>7</li>      <li>8</li>      <li>9</li>    </ul>  </div></div><div id="cssoverflowhidden" class="demo">  <h2>Css overflow:hidden</h2>  <div>    <ul>      <li>1</li>      <li>2</li>      <li>3</li>      <li>4</li>      <li>5</li>      <li>6</li>      <li>7</li>      <li>8</li>      <li>9</li>    </ul>  </div></div><div id="cssdisplaytable" class="demo">  <h2>Css display:table</h2>  <div>    <ul>      <li>1</li>      <li>2</li>      <li>3</li>      <li>4</li>      <li>5</li>      <li>6</li>      <li>7</li>      <li>8</li>      <li>9</li>    </ul>  </div></div><div id="divcssclear" class="demo">  <h2>Div css clear</h2>  <div>    <ul>      <li>1</li>      <li>2</li>      <li>3</li>      <li>4</li>      <li>5</li>      <li>6</li>      <li>7</li>      <li>8</li>      <li>9</li>    </ul>    <div class="clear"></div>  </div></div><div id="brcssclear" class="demo">  <h2>Br css clear</h2>  <div>    <ul>      <li>1</li>      <li>2</li>      <li>3</li>      <li>4</li>      <li>5</li>      <li>6</li>      <li>7</li>      <li>8</li>      <li>9</li>    </ul>    <br class="clear" />  </div></div><div id="brpropertyclear"  class="demo">  <h2>Br property clear</h2>  <div>    <ul>      <li>1</li>      <li>2</li>      <li>3</li>      <li>4</li>      <li>5</li>      <li>6</li>      <li>7</li>      <li>8</li>      <li>9</li>    </ul>    <br clear="all" />  </div></div><div id="normal" class="demo">  <h2>Normal</h2>  <div>    <ul>      <li>1</li>      <li>2</li>      <li>3</li>      <li>4</li>      <li>5</li>      <li>6</li>      <li>7</li>      <li>8</li>      <li>9</li>    </ul>  </div></div><div id="afterout" class="demo">  <h2>Css :after out</h2>  <div>    <ul>      <li>1</li>      <li>2</li>      <li>3</li>      <li>4</li>      <li>5</li>      <li>6</li>      <li>7</li>      <li>8</li>      <li>9</li>    </ul>  </div></div><div id="cssoverflowautoout" class="demo">  <h2>Css overflow:auto out</h2>  <div>    <ul>      <li>1</li>      <li>2</li>      <li>3</li>      <li>4</li>      <li>5</li>      <li>6</li>      <li>7</li>      <li>8</li>      <li>9</li>    </ul>  </div></div><div id="cssoverflowhiddenout" class="demo">  <h2>Css overflow:hidden out</h2>  <div>    <ul>      <li>1</li>      <li>2</li>      <li>3</li>      <li>4</li>      <li>5</li>      <li>6</li>      <li>7</li>      <li>8</li>      <li>9</li>    </ul>  </div></div><div id="cssdisplaytableout" class="demo">  <h2>Css display:table out</h2>  <div>    <ul>      <li>1</li>      <li>2</li>      <li>3</li>      <li>4</li>      <li>5</li>      <li>6</li>      <li>7</li>      <li>8</li>      <li>9</li>    </ul>  </div></div></body></html>

  1、采用伪类:after进行后续空制的高度位零的伪类层清除 
  2、采用CSS overflow:auto的方式撑高 
  3、采用CSS overflow:hidden的方式产生怪异适应 
  4、采用display:table将对象变成table形式 
  5、采用div标签,以及css的clear属性 
  6、采用br标签,以及css的clear属性 
  7、采用br标签,以及其自身HTML的clear属性 

  粗略的看,他们都能将问题解决;然而他们另外一方面又有着各自的利弊。(一一对应)

1、优点结构语义化完全正确,不会产生其余的怪异问题。
  缺点复用方式不当容易造成代码量急剧增大。
  建议最外层轻浮动时使用,或清晰模块化复用方式的人使用。 

2、优点结构语义化完全正确,代码量极少。
  缺点多个嵌套后,点击最外层的轻浮动框会遭成最外层至最内层内容全选(FF);或者在mouseover造成宽度改变时会出现最外层模块有滚动条(IE)。
  建议内个模块使用,请勿嵌套。 

3、优点结构语义化完全正确,代码量极少。
  缺点内容增多时候极易不会自动换行而内容被隐藏掉。
  建议宽度固定时使用,请勿嵌套。 

4、优点结构语义化完全正确,代码量极少。
  缺点盒模型属性已经改变,可想而知奇异事件自然多得你数都数不到。
  建议如果你不想改Bug改死你的话,最好不要使用;不过可以作为alpha版本当中临时性的忽悠下测试。 

5、优点代码量极少,复用性极高。
  缺点完全不能完美的适应语义化,不利于改版以及需求变更。
  建议初学者使用,可以让你快速的解决浮动问题。 

6、优点语义化程度比第5种情况要更优;代码量极少,复用性极高。
  缺点语义化依旧不完美,不利于改版以及需求变更。
  建议初学者使用,可以让你快速的解决浮动问题。 

7、优点语义化程度比第5、6种情况要更优;代码量最少,复用性极高。
  缺点语义化依旧不完美,不利于改版以及需求变更。
  建议引导初学者思维升级时使用,让其明白与其用classname来控制一种表现,倒不如回归到WEB1.0的时代的网页直接用html属性来控制表现,毕竟后者的代码量更少。 

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn