CSS之position-margin-float

接下来是关于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 声明: