xiaozhu007

前端开发过程中,经常遇到这样的布局“同一行的图片和文字都垂直居中”,如下图所示:

Screenshot.png

现将几种实现方法总结如下:

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
* {
    margin0;
    padding0;
}
 
body {
    padding0 10px;
}
 
.line {
    font-size20px;
    border-bottom1px solid #dddddd;
}
 
.line img {
    width80px;
    height80px;
    border-radius: 50%;
    margin-right20px;
}

方法1:padding+line-height

1
2
3
4
5
6
7
8
.methodOne {
    padding20px 0;
}
 
.methodOne span {
    line-height80px;
    vertical-aligntop;
}

方法2:display:flex;+align-items:center;

1
2
3
4
5
.methodTwo {
    display: flex;
    height120px;
    align-items: center;
}

注意:父级元素设置display:flex;后,子元素float失效。

方法3:padding+vertical-align:middle;

1
2
3
4
5
6
7
.methodThree {
    padding20px 0;
}
 
.methodThree * {
    vertical-alignmiddle;
}

方法4:line-height+vertical-align:middle;

1
2
3
4
5
6
7
.methodFour {
    height120px;
    line-height120px;
}
.methodFour *{
    vertical-alignmiddle;
}

方法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;
}

  

分类:

技术点:

相关文章: