走在路上HTML+CSS移动WEB开发

CSS—浮动(内容多图,建议wifi下打开)

2014-11-20  本文已影响971人  Miss____Du

浮动是一个很有用的属性,对于网页布局,特殊效果的实现都很有用。

为div1设置 float:left之后
div为块级元素,所以每次新建都会另起一行。我们想象一下,这些未设置浮动的div盒子是在一个文档流内(假想一个平面内),当设置div1为左浮动后,他就在另一个高于原文档流的文档流内(假想,在高于原来平面的一个平面内),但是div1已经在最左侧,所以左浮动,对于他没有表现上的改变,div2的改变才是需要关注的,这么复杂的原理,浏览器肯定也会出现兼容性的问题。
IE7(包括IE7以前) 现代浏览器及IE7以后

【个人情绪】为什么一提到兼容性,IE6.7就出来。。因为那几年,IE懈怠了,以为自己唯我独尊,所以不更新内核,渲染出什么来了??!!
明显,IE6、7是不按照我上面写的浮动机制渲染的,IE7以后及现代浏览器,都是按照我上面写的浮动机制来的。
div1脱离文档流,div2占据div1原有文档流的位置。
细心一下,可以发现,div2上的文本内容被div1挤下去了,对于这种显现,我假象了一下,文本内容与文本内容的父元素不是在一个文档流内,而是高于父元素的文档流,这样就可以看到文本div2与浮动的div1在一个文档流内。

div1与div2分别设置左浮动后的效果
div1与div2均设置左浮动后,二者就在一个文档流内,所以就一个接着一个排着了。
div1左浮动,div2右浮动
【11月22日补充】
初始
将第二个设为浮动后,第三个在原来第二个的位置
可见,元素div2设置浮动后,并没有跑到div1的地方,是我以前误以为设置浮动后,就会浮动于另一层,div2应该也可以浮动到div1的上面,其实不是,只是浮动到他所在的这一行的最左面。 效果
上图是参照上面的代码,最后生成的效果,div1与div2在box内分别左浮动与右浮动,box分别设置了宽度与高度,并且作了居中处理。div3也可以正常的在div1与div2之下。是我们希望的样子。
但是下图是在这样的代码下的效果
<style type="text/css">
#box{
border: 5px solid green;
}
#qq{
height: 100px;
width: 100px;
background: red;
float: left;
}
#aa{
height: 100px;
width: 100px;
background: blue;
float: right;
        }
        #gg{
            height: 50px;
            width: 205px;
            background: yellow; 
        }
    </style>
效果

由于div1与div2均设置浮动,脱离文档流后,div3占据了他们原来的位置。
父元素box没有设置宽度,所以与body同宽,横跨了整个页面。因为里面有内容div3所以其高度同div3的高度。这也是未采取任何拯救措施的样子。

现在,就来拯救一下,网页布局

第一步、去除浮动
#gg{clear: both;}//both:为左右浮动都去。同理可以去除左浮动left,右浮动right

效果
发现去除掉div1与div2的浮动后,div3则排在了div1与div2那一行的下面。而且外层div(即box)也将高度扩大了。
第二步、设置外层div的宽度
#box{width: 205px;}
效果
发现已经初步达到,我们预期的效果。也证实了,子元素浮动的边界是父元素。
第三步、居中
text-line
body标签内进行text-align=center只会使body内所有有文本的盒子呢,文本内容居中。所以达不到,我们想要的效果。
效果
margin
是盒子的外边界,关于css盒子的概念,我会另写一篇的。
#box{margin: 0 auto;}//前提设置了宽度width
效果
上一篇下一篇

猜你喜欢

热点阅读