伟大的塌陷

大家都用过css中的float属性哈。不知道css的float?!!那就别看了肯定会浪费你的时间,还是做点你喜欢做的事情吧。

昨天写前台代码的时候发现了一个很诡异的现象:

顺便把代码(精简过的模型)贴出来

html部分

<!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">
<head>
    <title></title>
    <link href="StyleSheet1.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="main">
<div id="left">

</div>

<div id="right">
</div>
</div>
<div id="footer">
</div>
</body>
</html>

css部分

#main
{
    width:950px;
    margin:10px auto 0;
    clear:both;
    text-align:left;
}
#left

{
    width:300px;
    height:300px;
    float:left;
    margin-right:10px;
    background-color:Blue;
}
#right
{
    border:1px;
    height:300px;
    width:300px;
    float:left;
    margin-bottom:5px;
    background-color:Blue;
}
#footer
{
    height:200px;
    width:100%;
    background-color:Red;
}

本来在页面最下面的div块跑到了导航条的下面,当初有点不可思议。这到底是肿么了呢??!!!当初有点感冒一看这样就烦了,真是诡异。

昨天晚上的事一直放心不下,今天起来就扮演起道士的角色出来伏魔。我仔细看了一下我的html 代码的结构然后又瞅了瞅我的css。我发现了我原来一直没有注意到的问题就是css中浮动的塌陷问题。然后我在id为main的div属性中加了一个heigh属性。问题就解决了。如下图所示:当然我这是解决这个问题的一种方法。下面会详细介绍怎么样解决浮动塌陷的问题。

既然提到了css中浮动的塌陷那就聊聊它是到底怎么回事吧。

使用浮动(float)的一个比较疑惑的事情是他们会影响包含他们的父元素的。如果父元素只包含浮动元素,且父元素未设置高度和宽度的时候。那么它的高度就会塌缩为零。如果父元素不包含任何的可见背景,这个问题会很难被注意到,但是这是一个很重要的问题。在这里我们可以称为“塌陷”。如上面遇到的问题。

解决上面的问题有以下四种方式:

1.在使用float元素的父元素结束前加一个高为0宽为0且有clear:both样式的div

2.在使用float元素的父元素添加overflow:hidden

3 .使用after伪对象清除浮动

第四种就是我刚才用的那种很无厘头的方式,有一定的局限性。建议大家用上面的那三种方式。

希望对大家有所帮助。说的有不对的地方,欢迎拍砖。

posted @ 2012-04-01 13:21  programming lover  阅读(1327)  评论(1)    收藏  举报