html + css 布局-对齐与居中

近段时间,由后端开发转到了前端开发,学了些html + css 布局的东西, 其中要说到居中的问题,居中分为水平居中和垂直居中.

水平居中

水平居中相对比较简单.有两种方法可以实现

文字水平居中

如果是一段文字需要水平居中的话,可以使用css 的text-align属性:取值有left/right/center, 分别代表左对齐,右对齐,居中对齐,如:

1
2
3
4
p {
/* 居中对齐 */
text-align:center
}

div居中对齐

div的居中对齐也好做,只需设置一个div的左右margin 为auto即可,如

1
2
3
4
div {
margin: 0 auto;
width: 500px;
}

div的宽度是必须要设置的,如果不设置div默认是占整行宽度.

垂直居中

垂直居中相对于水平居中来说会比较麻烦些, 总的来说有如下几种方法:

单行文字垂直居中

对于只有单行文字的内容, 需要将文字水平居中,可以使用line-height属性,将line-height属性设置成父容器的height值即可. 如果不设置文本的父容器高度,父容器的高度将会撑开到line-height的值.

1
2
3
4
5
6
/* css */
span {
line-height: 400px;
}
/* html */
<span>hello world</span>

文字hello world将在span里面居中对齐, 并且span的高度将撑开成400px.

垂直居中图片1

垂直居中某一张图片可以在图片的前面加上一个span元素,并设置span元素的样式如下, 即可使图片居中.如果还需要将图片水平居中,可以设置box的line-height为box的高度即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* css */
.box {
width: 500px;
height: 300px;
background-color: #aaaaaa;
}
.box span {
height: inherit;
display: inline-block;
vertical-align: middle;
}
.box img {
vertical-align: middle;
}

/* html */
<div class="box"><span></span><img src="hello.png" alt="hello"></div>

垂直居中图片2

设置父容器的line-height的值为其height的值,并且设置img的vertical-align的值为middle即可.

1
2
3
4
5
6
7
8
9
10
11
12
13
/* css */
.box {
width: 500px;
height: 300px;
line-height: 300px;
background-color: #aaaaaa;
}
.box img {
vertical-align: middle;
}

/* html */
<div class="box"><img src="hello.png" alt="hello"></div>

div在父容器中垂直居中

设置父容器相对定位, 子容器的css代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
.box {
position: relative;
width:400px;
height: 400px;
}
.sub {
width: 50%;
height: 200px;
overflow: auto; //内容高度超过容器高度显示滚动条
margin: auto;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
}

div在视区(屏幕)内垂直居中

如果想要一个一直在屏幕的正中间,则可以使用如下代码

1
2
3
4
5
6
7
8
9
10
11
12
.box {
width: 200px;
height: 200px;
overflow: auto;
margin: auto;
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
z-index: 999;
}

div在父容器居中高度自适应

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/* css */
.box {
position: relative;
width:400px;
height: 400px;
background-color: #dd00dd;
}
.sub {
background-color: #dddddd;
width: 50%;
height:auto;
overflow: auto;
margin: auto;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
display: table;
}
/* html */
<div class="box">
<div class="sub"></div>
</div>

div在父容器中垂直居中2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/* css */
.box {
width:400px;
height: 400px;
background-color: #dd00dd;
position:relative;
}
.sub {
background-color: #dddddd;
width: 300px;
height: 200px;
padding: 20px;
position: absolute;
top: 50%;
left: 50%;
margin-left: -170px; /* (width + padding)/2 */
margin-top: -120px; /* (height + padding)/2 */
}
/* html */
<div class="box">
<div class="sub"></div>
</div>

div在视区(屏幕)内垂直居中2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* css */
.box {
background-color: #dddddd;
width: 300px;
height: 200px;
padding: 20px;
position: absolute;
top: 50%;
left: 50%;
margin-left: -170px; /* (width + padding)/2 */
margin-top: -120px; /* (height + padding)/2 */
}
/* html */
<div class="box"></div>

div在视区(屏幕)内垂直居中3

利用css3的变形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* css */
.box {
background-color: #dddddd;
width: 50%;
height:200px;
margin: auto;
position: absolute;
top: 50%; left: 50%;
-webkit-transform: translate(-50%,-50%);
-ms-transform: translate(-50%,-50%);
transform: translate(-50%,-50%);
}
/* html */
<div class="box"></div>