请选择 进入手机版 | 继续访问电脑版
收藏本站腾讯微博新浪微博
点点网模板设计大赛 phpchina

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 用悬赏 三天解决问题 解决访问速度慢 论坛支持农历生日 - 给官方提建议

论坛活动及任务 归纳网站最新活动 地图任务 邮件更新任务:保护帐号安全

积分换实物,来参加蓝色理想积分兑换吧! 联系招聘客服 蓝色理想帮你找工作! 万元奖励等你拿——点点网模板设计大赛

查看: 39782|回复: 35

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

webflash 楼主

笑你废刀

中级会员 手机认证 

帖子
82
体力
203
威望
18
居住地
广东省 广州市
发表于 2007-4-1 17:08:27 |显示全部楼层

彻底弄懂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 编辑 ]
已有 1 人评分威望 收起 理由
blank + 3 不错,继续加油!帖子帮你合并了!

总评分: 威望 + 3   查看全部评分

西部数码顶级域名注册商39元抢注!
blank 

怿飞

荣誉管理

帖子
2375
体力
12545
威望
125
居住地
浙江省 杭州市
发表于 2007-4-1 18:02:11 |显示全部楼层
这次的帖子比前两次更有深度了,有点研究精神,呵呵……不错,有进步!

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

[ 本帖最后由 blankzheng 于 2007-4-1 18:06 编辑 ]
个人Blog:PlanABC   团队Blog:淘宝UED  专注Web前端技术!
租服务器,上51IDC | [长沙]招聘:PHP经理10K/WEB前端6K/PHP开发6K

使用道具 举报

webflash 楼主

笑你废刀

中级会员 手机认证 

帖子
82
体力
203
威望
18
居住地
广东省 广州市
发表于 2007-4-1 18:15:19 |显示全部楼层
原帖由 blankzheng 于 2007-4-1 18:02 发表
这次的帖子比前两次更有深度了,有点研究精神,呵呵……不错,有进步!

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


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

使用道具 举报

blank 

怿飞

荣誉管理

帖子
2375
体力
12545
威望
125
居住地
浙江省 杭州市
发表于 2007-4-1 18:22:21 |显示全部楼层
其实主要是让你说明主要是什么问题,不需要详细说明,可以链接链过去,这样文章的读者才会更连续性 加油!
个人Blog:PlanABC   团队Blog:淘宝UED  专注Web前端技术!

使用道具 举报

aivv 
帖子
66
体力
135
威望
0
发表于 2007-4-1 19:32:40 |显示全部楼层
支持.学习ing.

使用道具 举报

随枫飘月

银牌会员

帖子
753
体力
1698
威望
4
居住地
山东省 济南市
发表于 2007-4-2 00:36:21 |显示全部楼层
LZ同学讲课太生动了,我认为已经把float讲的想的的透彻了,继续加油。
要是IE和firefox显示的效果都一样那就更好了

使用道具 举报

webflash 楼主

笑你废刀

中级会员 手机认证 

帖子
82
体力
203
威望
18
居住地
广东省 广州市
发表于 2007-4-2 15:31:31 |显示全部楼层
原帖由 261509559 于 2007-4-2 00:36 发表
LZ同学讲课太生动了,我认为已经把float讲的想的的透彻了,继续加油。
要是IE和firefox显示的效果都一样那就更好了


有些效果是无法做到IE和FF都一样的,因为我讲的是用浮动实现的,如果你要做到同样的效果但IE和FF都支持的话,你完全可以用相对或者绝对定位来做。又或者你等到IE出来个完全支持标准的浏览器再来看本文实现的效果。

使用道具 举报

草根

银牌会员

