CSS实现居中的8中方法

让child元素在parent容器中水平和垂直都居中

方法一:Flex弹性布局

现代浏览器支持度很高,即使子元素高度不确定也能完美实现居中

复制代码
 	<main>
        <div class="parent">
            <div class="child">我是居中的babycare</div>
        </div>
    </main>
    <style>
        .parent {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 200px;
            border: 1px solid #ccc;
        }
        .child {
            background: red;
        }
    </style>

方法二:Grid网格布局

写法简洁,一行代码就能实现,Grid在旧版浏览器中的支持度略低于Flexbox

复制代码
	<main>
        <div class="parent">
            <div class="child">我是居中的babycare</div>
            <div class="child">我是居中的babycare</div>
        </div>
    </main>
    <style>
        .parent {
            display: grid;
            place-items: center;
            height: 200px;
            border: 1px solid #ccc;
        }
        .child {
            background: red;
        }
        .child:nth-child(2) {
            background-color: pink;
        }
    </style>

方法三:绝对定位+位移变换

这个地方兼容性很好,支持到IE9以上,最大的优点是不需要知道子元素的宽高

复制代码
	<main>
        <div class="parent">
            <div class="child">我是居中的babycare</div>
        </div>
    </main>
    <style>
        .parent {
            position: relative;
            height: 200px;
            border: 1px solid #ccc;
        }
        .child {
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            background: red;
        }
    </style>

方法四:绝对定位+自动边距(固定宽高适用)

利用margin:auto在绝对定位下的特点,需要明确的设置子元素的宽度和高度,浏览器自动计算实现居中

复制代码
 	<main>
        <div class="parent">
            <div class="child">我是居中的babycare</div>
        </div>
    </main>
    <style>
        .parent {
            position: relative;
            height: 200px;
            border: 1px solid #ccc;
        }
        .child {
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            margin: auto;
            height: 100px;
            width: 200px;
            background: red;
        }
    </style>

方法五:表格单元格方式(传统但有效)

模拟了表格单元格的行为,verticle-align:middle实现垂直居中,父元素需要设置明确的高度,子元素要设置为inline-block

复制代码
 	<main>
        <div class="parent">
            <div class="child">我是居中的babycare</div>
        </div>
    </main>
    <style>
        .parent {
            display: table-cell;
            width: 100vw;
            height: 200px;
            vertical-align: middle;
            text-align: center;
            border: 1px solid #ccc;
        }
        .child {
            display: inline-block;
            background: red;
        }
    </style>

方法六:内联块+伪元素(特殊场景使用)

创建一个全高的伪元素作为参照物,通过verticle-align实现垂直对齐,不能用在flexbox或grid时候可以考虑

复制代码
	<main>
        <div class="parent">
            <div class="child">我是居中的babycare</div>
        </div>
    </main>
    <style>
        .parent {
            text-align: center;
            height: 200px;
            border: 1px solid #ccc;
        }
        .parent::before {
            content: "";
            display: inline-block;
            height: 100%;
            vertical-align: middle;
        }
        .child {
            display: inline-block;
            vertical-align: middle;
            background: red;
        }
    </style>

方法七:视口居中(弹框场景)

需要再浏览器窗口中央显示的弹窗,使用position:fixed相对于视口定位,再结合transform实现居中

复制代码
	 <main>
        <div class="parent">
            <div class="child">我是居中的babycare</div>
        </div>
    </main>
    <style>
        .parent {}
        .child {
            position: fixed;
            top: 50%;
            left: 50%;
            transform: translate(-50%,-50%);
            width: 80%;
            max-width: 600px;
            background: red;
        }
    </style>

方法八:JavaScript动态计算

动态计算出父元素和子元素的offsetWidth 和 offsetHeight,使用position:absolute,给top left赋值

相关推荐
咕噜咕噜啦啦3 天前
CSS3基础
前端·css·css3
沙丁鱼意大利面4 天前
五子棋(javascript)
javascript·css·css3
想起你的日子4 天前
CSS3 弹性盒子(Flex Box)
前端·css3
萧曵 丶4 天前
CSS3 业务开发高频样式
前端·css·css3
Y淑滢潇潇6 天前
WEB 作业 三个练习题
前端·javascript·css3
码上出彩7 天前
H5+CSS3响应式设计实战:基于Flex布局的适配方案
前端·css·css3
你说爱像云 要自在漂浮才美丽7 天前
【HTML5与CSS3】
前端·css3·html5
倪枫7 天前
CSS3——文本样式(字体样式和文本布局)
前端·css·css3
ヤ鬧鬧o.8 天前
HTML安全密码备忘录
前端·javascript·css·html·css3
光影少年9 天前
flex布局和grid布局区别,实现两边固定布局中间自适应
前端·css3·web·ai编程