Skip to content

盒子水平垂直局中的方法

flex 布局

jsx
/* html代码: */
<div class="wrap">
    <div class="box" />
</div>
/* CSS代码: */
.wrap{
    /* 设置为弹性布局 */
    display: flex;
    /* 子元素在主轴对齐方式为居中 */
    justify-content: center;
    /* 交叉轴在y轴对齐 */
    align-items: center;
}

Position + Transform

jsx
/* html代码: */
<div class="wrap">
    <div class="box">
    </div>
</div>
/* CSS代码: */
.wrap{
    width: 600px;
    height: 600px;
    border: 2px solid black;
    /* 设置为相对定位,用来作为绝对定位元素的容器块。 */
    position: relative;
}
.box{
    width:50px;
    height: 50px;
    /* 设置为绝对定位,位置在父容器的中心 */
    position: absolute;
    margin: auto;
    left: 50%;
    top:50%;
    /* 向回移动自身一半的长宽 */
    transform: translateX(-50%) translateY(-50%);
}

Position + margin: auto

jsx
<style>
.father {
    margin: 100px auto;
    width: 500px;
    height: 300px;
    border: 1px solid #0a3b98;
    position: relative;
}
.son {
    width: 100px;
    height: 40px;
    background: #f0a238;
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    margin: auto;
}
</style>
<div class="father">
    <div class="son"></div>
</div>

inline-block

jsx
/* html代码: */
<div class="wrap">
    <div class="box" />
</div>
/* CSS代码: */
.wrap{
    width: 600px;
    border: 2px solid black;
    /* 设置行高为600px */
    line-height: 600px;
    /* 让子盒子水平居中 */
    text-align: center;
}
.box{
    height: 50px;
    width: 50px;
    /* 设置为块级元素 */
    display: inline-block;
    /* 设置为垂直居中 */
    vertical-align: middle;
    background-color: red;
}

table 布局

js
<style>
.father {
    display: table-cell;
    width: 200px;
    height: 200px;
    background: skyblue;
    vertical-align: middle;
    text-align: center;
}
.son {
    display: inline-block;
    width: 100px;
    height: 100px;
    background: red;
}
</style>
<div class="father">
    <div class="son"></div>
</div>

总结

根据元素标签的性质,可以分为:

  • 内联元素居中布局
  • 块级元素居中布局

内联元素居中布局

水平居中

  • 行内元素可设置:text-align: center
  • flex 布局设置父元素:display: flex ; justify-content: center

垂直居中

  • 单行文本父元素确认高度:height === line-height
  • 多行文本父元素确认高度:disaply: table-cell; vertical-align: middle

块级元素居中布局

水平居中

  • 定宽: margin: 0 auto
  • 绝对定位 + left:50% + margin: 负自身一半

垂直居中

  • position: absolute 设置 lefttopmargin-leftmargin-top(定高)
  • display: table-cell
  • transform: translate(x, y)
  • flex (不定高,不定宽)
  • grid(不定高,不定宽),兼容性相对比较差

如有转载或 CV 的请标注本站原文地址