css 水平居中布局

151 阅读2分钟

已知

<!DOCTYPE html>
<html>
<head>
    <title>居中对齐</title>
    <style>
        .outer {
             
        }
        .inner {
            border: 1px solid black;
            width: 100px;
            height: 100px;
        }
    </style>
</head>
<body>
    <div class="outer">
        <div class="inner"></div>
    </div>
</body>
</html>

image.png

要求黑色正方形 居中显示 image.png

1.行内块:文本对齐text-align:center + inline-block

外部使用text-align:center 让行内元素居中,子元素设置为行内属性inline-block

.outer{
    border: 1px solid red;
    text-align: center;
}
.inner {
    border: 1px solid black;
    width: 100px;
    height: 100px;
    display: inline-block;
}

2.块级block+ 边距自适应margin:0 auto

通过子元素 左右的margin设置auto,让他自动根据当前父容器计算对应的margin宽度。

.outer {
    border: 1px solid red; 
}
.inner {
    border: 1px solid black;
    width: 100px;  
    height: 100px;
    margin: 0 auto; /*设置auto,让他自动根据当前父容器计算对应的margin宽度*/
}

3.弹性布局dispaly:flex + justify-content:center

通过flexbox的行居中

.outer {
    border: 1px solid red; 
    display: flex;
    justify-content: center;
}
.inner {
    border: 1px solid black;
    width: 100px;
    height: 100px;
}

3.1 弹性布局dispaly:flex + margin:0 auto

子元素直接使用margin:0 auto 动态计算

.outer {
    border: 1px solid red; 
    display: flex; 
}
.inner {
    border: 1px solid black;
    width: 100px;
    height: 100px;
    margin:0 auto;
}

4. 网格 grid ;

 .outer {
    border: 1px solid red; 
    display: grid;
    justify-items: center;
}
.inner {
    border: 1px solid black;
    width: 100px;
    height: 100px;
}

4.1 grid + justify-content: center;

 .outer {
    border: 1px solid red; 
    display: grid;
    justify-content: center;
}
.inner {
    border: 1px solid black;
    width: 100px;
    height: 100px;
}

4.2 grid + 0 auto;

 .outer {
    border: 1px solid red; 
    display: grid; 
}
.inner {
    border: 1px solid black;
    width: 100px;
    height: 100px;
    margin: 0 auto;
}

5.相对定位 relative + left:50% + margin-left: -50px

使用相对定位,同时设置left 偏移父容器50% , 再减去自身宽度一半,这里宽度是固定值。

.outer {
    border: 1px solid red; 
}
.inner {
    border: 1px solid black;
    width: 100px;
    height: 100px; 
    position: relative;/*设置当前为相对定位 */
    left: 50%;
    margin-left: -50px;/*减去自身宽度一半,是固定值的*/
}

6.绝对定位 absolute + left:50% margin-left: -50px

使用绝对定位,position:absolute , 同时设置距离左侧50%, 再减去自身宽度一半,这个是固定值。

.outer {
    border: 1px solid red; 
    position: relative; /*子元素使用绝对定位,父级记得要对应设置相对,不然会一直往上找相对*/
    min-height: 100px;/*子元素脱离文档流 父容器需要自定*/
}
.inner {
    border: 1px solid black;
    width: 100px;
    height: 100px;
    position:absolute;
    left: 50%;
    margin-left: -50px; /*减去自身宽度一半,是固定值的*/
}

6.1 绝对定位 absolute + left:50% + translateX(-50%)

利用translateX(-50%) 可以动态获取当前子元素的宽度并且做位移。

.outer {
    border: 1px solid red; 
    position: relative; 
    min-height: 100px; 
}
.inner {
    border: 1px solid black;
    width: 100px;
    height: 100px;
    position:absolute;
    left: 50%;
    transform: translateX(-50%);  /*这里是动态计算当前元素的50% */
}

6.2 绝对定位 absolute + left:0 right:0 + margin:auto

先设置为绝对定位,再left right 设置子容器拉满,最后使用margin:0 auto,去自动计算偏移距离。

.outer {
    border: 1px solid red;
    position: relative;
    min-height: 100px;
}
.inner {
    border: 1px solid black;
    width: 100px;
    height: 100px; 
    position: absolute;
    left: 0;
    right: 0;
    margin: 0 auto;
}