打印

[教程] 彻底弄懂CSS盒子模式三(浮动的表演和清除的自述)

彻底弄懂CSS盒子模式三(浮动的表演和清除的自述)1


1.彻底弄懂CSS盒子模式一(DIV排版快速入门)
2.彻底弄懂CSS盒子模式二(导航栏实例)
3.彻底弄懂CSS盒子模式四(绝对定位和相对定位)

一、下面请看float的精彩表演,有请。
大家好,我是float,欢迎访问CSS家族,在CSS家族中,在当今CSS排版流行的年代,我可扮演着重要的角色哦。因为我的工作对网页设计人员很有用,就像之前align帮助你们定位网页元素一样重要,但是我的功能似乎比align强多了。接下来我将现场给你演示我的绝活,看细心点哦。当然也许我一下子不能把我所有的技巧给大家演示,因为有些技巧本人也许一下子记不起来了,那就请那些对我比较了解的人来帮我补充补充啰,比如版主等等啊。

先讲一下我主要的工作,我主要是帮助对像在网页中对齐的,一旦我发出float:left或float:right命令,被我浮动的对像就会向左或向右移动直到遇到边框( border) 、填充( padding) 、边界( margin )或者另一个块对象的边缘为止,当然也有一些看起来较特殊的情况,比如被我浮动的元素设置了一个负边界(margin)的时候。我还可以让文字流环绕在被我浮动的对像周围,这也是我的特色。另外要注意的一点是,最好给浮动对象设置一下宽度,不然会出现一些意想不到的麻烦。我主要浮动类型有两种,它们是float:left和float:right,当然我还有一个功能是float:none,不过float:none比较少用,这也是我的默认值,有时也是很有用的,我等一下会讲的。下面我开始表演了,我的舞台可以是IE(Internet Explorer),或者FF(Firefox),但是有些技巧我一定要在标准的舞台中,如FF中才能表出来做的,请注意看我的说明,不然你用IE是看不到效果的。

1.我不动声色(我的属性不设置的时候),即:float:none,或者样式中不写这一项时,网页中的元素将按照它们自身的出现方式排列,一般是靠边对齐,先出现的排在前边,下面运行框是DIV先出现,P后出现,所以P排在DIV后面,注意看DIV的右边还有很多空间,但是P的文字不会跟在它的右边去。看:

 提示:您可以先修改部分代码再运行
2.我向盒子发出float:left命令,此时盒子浮动到左边,虽然看起来我的位置与上面例子没有什么变化,但此时跟在我后面的文本可以环绕到浮动盒子的右边了,看下面:

 提示:您可以先修改部分代码再运行
3.我向盒子发出float:right命令,不难想象此时盒子浮动到右边,此时文本将会环绕到此盒子的左边,看下面:

 提示:您可以先修改部分代码再运行
哈哈,看我表演了几项是不是开始觉得有点烦了,那么简单无聊的,那下面就给你表演几项特别的,但愿你不是IE的崇拜者,因为下面效果你用IE是看不到效果的,请用像FF那样的标准浏览器来运行代码框或测试吧。

4.浮动对象有负边界的情况,这时浮动对象可能会漂浮到其所在父对象外边去,这有点像绝对定位的效果,但又与绝对定位不同,它还能影响它所在地方的文本流,请用标准浏览器FF看下面代码效果:

 提示:您可以先修改部分代码再运行
5.如果一个较宽的子盒子在一个较窄的父盒子中拥有浮属性,子盒子漂浮后不会影响到父盒子的宽度,子盒子超出父盒子的部分会越到父盒子外面,但越出父盒子外的部分不会引起外边文本流的移动,而会直接覆盖在外边文字上面的,请用标准浏览器FF看下面代码效果:

 提示:您可以先修改部分代码再运行
6.如果父盒子不设定高度或者高度为自动,而其子盒子设定了浮动,并且高度超过了父盒子,在标准浏览器中,父盒子高度是不能自适高度,但是这种高度自适应常是我们需要的,如何做到让高度自适应呢,常见的办法是在父级内,浮动子盒子后边加入以下代码:<div style="clear:both"></div>清除掉那个小盒子的浮动。请自行把代码中我注释部分消除注释再看效果,现在是没有自适应的情况,请用标准浏览器FF预览和测试代码效果:

 提示:您可以先修改部分代码再运行
