首页
网页制作
网络编程
脚本专栏
数据库
网站运营
网络安全
平面设计
CMS教程
搜索
建站极客
网页制作
CSS
正文
CSS:闭合元素和浮动元素的差别
所属分类:
网页制作
/
CSS
阅读数: 181
收藏 0
赞 0
分享
提示:本文不是教程,而是对闭合浮动元素的方法在某个特定情况下的现象的讨论,涉及float、clear、overflow、:after等知识,新手勿入。
float属性在页面排版上非常有用,但是也带来很多问题。最常见的就是浮动元素的闭合问题。
如果一个没有设定高度的不浮动元素的子元素浮动,则该元素的高度不会包括浮动子元素的高度,而只会包含其内部不浮动元素的高度,因为浮动元素不属于常规流向,它脱离了文档流。因此如果要元素能够自动包含浮动子元素,则需要闭合浮动元素。
目前比较常用的有3种方法:
利用浮动子元素后的元素清除浮动(包括添加1个空的元素以清除浮动)。 使用:after伪元素,在元素最后插入清除。 为元素设定overflow属性除“visible”之外的值。
还有1个方法可以使元素自适应高度:
浮动元素,浮动的元素会包含浮动的后代元素。
下列代码,其显示如图1所示。
提示:所列代码只是关键代码,完整代码请查看示例页面。
CSS:
p,
div
{...}
{
margin
:
5px
;
}
.wrap
{...}
{
width
:
440px
;
margin
:
10px
;
clear
:
both
;
}
.div1,
.div2p
{...}
{
float
:
left
;
width
:
80px
;
margin
:
8px
;
display
:
inline
;
}
XHTML:
<
div
class
="wrap"
>
<
div
class
="div1"
>
div1,浮动
</
div
>
<
div
class
="div2"
>
<
p
class
="div2p"
>
div2内p1
</
p
>
<
p
class
="div2p"
>
div2内p2
</
p
>
<
p
class
="div2p3"
>
div2内p3,不浮动
</
p
>
</
div
>
<
div
class
="div3"
>
div3,不浮动
</
div
>
</
div
>
提示:截图是Firefox2.0(以下简称FF)中的效果,如无特殊声明,则表示在WindowsIE7.0(以下简称IE)、Opera9.2(以下简称Op)、Safari3.0(以下简称Sa)中效果相同。
图1:浮动元素与子元素浮动的元素
如果对.div2p增加CSS:
.div2p
{...}
{
......
clear
:
left
;
}
由于“clear:left”含义为:不允许本元素左边有浮动框,而div1也是浮动元素,因此,p1和p2下移到了div1的下面,如图2所示。
图2:不浮动的元素内的浮动子元素设定“clear:left”后的效果
而在IE中,整个div2都将下移到div1下,如图3所示。
图3:不浮动的元素内的浮动子元素设定“clear:left”后IE的显示
由图3可以发现,虽然在图1中IE正确地显示了溢出的元素,但是,对于出发了layout的wrap,IE仍旧会扩展最外层的高度,以容纳浮动元素。
闭合浮动元素方法1
此时,div2的高度只包括其内未浮动元素的高度,因此使用第1种方法闭合浮动元素,为浮动元素后面的元素p3设定clear属性:
.div2p3
{...}
{
clear
:
left
;
}
此时显示如图4所示,在IE中如图5所示。
图4:p3清除浮动后的效果
图5:p3清除浮动后IE内的效果
(啊!伟大的IE,居然多出来与div2的margin一样多的间隙。==b)
此时如果为div2增加左边距(原设定为margin:5px):
.div2
{...}
{
......
margin-left
:
120px
;
}
则显示如图6所示,在IE中如图7所示。
图6:增加左边距后的效果
图7:p增加左边距后IE内的效果
至此的效果,是左右2栏布局常用的方法,左栏固定宽度,右栏不设定宽度以求能自适应。
闭合浮动元素方法2
尝试方法2,利用:after清除浮动:
.div2:after
{...}
{
content
:
"."
;
display
:
block
;
height
:
0
;
clear
:
both
;
visibility
:
hidden
;
}
显示效果如图8所示。(IE不支持,不用试了。==b)
图8:使用:after清除浮动
可以看到div2内的p3没有清除浮动,位置仍在div2的顶端。
增加div2的左边距,显示如图9所示。
.div2
{...}
{
margin-left
:
120px
;
}
图9:增加div2的左边距
由此可见使用:after清除浮动,不适合于浮动元素后面还有不浮动元素的情况。
闭合浮动元素方法3
尝试方法3,使用overflow属性:
.div2
{...}
{
overflow
:
auto
;
height
:
100%
;
/**/
/*
针对ie6
*/
}
此时,最热闹的情况出现了:
图10:FF的效果
图11:Op和Sa的效果
图12:IE的效果(注:如果用IE6,效果也不一样,==|||)
首先,div2的宽度收缩到div1的右边了,也许这正好是期望的结果?
更热闹的在后面,增加div2的margin-left:
.div2
{...}
{
margin-left
:
120px
;
}
图13:FF的效果
图14:Op和Sa的效果
图15:IE的效果(注:如果用IE6,效果也不一样,==|||)
都是margin-left惹的祸,去掉margin-left:
.div2
{...}
{
margin-left
:
0
;
}
终于接近统一了。
图16:去掉margin-left的效果
图17:去掉margin-left在IE内的效果
由此可见,overflow还是有很大局限性的。
但是造成FF、Op和Sa的显示结果的原因又是什么呢?
浮动
div2浮动,浮动元素的高度会包含其内部的浮动元素。
这种方法的局限性就是,div2浮动后宽度会被压缩,因此必须给它一个宽度值,但是这样就无法自适应宽度。
.div2
{...}
{
float
:
left
;
}
.div3
{...}
{
clear
:
both
;
}
效果如图18所示。
图18:浮动div2
div2的浮动,还会造成wrap的高度问题,因此需要div3清除浮动。
由这个例子可以发现,由于div2的浮动,其内的p元素清除浮动,并没有受到div1的影响,因此,解决由于前2种方法中p1和p2下降到div1的高度之下的方法之一,可以将p1和p2外面套1个浮动的div,当然这可能影响到结构,还需要结合具体情况来决定。
更多精彩内容
其他人还在看
js 解决隐藏与显示div的相关问题
我的导航中就有一栏产品中心下面用隐藏个div然后鼠标放上去就显示出来,但是导航那一块div一直出不来,什么都没有,很是郁闷不知道是什么原因
评论 0
收藏 0
赞 0
分享
关于clearBoth在GOOGLE Chrome中的问题解决方法
下面这段CSS在IE中好好的,但在GOOGLE Chrome中总是不行,我调测了无数次。问题就出在 clearBoth 这个样式上,此问题如何解决,写下来详细介绍
评论 0
收藏 0
赞 0
分享
用css margin去掉横排图片之间的间距
HTM,CSS,怎样去掉横排图片之间的间距,是我们的一大头疼问题,于是本人搜集整理一下,晒出来和大家分享,希望可以帮助你们
评论 0
收藏 0
赞 0
分享
关于li:hover的怎么清除浮动问题实现代码
当鼠标移动上去时,周围显示一个方框,但是后面的会向后移动,如何才能使得当鼠标移上去时后面的li不浮动
评论 0
收藏 0
赞 0
分享
ie6不支持两个连续并列class类名怎么解决
在网页布局中会使用到两个连续的class,但唯独ie6不支持,很郁闷,于是搜索整理下,晒出来和大家分享
评论 0
收藏 0
赞 0
分享
如何在class内写xsl标记注意事项
想要在class中写一个xsl标记,想要知道应该如何来写出正确的代码语句,请详看本文
评论 0
收藏 0
赞 0
分享
ie10 css hack 条件注释等兼容方式整理
ie10已经上线一段时间了,相信已经有一部分前端潮人体验过了,截至到现在,在ie6到ie9的浏览器各种各样的古怪行为,开发人员不得不使用条件注释,有条件的类,和其他特定于IE的css hack来解决
评论 0
收藏 0
赞 0
分享
IE6双倍边距 IE6浏览器会出现双倍边距解决方法
所谓的IE6双倍边距就是指当元素有float属性,又有margin属性时,在IE6下面显示的margin的值是设置值的两倍,这个问题从有css技术时就已经诞生,本文将介绍详细解决方法,需要的朋友可以参考下
评论 0
收藏 0
赞 0
分享
css 网页背景图片 怎样用CSS实现大背景网页效果
在网页设计制作中经常会遇到这样的问题:用图片做背景时,由于显示器分辨率太大或者图片尺寸太小,在页面的两边或者下部了没有背景图片,使页面变的很僵硬,于是搜集整理一些,晒出来和大家分享
评论 0
收藏 0
赞 0
分享
CSS字体中英文名称对照表 CSS常用中文字体英文名称对照表
在CSS文件中,我们常看到有些字体名称变成了乱码,这是由于编写者将中文字体的名字直接写成了中文,为了避免这种状况出现,在CSS文件中使用中文字体时,最好使用中文字体的英文名称,需要的朋友可以注意下
评论 0
收藏 0
赞 0
分享
查看更多
网络赚钱
更多
90后网络爆红美女卖"毒面膜" 年收入超七位数
网赚之谈:做什么网站才能让我们草根站长有个出路
网赚之谈:如何用最少的钱做最大化的网站推广
教育培训类网站的盈利模式
企业网站通过流量变现有哪些关键的环节需要注意?
在校大学生利用网络可以做什么?在校大学生利用网络赚钱方式介绍
站长故事
更多
有钱就是任性 2014年科技界大佬十大惊人语录
苹果发布三款新品:一个丑+另一个丑+一个死贵?
揭晓互联网三大巨头(百度,腾讯,阿里巴巴)和草根站长的往来
比较适合个人站长的5种类型网站:定位 坚持 收益
我是怎么赚到人生的第一个百万的
运营网站需要修炼三层内功 很多人都维持在第一层上