Open YvetteLau opened 5 years ago
行内元素居中 text-align: center + line-height; 弹性布局flex; 绝对定位 absolute + margin/transform/calc;
1、块级元素,设置宽高,需要谁居中,给其设置 margin: 0 auto; 2、行内元素:首先看它的父元素是不是块级元素,如果是,则直接给父元素设置 text-align: center; 如果不是,则先将其父元素设置为块级元素,再给父元素设置 text-align: center; 3、使用绝对定位:首先设置父元素为相对定位,再设置子元素为绝对定位,设置子元素的left:50%,即让子元素的左上角水平居中; 4、使用flexbox布局,只需要给待处理的块状元素的父元素添加属性 display: flex; justify-content: center;
display:flex; justify-content: center; align-items: center;
1.单行文本,只需要将文本行高(line-height)和所在区域高度(height)设为一致即可
p{ height:40px; line-height:40px }
2.父元素高度不确定,只能靠内部文本内容撑开。可以设置margin,padding值相等
假设父元素是div div{ margin: 30px auto; padding:20px ; }
3.父级高度固定的时,设置父级div的display属性:display: table;;然后再添加一个div包含文本内容,设置其display:table-cell;和vertical-align:middle
4、flex的垂直居中,这种做法可以不定义内部元素的高度
5.使用absolute+transform
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>未知宽高元素水平垂直居中</title>
</head>
<style>
.parent4{
display:flex;
justify-content: center;
align-items: center;
width: 300px;
height:300px;
background: #FD0C70;
}
.parent4 .child{
color:#fff;
}
</style>
<body>
<div class="parent4">
<div class="child">hello world-4</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>未知宽高元素水平垂直居中</title>
</head>
<style>
.parent3{
position:absolute;
height:300px;
width: 300px;
background: #FD0C70;
}
.parent3 .child{
position: absolute;
top: 50%;
left: 50%;
color:black;
transform: translate(-50%, -50%);
}
</style>
<body>
<div class="parent3">
<div class="child">hello world-3</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>未知宽高元素水平垂直居中</title>
</head>
<style>
.parent2{
height:300px;
width: 300px;
text-align: center;
background: #FD0C70;
}
.parent2 span{
display: inline-block;
height:50%
} .parent2 .child{ display: inline-block; color: #fff; }
设置元素样式为: display:flex; justify-content: center; align-items: center;