7.下面这个例子很重要,可以说明浮动元素的很多特性,大家运行代码框后再手动调整浏览器窗口大小,看版面有什么变化,下面我给你解释常见的问题和技巧。

 提示:您可以先修改部分代码再运行
(1)在一个盒子内的浮动对像左右浮动时,它的左右边界不一定就会靠在父对象的内补白上或边框上,上面9个盒子都是左浮动的,但在窗口最大化的情况下,只有第一个盒子和最后一个盒子的左边界靠在父盒子左边内侧。
(2)浮动对象之间不会重叠。上面有讲到浮动对像越出外边去的情况,那么一个浮动盒子又会不会越到另一个浮动对象上面去呢,实质上它们是不会重叠的,即使用了负边界看起来像重叠在一起。
(3)并排的同一浮动方向的对像在一行中放不下时,可以自动换行。大家在浏览下面代码时,改变一下浏览器窗口,就会看到我所说的情况。
(4)浮动盒子在本文流中出现的位置会影响它的水平浮动位置,就像下面运行框效果,那些盒子并不是紧跟着一起出现的,之间有文本存在,所以结果造成所有等高的盒子并不是同一直线排列出现,而变成有一定的梯度。如果两个盒子之间文本流区块高度大于前边浮动元素高度时,紧接着的同一浮动方向的对象将会被自动换行显示。在下面实例中,如果调整浏览器窗口尽量小时,所有盒子可能会出现全部靠在父盒子左边的情况,因为缩小浏览器同时,盒子右边的文本流高度随之增高。

可见不要小看我浮动,熟练掌握我将会给你排版带来很多意想不到效果哦。

8.再讲一则注意事项,在开始时我不是有说过要给浮动对象设定一个宽度的,不然会有意想不到结果,即没有设定宽度而又没有内容的对象浮动后宽度会趋近于0。请大家自行修改下面代码我注释前边的宽(只能删其中一个),测试看看效果就知道怎么回事了。

 提示:您可以先修改部分代码再运行
二、下面我要请我的好伙伴clear出场给你们讲讲它的故事,有请。
大家好,我是clear,能见到如此多人捧场我感到无比的荣幸,虽然在各位网页设计工作中我的作用常常被忽略,但我也有些作用是没有人能替代的,下面我将讲几项我实用作用以激发大家对我的兴趣:
1.如果你想一段文本流两边可以出现浮动对像的话,你可以用clear:none,看下面效果,蓝色背景段落两边的盒子是浮动的哦。

 提示:您可以先修改部分代码再运行
2.如果你要为一个网页准备一个页脚区块,比如<div id=”footer”></div>,你在设计网页的时候,你想不管你前边怎么浮动排版而又不想这个页脚跟上去,让它一直保持在前边内容后边,而且还是换行独立显示的,那么给这个页脚区块样式加个clear:both吧。
3.我还可以快速清除网页中具有浮动属性的不同对像的浮动,如果有很多的话,我的作用更能发挥出来,当然你也可以一条一条样式去删掉浮动的样式,但我肯定这样没有我来的方便,下面效果中,没有清除浮动前是横排的,但是清除后变成纵排(举此例只为说明问题,不管这实例实不实用),请自己删掉我的注释部分进行前后对比。

 提示:您可以先修改部分代码再运行
好了,我的介绍到此完毕,各位还满意吗?有什么不满意可以提出来哦。你的意见就像一面镜子,它可以让我很清楚地发现自己的不足,然后改进它。

[ 本帖最后由 blankzheng 于 2007-4-1 17:39 编辑 ]
本帖最近评分记录
  • blank 威望 +3 不错,继续加油!帖子帮你合并了! 2007-4-1 17:35
这次的帖子比前两次更有深度了,有点研究精神,呵呵……不错,有进步!

如果对于里面IE和FF出现的不同加上点说明就更完美了 因为你不说明,很多朋友可能不理解为什么不同!

[ 本帖最后由 blankzheng 于 2007-4-1 18:06 编辑 ]
个人Blog:PlanABC   团队Blog:淘宝UED  专注Web前端技术!
引用:
原帖由 blankzheng 于 2007-4-1 18:02 发表
这次的帖子比前两次更有深度了,有点研究精神,呵呵……不错,有进步!

