css中实现元素水平垂直居中的几种方法

113 阅读1分钟

首先我们给定基本的页面解构,给上基本的样式,以便我们清除的看到父元素和子元素的初始位置。

<div class="parent">
        <div class="child"></div>
</div>
<style>
        .parent{
            width: 300px;
            height: 300px;
            background-color: aqua;
        }
        .child{
            width: 100px;
            height: 100px;
            background-color: yellowgreen;
        }
    </style>

下面是初始状态,目前子元素是在父元素左上角

image.png

下面我们通过几种思路来实现:

第一种 (通过弹性布局的方式) :

通过给父元素设置弹性布局,让它变成一个容器,再利用---主轴对齐方式justify-content和交叉轴对齐方式align-items,即可实现,代码如下

.parent{
            width: 300px;
            height: 300px;
            background-color: aqua;
            display: flex;
            justify-content: center;
            align-items: center;
        }

1637111407(1).jpg

第二种 (通过定位的方式):

1.设置子元素为绝对定位,但记得要给父元素一个定位属性,以便子元素参考父元素的位置做移动。

.child{
            position: absolute;
        }
        
.parent{
            position: relative;/*设置父元素为相对定位*/
        }        

2.使子元素向右向下偏移父元素宽度、高度的50%

.child{
           left: 50%;
           top:50%;
}

3.由于子元素本身的宽高,所以此时子元素的中心并不是处于父元素中心的位置。

.child{
            transform: translate(-50%,-50%);
            /* 使得子元素再向左、向上移动自身宽高的50% */
        }

下面是完整的代码:

<!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: 300px;
            height: 300px;
            background-color: aqua;
            position: relative;/*设置父元素为相对定位*/

        }
        .child{
            width: 100px;
            height: 100px;
            background-color: yellowgreen;
            position: absolute;
            /*设置子元素为绝对定位,但记得要给父元素一个定位属性,以便子元素参考父元素的位置做移动*/
            left: 50%;/*使子元素向右偏移父元素宽度的50%*/
            top:50%;/*使子元素向下偏移父元素宽度的50%*/
            /* 由于子元素本身的宽高,所以这是子元素的中心并不是处于父元素中心的位置 */
            transform: translate(-50%,-50%);
            /* 使得子元素再向左、向上移动自身宽高的50% */
        }
    </style>
</head>
<body>
    <div class="parent">
        <div class="child"></div>
    </div>
</body>
</html>

image.png

第三种(利用margin的方法):

.parent{
            width: 300px;
            height: 300px;
            background-color: aqua;
            position: relative

        }
        .child{
            width: 100px;
            height: 100px;
            background-color: yellowgreen;
            position: absolute;
            margin:auto;
            top: 0;
            left: 0;
            bottom: 0;
            right: 0;
        }

这里记得我们还是保留一下子父元素的定位设置

以上是几种垂直水平居中的方式,当然方法肯定不仅这些,如果大家有其他好的方式的话,欢迎留言。