1.子元素为 inline 行内元素
水平用 text-align: center
垂直用 line-height: 父元素高度,注意只能是单行,多行会让子元素的每一行的行高都是父元素高度
2.子元素为 block 块级元素
水平用 margin: 0 auto
3.子元素为 absolute 绝对定位元素
水平用 left(50%), margin-left(-子元素宽度的一半)
left(50%), transform(translateX(-50%))
垂直用 top(50%), margin-top(-子元素高度的一半), 注意需要知道子元素的高度,即子元素定高
left(50%), transform(translateY(-50%))
top: 0, bottom: 0, margin: auto, 注意需要知道子元素的高度,即子元素定高
4.父元素 flex 定位
水平用 justify-content: center
垂直用 align-items: center
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>CSS 水平垂直居中</title>
<style>
.con{
width: 300px;
height: 300px;
background: red;
}
.child{
background: green;
}
.inline .con{
text-align: center;
line-height: 300px;
}
.inline .child{
}
.block .con{
}
.block .child{
width: 200px;
margin: 0 auto;
}
.absoluteMargin .con{
position: relative;
}
.absoluteMargin .child{
position: absolute;
width: 200px;
height: 200px;
left: 50%;
margin-left: -100px;
top: 50%;
margin-top: -100px;
}
.absoluteTransform .con{
position: relative;
}
.absoluteTransform .child{
position: absolute;
width: 200px;
left: 50%;
top: 50%;
transform: translateX(-50%) translateY(-50%);
}
.absoluteMarginAuto .con{
position: relative;
}
.absoluteMarginAuto .child{
position: absolute;
width: 200px;
height: 200px;
top: 0;
bottom: 0;
margin: auto;
}
.flex .con{
display: flex;
justify-content: center;
align-items: center;
}
.flex .child{
width: 200px;
}
</style>
</head>
<body>
<pre>
1.子元素为 inline 行内元素
水平用 text-align: center
垂直用 line-height: 父元素高度,注意只能是单行,多行会让子元素的每一行的行高都是父元素高度
</pre>
<div class="inline">
<div class="con">
<span class="child">inline item inline item inline</span>
</div>
</div>
<pre>
2.子元素为 block 块级元素
水平用 margin: 0 auto
</pre>
<div class="block">
<div class="con">
<p class="child">block item block item block</p>
</div>
</div>
<pre>
3.子元素为 absolute 绝对定位元素
水平用 left(50%), margin-left(-子元素宽度的一半)
left(50%), transform(translateX(-50%))
垂直用 top(50%), margin-top(-子元素高度的一半), 注意需要知道子元素的高度,即子元素定高
left(50%), transform(translateY(-50%))
top: 0, bottom: 0, margin: auto, 注意需要知道子元素的高度,即子元素定高
</pre>
<div class="absoluteMargin">
<div class="con">
<p class="child">absoluteMargin item absoluteMargin item absoluteMargin</p>
</div>
</div>
<br>
<div class="absoluteTransform">
<div class="con">
<p class="child">absoluteTransform item absoluteTransform item absoluteTransform</p>
</div>
</div>
<br>
<div class="absoluteMarginAuto">
<div class="con">
<p class="child">absoluteMarginAuto item absoluteMarginAuto item absoluteMarginAuto</p>
</div>
</div>
<pre>
4.父元素 flex 定位
水平用 justify-content: center
垂直用 align-items: center
</pre>
<div class="flex">
<div class="con">
<p class="child">flex item flex item flex item flex item flex item flex item flex item flex item flex</p>
</div>
</div>
</body>
</html>