如果对于里面IE和FF出现的不同加上点说明就更完美了 因为你不说明,很多朋友可能不理解为什么不同!
这些问题我也不知道怎么回答,就像IE3像素Bug一样,没有什么好解释的,如果真要解释我只能这样说:
标准的页面是严格安照CSS规则重绘页面的,而像IE,特别是较低版本的,对标准支持不好,所以这是它对网页解释的一种偏差,不能把实际效果表达出来。而标准的浏览器,像FF就没有这个错误。 这种解释还满意吧!

TOP

认证您的手机,获得手机认证图标, 更多手机认证的好处
其实主要是让你说明主要是什么问题,不需要详细说明,可以链接链过去,这样文章的读者才会更连续性 加油!
个人Blog:PlanABC   团队Blog:淘宝UED  专注Web前端技术!
支持.学习ing.

TOP

好文章,做个记录。
saikey.com

TOP

LZ同学讲课太生动了,我认为已经把float讲的想的的透彻了,继续加油。
要是IE和firefox显示的效果都一样那就更好了

TOP

引用:
原帖由 261509559 于 2007-4-2 00:36 发表
LZ同学讲课太生动了,我认为已经把float讲的想的的透彻了,继续加油。
要是IE和firefox显示的效果都一样那就更好了
有些效果是无法做到IE和FF都一样的,因为我讲的是用浮动实现的,如果你要做到同样的效果但IE和FF都支持的话,你完全可以用相对或者绝对定位来做。又或者你等到IE出来个完全支持标准的浏览器再来看本文实现的效果。

TOP

写得很好喔,谢谢大侠!

TOP

精到,收藏之
jgwy-esnak

TOP

这个教程等好久了哦。。一直没搞懂Float....谢谢楼主写出这么好的教材。。
善用搜索,求人先自助

TOP

继续关注新作```

TOP

TOP

不错!!珍藏中!!

TOP

比如说第四个例子
要在ff下才能显示正常,那么我如何在ie下显示也是如此呢?
我不可能要用户用ff浏览吧

TOP

有空看看,现在在上班 或湖

有空看看,现在在上班 或湖

TOP

引用:
原帖由 zuozeyu 于 2007-4-23 10:08 发表
比如说第四个例子
要在ff下才能显示正常,那么我如何在ie下显示也是如此呢?
我不可能要用户用ff浏览吧
准确说法是此例要在支持标准的浏览器中才能正常显示,现在IE7已向标准靠近了。关于你想要这个效果,你完全可以用其它方法来做,用浮动方法来做,在不标准的浏览器中是不能把那效果显示出来的,因为它们不能正确解释CSS的标准表现!

TOP

关于clear有个地方没弄懂

关于clear  第一个小例子那儿, clear:none 这里
我试了下,在IE和firefox里,把 clear:none这句加上和去掉效果是一样的啊,它是不是默认的就是这样?

TOP

支持ING!~~~~

这篇文章让我学到很多东西啊!继续支持斑竹!

TOP

浮动一直是布局中的麻烦问题,现在看了文章算是有收获了

TOP

好,但优点难度啊!

TOP

不错 楼主辛苦了

TOP

看完了,有很深的理解 ,谢谢。

怎么没看到4?
兴之所致,任性而为!

TOP

推荐一个方法!也是我平时常用的一种方法:清除浮动对后面元素的影响。
哪里需要浮动的,只要在他的父元素加个class="wrapfix" ,这样就可以轻轻松松清除浮动对它后面元素的影响啦!这样省很多工夫哦!大家不妨试试!
代码如下:
.wrapfix:after{
       content: ".";
       display: block;
       height: 0;
       clear: both;
       visibility: hidden;
}
.wrapfix {display: inline-table;}/* Hides from IE-mac \*/* html .wrapfix {height: 1%;}.wrapfix {display: block;}

TOP

所谓标准不都是一步一步调出来的吗
在FF下可以用什么代替li
如果用li怎么控制它的高度
过去了就不要回头吧

TOP

全部看完了,受益非浅啊。~
兴之所致,任性而为!

TOP

这里的效果和下面的
  
http://www.blueidea.com/tech/web/2007/4579.asp

不一样!

TOP

经典啊,呵呵,在经典论坛泡泡,水平越泡约高啊

TOP

谢谢版主,俺终于搞明白了
自尊 自信

TOP

谢谢版主,俺终于搞明白了
自尊 自信

TOP