css 关于布局

一般来说,css布局有好几种,我们来看下比较常见的 左右布局 和 左中右布局。

左右布局

例如相对固定的,给出了百分比,用 float:left 。(注意用了float,需要在其父元素加上 clear:both)。

固定布局

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
29
30
31
32
33
34
35
36
37
38
39
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>布局</title>
<style type="text/css">
.clearfix::after{
content: "";
display: block;
clear: both;
}
.box{
border: 10px solid red;
width: 800px;
height: 500px;
}
.left,
.right{
float: left;
}
.left{
width: 30%;
height: 100%;
background: #ddd;
}
.right{
width: 70%;
height: 100%;
background: pink;
}
</style>
</head>
<body>
<div class="box clearfix">
<div class="left">左边div 30%</div>
<div class="right">右边div 70%</div>
</div>
</body>
</html>

左边固定宽度,右边自适应宽度,那么右侧的宽度由其内部的文档流决定。

左侧 DIV 设置 float 属性为 left,右侧 DIV 设置 margin-left 属性等于或大于左侧 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
25
26
27
28
29
30
31
32
33
34
35
36
37
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>布局</title>
<style type="text/css">
.clearfix::after{
content: "";
display: block;
clear: both;
}
.box{
border: 10px solid red;
width: 800px;
height: 500px;
}
.left{
float: left;
width: 300px;
height: 100%;
background: #ddd;
}
.right{
border: 1px solid blue;
margin-left: 310px;
height: 100%;
background: pink;
}
</style>
</head>
<body>
<div class="box clearfix">
<div class="left">左边div 300px</div>
<div class="right">右边div 自适应</div>
</div>
</body>
</html>

左中右布局(中间均为自适应)

一般如下图(float + margin

左中右布局(float + margin)

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>布局</title>
<style type="text/css">
.clearfix::after{
content: "";
display: block;
clear: both;
}
.box{
border: 10px solid #000;
width: 1000px;
height: 500px;
}
.header{
width:100%;
height: 100px;
background: yellow;
}
.main{
width: 100%;
height: 300px;
}
.left{
float: left;
width: 200px;
height: 100%;
background: #ddd;
}
.right{
float: right;
width: 200px;
height: 100%;
background: pink;
}
.center{
margin: 0 200px;
height: 100%;
background: red;
}
.footer{
width: 100%;
height: 100px;
background: green;
}
</style>
</head>
<body>
<div class="box">
<div class="header">header</div>
<div class="main clearfix">
<div class="left">left</div>
<div class="right">right</div>
<div class="center">center</div>
</div>
<div class="footer">footer</div>
</div>
</body>
</html>

注意:center是放在最后一个div

还有(float + position

左中右布局(float + position)

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>布局</title>
<style type="text/css">
.box{
border: 10px solid #000;
width: 1000px;
height: 500px;
}
.header{
width:100%;
height: 100px;
background: yellow;
}
.main{
position: relative;
width: 100%;
height: 300px;
}
.left{
float: left;
width: 200px;
height: 100%;
background: #ddd;
}
.center{
position: absolute;
left: 200px;
right: 200px;
height: 100%;
background: red;
}
.right{
float: right;
width: 200px;
height: 100%;
background: pink;
}
.footer{
width: 100%;
height: 100px;
background: green;
}
</style>
</head>
<body>
<div class="box">
<div class="header">header</div>
<div class="main">
<div class="left">left
<p>float:left</p>
</div>
<div class="center">center
position:absolute;
left:200px;
right:200px;
</div>
<div class="right">right
<p>float:right</p>
</div>
</div>
<div class="footer">footer</div>
</div>
</body>
</html>

水平居中和垂直居中

水平居中

情况如下

1、行内元素

将行内元素,包裹在一个 块级元素 的父级,再在设置 父级 text-algin:center

1
2
3
.parent{
text-algin:center;
}

2、块级元素

1
2
3
div{
margin: 0 auto;
}

3、多个块级元素

将该元素设置为 display: inline-block,并且将其 父级 设置text-algin:center

1
2
3
4
5
6
7
8
div{
display: inline-block;
vertical-aligin: top; /*删除底部空隙*/
}
.parent{
text-algin:center;
margin: 0 auto; /*左右居中*/
}

4、一行行内元素

将该元素的高度与其 父级 的高度设置一样。

1
2
3
4
5
6
7
.parent{
height: 100px;
}
a{
height: 100px;
line-height: 100px;
}

5、多行行内元素

将其 父级 设置display: table-cell,vertical-aligin: middle

1
2
3
4
5
6
.parent {
width: 100px;
height: 100px;
display: table-cell;
vertical-align:middle;
}

垂直居中

1、有 高度 和 宽度(width:100px;height:100pxl;)。

1
2
3
4
5
6
7
8
div{
position: absolute;
margin: aut0;
top: 0;
left: 0;
bottom: 0;
right: 0;
}

2、有 高度 和 宽度(width:100px;height:100pxl;)。

1
2
3
4
5
6
7
8
div{
position: absolute;
margin: aut0;
top: 50%;
left: 50%;
margin-top: -50px; /* 设置margin-left / margin-top 为自身高度的一半 */
margin-left: -50px;
}

3、未知 高度 和 宽度。

1
2
3
4
5
6
div{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
}

原文