首页 >web前端 >html教程 >关于css设置float后的div块碰撞问题_html/css_WEB-ITnose

关于css设置float后的div块碰撞问题_html/css_WEB-ITnose

WBOY
WBOY原创
2016-06-24 11:56:591133浏览

<!doctype html><html>	<head>		<meta charset="gb2312"/>		<title></title>		<style type="text/css">            * {                margin:0;padding:0;            }            #dv1 {                                border: 1px solid red;                width: 400px;                height: 300px;            }            #dv2 {                /*display:inline;  dv3加浮动,dv2不会被挤开,是因为dv3只是停留在它那一行,没有影响到文件流,但是为什么把dv2设置成行级元素就会被下面的dv3挤开呢??*/                float:left;                width: 200px;                height: 200px;                border: 1px solid green;            }            #dv3 {                               width: 400px;                height: 100px;                border: 1px solid blue;                               /*position:absolute;*/            }		</style>		<script type="text/javascript">					</script>	</head>	<body style="font-size:20px">        <div id="dv1">            我是dv1中的文本        </div><div id="dv2">我是dv2中的文本</div><div id="dv3">我是dv3中的文本</div>	</body></html>


1、如果给dv2设置float,是不会挤动上方的div的,但是下方的div却会挤到上面来,这是为什么呢?

2、我老师说下面的div挤上来是因为float之后的dv2会浮到前面来,也就是不跟dv3在同一个平面了,所以留下一个空的位置,下方的dv3就顶到了这个空位上,这个说法正确吗?

3、如果是这样的话,那dv2已经浮到了前面来,那么跟dv1也不在一个平面了,为什么不会浮动到最左上角呢?都不在一个平面了为什么会被上面的dv1顶住上不去呢?

4、另外如果把dv1设置display:inline,设置为行内元素,dv2又会挤到最左上角,并且把dv1挤到右侧,按我老师的说法,既然都不在一个平面上,为什么dv1会被dv2挤开呢?

求大牛们解答,谢谢!!!


回复讨论(解决方案)

1.前面的div不影响,只是它自己浮动起来后影响后面的div。你可以看成排队,前面一个人到上一层空间去了,后面的人就可以占有她位置。
2.你老师说的对
3.因为dv1是块级元素(默认display是block)。当然dv2是飘不过去了。 block英文是障碍物的意思,很明了了吧
4.“dv1设置display:inline” 就将dv1由块级元素转变成了内联元素,内联元素是不占空间的。所以dv2就可以飘过去了。

你可以看看下面这个帖子的第6和22课。
http://bbs.csdn.net/topics/390648164

百度一下:内联元素与块级元素的区别




具体看看http://bbs.csdn.net/topics/390648164 这个里面的第六课











谢谢,基本明白了,问下你这个3D图是怎么弄出来的?自己画的吗?



谢谢,基本明白了,问下你这个3D图是怎么弄出来的?自己画的吗?



用cdr画的,熟悉的话很简单。

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn