垂直居中
单行文本
若元素是单行文本, 则可设置 line-height 等于父元素高度
<style>
body{
background-color: #e9e9e9;
}
.parent{
background-color: yellow;
width: 200px;
height: 200px;
}
.child{
line-height: 200px;
}
</style>
2
3
4
5
6
7
8
9
10
11
12
13
<div class="parent">
<div class="child">行内元素1</div>
</div>
2
3
效果图
元素高度不定
- 可用 vertical-align 属性, 而vertical-align只有在父层为 td 或者 th 时, 才会生效, 对于其他块级元素, 例如 div、p 等, 默认情况是不支持的. 为了使用vertical-align, 我们需要设置父元素display:table, 子元素 display:table-cell;vertical-align:middle; 优点
元素高度可以动态改变, 不需再CSS中定义, 如果父元素没有足够空间时, 该元素内容也不会被截断.
缺点
IE6~7, 甚至IE8 beta中无效.
<style>
body{
background-color: #e9e9e9;
}
.parent{
width: 200px;
height: 200px;
background-color: yellow;
display: table;
}
.child{
display:table-cell;
vertical-align:middle;
}
</style>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<div class="parent">
<div class="child">行内元素1</div>
</div>
2
3
效果图 2. flex display: flex;align-items: center; 父元素做如下设置即可保证子元素垂直居中 优点
内容块的宽高任意, 优雅的溢出.
可用于更复杂高级的布局技术中. 缺点
IE8/IE9不支持
需要浏览器厂商前缀
渲染上可能会有一些问题
<style>
body{
background-color: #e9e9e9;
}
.parent{
display: flex;
align-items: center;
}
</style>
2
3
4
5
6
7
8
9
<div class="parent">
<div class="child">行内元素1</div>
</div>
2
3
效果图 3.flex display: flex;flex-direction: column;justify-content: center; 父元素做如下设置即可保证子元素垂直居中
<style>
body{
background-color: #e9e9e9;
}
.parent{
width: 300px;
height: 300px;
background-color: yellow;
display: flex;
flex-direction: column;
justify-content: center;
}
.child {
width: 100px;
height: 100px;
background: lightblue;
}
</style>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<div class="parent">
<div class="child">行内元素1</div>
</div>
2
3
效果图 4. transform 设置父元素相对定位(position:relative), 子元素如下css样式
<style>
body{
background-color: #e9e9e9;
}
.parent{
width: 200px;
height: 200px;
background-color: yellow;
position: relative;
}
.child{
position:absolute;
top:50%;
transform: translate(0,-50%);
}
</style>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<div class="parent">
<div class="child">行内元素1</div>
</div>
2
3
效果图 5. 使用 CSS Grid
<style>
body{
background-color: #e9e9e9;
}
.parent{
width: 300px;
height: 300px;
background-color: yellow;
display: grid;
}
.two {
background: orange;
}
</style>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<div class="parent">
<div class="one"></div>
<div class="two">target item</div>
<div class="three"></div>
</div>
2
3
4
5
效果图
元素高度固定
- 设置父元素相对定位(position:relative), 子元素如下css样式
.parent{
width: 200px;
height: 200px;
background-color: yellow;
position: relative;
}
.child{
position:absolute;
top:50%;
height:100px;
margin-top:-50px;
background-color: lightblue;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
<div class="parent">
<div class="child">行内元素1</div>
</div>
2
3
效果图 2. 设置父元素相对定位(position:relative), 子元素如下css样式
.parent{
width: 200px;
height: 200px;
background-color: yellow;
position: relative;
}
.child{
position:absolute;
height:100px;
top:0;
bottom:0;
margin:auto 0;
background-color: lightblue;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div class="parent">
<div class="child">行内元素1</div>
</div>
2
3
效果图 3. 使用padding实现子元素的垂直居中 注意 父元素是不能设置高度的,要让它自动被填充起来,除非设置了一个正好等于上内边距+子元素高度+下内边距的值,否则无法精确垂直居中。
.parent{
width: 200px;
background-color: yellow;
padding: 100px 0;
}
.child{
width: 200px;
height: 100px;
background-color: lightblue;
}
2
3
4
5
6
7
8
9
10
11
12
<div class="parent">
<div class="child">行内元素1</div>
</div>
2
3
效果图 3. 设置第三方基准 首先设置一个高度等于父元素高度一半的第三方基准元素,这时该基准元素的底边线就是父元素纵向上的中分线,做完这些之后再给要垂直居中的元素设置一个 margin-top 属性,值的大小是它自身高度的一半取负,则实现垂直居中。
.parent{
width: 300px;
height: 300px;
background-color: yellow;
}
.base {
height: 50%;
background: orange;
}
.child{
height: 100px;
background: lightblue;
margin-top: -50px;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
<div class="parent">
<div class="base">行内元素1</div>
<div class="child">行内元素2</div>
</div>
2
3
4
效果图 4. 使用 line-height 和 vertical-align 对图片进行垂直居中
.parent{
width: 300px;
height: 300px;
background-color: yellow;
line-height: 300px;
}
img {
width: 200px;
height: 200px;
vertical-align: middle;
}
2
3
4
5
6
7
8
9
10
11
12
13
<div class="parent">
<div class="parent">
<img src="./block.png" alt="">
</div>
</div>
2
3
4
5
效果图
← 水平居中 单行文本溢出省略展示→