前端开发过程中,经常遇到这样的布局“同一行的图片和文字都垂直居中”,如下图所示:
现将几种实现方法总结如下:
html代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<body>
<div class="line methodOne">
<img src="images/logo.png" alt="图片"/>
<span>我是文字</span>
</div>
<div class="line methodTwo">
<img src="images/logo.png" alt="图片"/>
<span>我是文字</span>
</div>
<div class="line methodThree">
<img src="images/logo.png" alt="图片"/>
<span>我是文字</span>
</div>
<div class="line methodFour">
<img src="images/logo.png" alt="图片"/>
<span>我是文字</span>
</div>
</body>
|
css代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
* { margin: 0;
padding: 0;
}body { padding: 0 10px;
}.line { font-size: 20px;
border-bottom: 1px solid #dddddd;
}.line img { width: 80px;
height: 80px;
border-radius: 50%;
margin-right: 20px;
} |
方法1:padding+line-height
|
1
2
3
4
5
6
7
8
|
.methodOne { padding: 20px 0;
}.methodOne span { line-height: 80px;
vertical-align: top;
} |
方法2:display:flex;+align-items:center;
|
1
2
3
4
5
|
.methodTwo { display: flex;
height: 120px;
align-items: center;
} |
注意:父级元素设置display:flex;后,子元素float失效。
方法3:padding+vertical-align:middle;
|
1
2
3
4
5
6
7
|
.methodThree { padding: 20px 0;
}.methodThree * { vertical-align: middle;
} |
方法4:line-height+vertical-align:middle;
|
1
2
3
4
5
6
7
|
.methodFour { height: 120px;
line-height: 120px;
}.methodFour *{ vertical-align: middle;
} |
方法5:使用 Flexbox 实现子元素的居中效果,只需三行代码:
@mixin center-children {
display: flex;
justify-content: center;
align-items: center;
}
由于 Flexbox 还是比较新的属性,那么添加上相关的浏览器前缀的话,会让它拥有更广泛的兼容性。
.parent {
@include center-children;
}
正如你料想的那样,就这么简单我们就实现了:
.parent {
display: flex;
justify-content: center;
align-items: center;
}