CSS盒子居中的方法

时间:2024-11-21 07:40:15

CSS盒子居中的方法

1. CSS盒子水平居中的方法

1.1 使用 margin: 0 auto;

当元素的左右外边距(margin)相等的时候,元素就处在中间位置,这可以通过将左右外边距都设为auto来实现。如果是块级元素通常还需要定义宽度。如下所示:

section {
    width: 400px;
    margin: 0 auto;
}

注意,如果把上下外边距设为auto,并不能实现垂直居中,因为这时候auto相当于0.

1.2 把盒子转成 行内块,然后用 text-align 属性使盒子水平居中

改变需要居中元素的盒类型,调整为行内块(inline-block),在父元素中将text-align属性设为center,就能实现水平居中。

.father {
    width: 500px;
    height: 500px;
    margin: 50px auto;
    text-align: center;               // 让父盒子设置水平居中
}
.son {
    width: 200px;
    height: 200px;
    display: inline-block;            // 让子盒子显示为行内块模式
}

1.3 子绝父相 + margin负值

父盒子采用相对定位,子盒子采用绝对定位,先让盒子左右边缘和父盒子垂直的中心线垂直(left:50%),然后把子盒子往回移动自身宽度的一半

可以有两种方法实现反向偏移一半的效果:

  • margin-left:

    father {
        width: 500px;
        height: 500px;
        position: relative;
    
    }
    .son {
        width: 200px;
        height: 200px;
        position: absolute;
        left: 50%;                       // 向右移动父盒子一半
        margin-left: -100px;             // 向左移动自身盒子一半
    
  • transform:translateX(-50%)

    father {
        width: 500px;
        height: 500px;
        position: relative;
    
    }
    .son {
        width: 200px;
        height: 200px;
        position: absolute;
        left: 50%;                       // 向右移动父盒子一半
        transform: translateX(-50%);     //向左移动自身盒子一半
    

1.4 flex布局

这是CSS3引入的新功能,当普通容器被调整为伸缩容器后,如果要让里面的元素水平居中,那么就相当于主轴的居中对齐,(子盒子有或没有宽高的时候都适用

.father {
    display: flex;
    justify-content: center;
}

但是目前IE的多个版本还不支持此功能

2. CSS盒子垂直居中的方法

2.1 行高:line-height:height

只有当容器的高度已知并且是单行文本时,才能用行高实现垂直居中

<div style="height: 100px; line-height:100px">
    <p>单行文本垂直居中</p>
</div>

注意:如果将单行文本改为图像,用行高则不能实现图像的水平居中

2.2 利用table的特征

该方法将普通元素调整为表格元素,然后利用vertical-align属性就能让内容居中对齐

.allCenter{
	display:table-cell;//设置为表格单元
	vertical-align:middle;//设置表格属性,此时垂直居中了
	text-align:center;//此时没有用的,子元素此时为块元素,,不是行内元素,text-align无效,需要对子元素进行处理称为行内块元素
}
.allCenterChild{
   display: inline-block;//子元素变为行内块元素,加上父元素的text-align属性,此时水平居中了
}

虽然模拟表格能带来很多便捷,但同时也受到了限制。例如跳针过的元素不能用定位和浮动;使用盒类型table-cell的时候,必须同时有个祖先元素的盒类型是table;变为表格的元素,它的默认宽度将不再占一行,因为表格本质上是行内元素

2.3 子绝父相 + margin负值

与水平居中的方法类似,父盒子采用相对定位,子盒子采用绝对定位,先让盒子上下边缘和父盒子垂直的中心线垂直(top:50%),然后把子盒子往上移动自身宽度的一半

可以有两种方法实现反向偏移一半的效果:

  • margin-top:

    father {
        width: 500px;
        height: 500px;
        position: relative;
    }
    .son {
        width: 200px;
        height: 200px;
        position: absolute;
        top: 50%;                       // 向下移动父盒子一半
        margin-top: -100px;             // 向上移动自身盒子一半
    
  • transform:translateY(-50%)

    father {
        width: 500px;
        height: 500px;
        position: relative;
    
    }
    .son {
        width: 200px;
        height: 200px;
        position: absolute;
        top: 50%;                       // 向下移动父盒子一半
        transform: translateY(-50%);     //向上移动自身盒子一半
    

2.4 flex布局

父级对子元素进行垂直居中,居中属性只需要定义在父元素中,相当侧轴的居中对齐

<style>
    .wrap{  //【基础设置】父元素:宽高各600px
    width: 600px;
    height: 600px;
    }
    .item{  //【基础设置】子元素:宽高各150px
       width:150px;
       height:150px;
    }
    .allCenter{    
        display:flex;//设置弹性布局,display属性选为flex
        align-items:center;//让子元素垂直居中
    }
    .allCenterChild{//父元素不受影响
    }
</style>