接下来是关于position、margin和float的点点滴滴。
CSS定位属性
1 2 3 4
| top —定义了一个定位元素的上外边距边界与其包含块上边界之间的偏移。 right —定义了定位元素右外边距边界与其包含块右边界之间的偏移。 left —定义了定位元素左外边距边界与其包含块左边界之间的偏移。 bottom —定义了定位元素下外边距边界与其包含块下边界之间的偏移。
|
CSS position 属性
我们可以选择 4 种不同类型的定位,这会影响元素框生成的方式。
1 2 3 4 5 6 7 8 9 10 11 12 13
| position属性值的含义: static 元素框正常生成。块级元素生成一个矩形框,作为文档流的一部分,行内元素则会创建一个或多个行框,置于其父元素中。 relative 元素框偏移某个距离。元素仍保持其未定位前的形状,它原本所占的空间仍保留。因此会导致它覆盖其它框。 absolute 元素框从文档流完全删除,并相对于其包含块定位。包含块可能是文档中的另一个元素或者是初始包含块。元素原先在正常文档流中所占的空间会关闭,就好像元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。 fixed 元素框的表现类似于将 position 设置为 absolute,不过其包含块是视窗本身。
|
提示:相对定位实际上被看作普通流定位模型的一部分,因为元素的位置相对于它在普通流中的位置。
使用margin属性来水平对齐
可通过将左和右外边距设置为“auto”,来对齐块元素。
注意:除非已经声明了!DOCTYPE,否则使用margin:auto在IE8以及更早的版本中是无效的。如果宽度是100%,则对齐没有效果。
使用position属性进行左和右对齐
1 2 3 4 5 6 7
| .right { position:absolute; right:0px; width:300px; background-color:#b0e0e6; }
|
注意:绝对定位元素会被从正常流中删除,并且能够交叠元素。
当使用 position 属性时,IE8 以及更早的版本存在一个问题。如果容器元素,在我们的案例中是<div class="container">
设置了指定的宽度,并且省略了 !DOCTYPE 声明,那么 IE8 以及更早的版本会在右侧增加 17px 的外边距。这似乎是为滚动条预留的空间。当使用 position 属性时,请始终设置 !DOCTYPE 声明。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| <!DOCTYPE html> <html> <head> <style> body { margin:0; padding:0; } .container { position:relative; width:100%; } .right { position:absolute; right:0px; width:300px; background-color:#b0e0e6; } </style> </head> <body> <div class="container"> <div class="right"> <p><b>注释:</b>当使用 position 属性进行对齐时,请始终包含 !DOCTYPE 声明!如果省略,则会在 IE 浏览器中产生奇怪的结果。</p> </div> </div> </body> </html>
|
使用float属性来进行左和右对齐
1 2 3 4 5 6
| .right { float:right; width:300px; background-color:#b0e0e6; }
|
当使用 float 属性时,IE8 以及更早的版本存在一个问题。如果省略 !DOCTYPE 声明,那么 IE8 以及更早的版本会在右侧增加 17px 的外边距。这似乎是为滚动条预留的空间。当使用 float 属性时,请始终设置 !DOCTYPE 声明: