杂谈:元素居中

93 阅读1分钟

高频面试题:元素居中

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .parent {
            width: 200px;
            height: 200px;
            background: gray;
        }

        .child {
            width: 100px;
            height: 100px;
            background: orange;
        }
    </style>
</head>

<body>
    <div class="parent">
        <div class="child"></div>
    </div>
</body>

</html>

先创建一个宽高为200px的父容器,再创建一个宽高为100px的子元素,下面列举其居中方案。

  • 1、父元素grid,子元素横竖方向边距margin自适应auto
.parent {
    display: grid;
}

.child {
    margin: auto;
}
  • 2、flex布局,水平垂直都居中
.parent {
    display: flex;
    justify-content: center;
    align-items: center;
}
.child {
    // 无内容
}
  • 3、父级relative,子元素absolute,上下各50%位移,再相对自身左右各便宜-50%
.parent {
    position: relative;
}

.child {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
}
  • 4、父级relative,子元素absolute,四个方向位移为0,并且四个方向的边距margin自适应auto
.parent {
    position: relative;
}

.child {
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
    margin: auto;
}
  • 5、父级table-cell,子元素inline-block,再让父元素的vertical-align垂直方向居中,text-align水平方向居中。
.parent {
    display: table-cell;
    vertical-align: middle;
    text-align: center;
}

.child {
    display: inline-block;
}

总结

居中问题是高频面试题,思路大体分为脱离文档流的定位、弹性布局flex、网格布局grid和浏览器的起源布局table(目前不常用)。