帖子
4622
体力
2430
威望
6
居住地
辽宁省 沈阳市
发表于 2007-4-3 11:41:01 |显示全部楼层
继续关注新作```

使用道具 举报

webflash 楼主

笑你废刀

中级会员 手机认证 

帖子
82
体力
203
威望
18
居住地
广东省 广州市
发表于 2007-4-4 12:27:15 |显示全部楼层

使用道具 举报

有点累

银牌会员 手机认证 

帖子
422
体力
1440
威望
0
居住地
湖北省 武汉市
发表于 2007-4-23 10:08:45 |显示全部楼层
比如说第四个例子
要在ff下才能显示正常,那么我如何在ie下显示也是如此呢?
我不可能要用户用ff浏览吧

使用道具 举报

webflash 楼主

笑你废刀

中级会员 手机认证 

帖子
82
体力
203
威望
18
居住地
广东省 广州市
发表于 2007-4-28 21:26:05 |显示全部楼层
原帖由 zuozeyu 于 2007-4-23 10:08 发表
比如说第四个例子
要在ff下才能显示正常,那么我如何在ie下显示也是如此呢?
我不可能要用户用ff浏览吧

准确说法是此例要在支持标准的浏览器中才能正常显示,现在IE7已向标准靠近了。关于你想要这个效果,你完全可以用其它方法来做,用浮动方法来做,在不标准的浏览器中是不能把那效果显示出来的,因为它们不能正确解释CSS的标准表现!

使用道具 举报

帖子
19
体力
105
威望
0
发表于 2007-5-14 12:13:46 |显示全部楼层

关于clear有个地方没弄懂

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

使用道具 举报

蓝色自由

初级会员

帖子
89
体力
313
威望
0
发表于 2007-5-31 12:00:44 |显示全部楼层
看完了,有很深的理解 ,谢谢。

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

使用道具 举报

帖子
50
体力
115
威望
0
发表于 2007-5-31 15:19:06 |显示全部楼层
推荐一个方法!也是我平时常用的一种方法:清除浮动对后面元素的影响。
哪里需要浮动的,只要在他的父元素加个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;}

使用道具 举报

上唇贴下唇

初级会员 手机认证 

帖子
218
体力
433
威望
0
居住地
广东省 广州市
发表于 2007-5-31 15:46:46 |显示全部楼层
所谓标准不都是一步一步调出来的吗
在FF下可以用什么代替li
如果用li怎么控制它的高度
过去了就不要回头吧

使用道具 举报

欲上九天揽明月

银牌会员

帖子
1055
体力
1094
威望
0
发表于 2007-6-1 16:50:34 |显示全部楼层
这里的效果和下面的
  
http://www.blueidea.com/tech/web/2007/4579.asp

不一样!

使用道具 举报

帖子
618
体力
592
威望
0
发表于 2007-7-4 10:59:44 |显示全部楼层
我感觉有些地方楼主加了<p>,反而效果更不形象了。。。

使用道具 举报

joymv 

貌似没几年青春

银牌会员

帖子
493
体力
1353
威望
0
居住地
江西省 南昌市
发表于 2007-7-5 07:17:55 |显示全部楼层
29,30同样的内容不要发两次..

使用道具 举报

宝儿

荣誉管理

帖子
1600
体力
11357
威望
43
发表于 2007-8-15 02:54:17 |显示全部楼层
原帖由 webflash 于 2007-4-1 17:08 发表

5.如果一个较宽的子盒子在一个较窄的父盒子中拥有浮属性,子盒子漂浮后不会影响到父盒子的宽度,子盒子超出父盒子的部分会越到父盒子外面,但越出父盒子外的部分不会引起外边文本流的移动,而会直接覆盖在外边文字上面的……

(2)浮动对象之间不会重叠。上面有讲到浮动对像越出外边去的情况,那么一个浮动盒子又会不会越到另一个浮动对象上面去呢,实质上它们是不会重叠的,即使用了负边界看起来像重叠在一起。


说法欠妥,依旧是“层叠”和“堆叠”概念没有澄清引起的。

另外:
清除浮动的原理几乎没有提及,而这又往往与清除浮动元素相关的margin重叠紧密相关(否则无法理解与之相关的margin重叠现象)。

使用道具 举报

webflash 楼主

笑你废刀

中级会员 手机认证 

帖子
82
体力
203
威望
18
居住地
广东省 广州市
发表于 2007-8-15 17:19:35 |显示全部楼层

修正说法!

原帖由 zbm2001z 于 2007-8-15 02:54 发表

[quote]原帖由 webflash 于 2007-4-1 17:08 发表

5.如果一个较宽的子盒子在一个较窄的父盒子中拥有浮属性,子盒子漂浮后不会影响到父盒子的宽度,子盒子超出父盒子的部分会越到父盒子外面,但越出父盒子外的部分不会引起外边文本流的移动,而会直接覆盖在外边文字上面的……

(2)浮动对象之间不会重叠。上面有讲到浮动对像越出外边去的情况,那么一个浮动盒子又会不会越到另一个浮动对象上面去呢,实质上它们是不会重叠的,即使用了负边界看起来像重叠在一起。


说法欠妥,依旧是“层叠”和“堆叠”概念没有澄清引起的。

另外:
清除浮动的原理几乎没有提及,而这又往往与清除浮动元素相关的margin重叠紧密相关(否则无法理解与之相关的margin重叠现象)。 [/quote]

请用FF浏览器运行下面代码,并参阅代码后再看后面新的分析!

 提示:您可以先修改部分代码再运行



同样具有浮动属性的子级,不和父级一同影响和父级同在一级的文本流。在此实例中,红色的字只浮动在蓝色盒子的边界外,而不会是浮动在蓝色和绿色盒子相交(联想两个盒子相加后有点像手榴弹)后的边界外。在此实例中,蓝色盒子box与红字P处在同一级,它们都没有指定position和z-index属性,它们的堆叠关系将由它们在文档中出现的顺序决定,后出现的堆叠在前出现的上面,p堆叠box之上,而绿色盒子box2在box内,是box的子级,它的层级不会逾越其父级元素box,所以最终看到的效果是红色字覆盖在绿色盒子的黑色字之上。晕,好像有点离题,主要讲到定位去了...

清除浮动或者叫闭合浮动的元素的方法适用在自适应高度,即没有指定高度,或者高度设为自动的父级元素高度可以随子级内容高度变化而变化。

使用道具 举报

webflash 楼主

笑你废刀

中级会员 手机认证 

帖子
82
体力
203
威望
18
居住地
广东省 广州市
发表于 2007-8-15 17:22:50 |显示全部楼层
原帖由 kuner1129 于 2007-5-14 12:13 发表
关于clear  第一个小例子那儿, clear:none 这里
我试了下,在IE和firefox里,把 clear:none这句加上和去掉效果是一样的啊,它是不是默认的就是这样?

1.我不动声色(我的属性不设置的时候),即:float:none,或者样式中不写这一项时,网页中的元素将按照它们自身的出现方式排列,一般是靠边对齐,先出现的排在前边...

没错,clear:none;是浏览器默认方法。

原帖由 woxindead 于 2007-5-31 15:46 发表
所谓标准不都是一步一步调出来的吗
在FF下可以用什么代替li
如果用li怎么控制它的高度


1.XHTML的标签是不可代替的,不同标签有它的语义。就像P,它指的是段落,除了P还有什么标签能很直接的说明内容是段落?尽管你可以用DIV做出个类似段落的表现来,这样都是不科学的。
2.高度可以用行高(line-height)和元素高度(height)直接指定,值得注意的是用行高(line-height)需给盒子指定内容与字体大小(font-size),不然。。。自己试试看吧。。。

使用道具 举报

宝儿

荣誉管理

帖子
1600
体力
11357
威望
43
发表于 2007-8-15 19:11:32 |显示全部楼层
首先理解“层叠”和“堆叠”概念是必要的。

……子盒子超出父盒子的部分会越到父盒子外面,但越出父盒子外的部分不会引起外边文本流的移动,而会直接覆盖在外边文字上面的……——不是覆盖

p堆叠box2之上——这里也不存在堆叠关系

这些都是是“层叠”关系,即:这些盒子本身不相互对彼此包含的行内元素和置换元素产生覆盖,而仅仅是它们所包含的行内元素和置换元素之间依照常规流次序互相交叠、覆盖(也就是37#楼的测试结果)。


这也是在这篇彻底弄懂CSS盒子模式四(绝对定位和相对定位)中,需要澄清的这两个概念。

连带堆叠(FF、OPERA、IE7亦可测):

 提示:您可以先修改部分代码再运行



局部堆叠:

 提示:您可以先修改部分代码再运行


[ 本帖最后由 zbm2001z 于 2007-8-15 19:23 编辑 ]

使用道具 举报

webflash 楼主

笑你废刀

中级会员 手机认证 

帖子
82
体力
203
威望
18
居住地
广东省 广州市
发表于 2007-8-16 11:19:17 |显示全部楼层
原帖由 zbm2001z 于 2007-8-15 19:11 发表
首先理解“层叠”和“堆叠”概念是必要的。

……子盒子超出父盒子的部分会越到父盒子外面,但越出父盒子外的部分不会引起外边文本流的移动,而会直接覆盖在外边文字上面的……——不是覆盖

p堆叠box2之上 ...


强烈要求宝儿出个教程,详细说一下“层叠”和“堆叠”概念与关系,似乎“堆叠”概念较少听,相信不少网友也想学习一下,期待学习...

使用道具 举报

帖子
81
体力
185
威望
0
居住地
浙江省 温州市
发表于 2007-10-17 17:57:09 |显示全部楼层
float的第6个例子和clear的第3个例子我在ie7下都试不出效果来。。。orz...
教程真强大,学到了

使用道具 举报

帖子
91
体力
272
威望
0
发表于 2007-12-7 14:53:39 |显示全部楼层
最后一个没看明白
body div {clear:both;}是写在最前面的,可是按着优先极的原则它应该被下面的clear:left;所附盖,怎么会没有呢?

使用道具 举报

帖子
91
体力
272
威望
0
发表于 2007-12-7 14:59:32 |显示全部楼层
clear的第三个例子没搞明白,
body div {clear:both;}这个是放在第一行的,按照原则它会被后面的clear:left;所覆盖,为什么没有呢?

使用道具 举报

帖子
19
体力
51
威望
0
发表于 2007-12-17 11:52:34 |显示全部楼层
楼上的看错了,是float:left;不是clear:left

使用道具 举报

帖子
6
体力
24
威望
0
发表于 2007-12-22 14:15:32 |显示全部楼层
我想问楼主浮动的问题。在有些网页里看到:有两个层,一个浮动到左边,一个浮动到右边,浮动到右边的设置了一个很宽的margin,而浮动到左边的那个层却可以放置在了那个margin之上,这是为什么呢?

使用道具 举报

帖子
409
体力
1116
威望
2
居住地
广东省 广州市
发表于 2008-2-22 15:31:17 |显示全部楼层
很清楚明了 可还有一点我想问下 为什么浮动可以把两个层上下间的空白去掉呢?
例如:
<p></p>
<p></p>
两个层间有空白 如果加上float:left那就会紧靠了(为什么两个层间会有空白)、
我写css的时候总喜欢加上*{margin:0;padding:0} 但P之间还是会有个空白 一定要加上float

使用道具 举报

c2j3y4 

尘语

高级会员

帖子
262
体力
859
威望
0
居住地
四川省 成都市
发表于 2008-3-15 10:30:12 |显示全部楼层
最后的那个不太明白
JS菜鸟努力

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|安久科技提供CDN|blueidea.com ( 京ICP备05002321号 )  

GMT+8, 2012-2-13 11:10 , Processed in 0.203521 second(s), 9 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部