首页
学习
活动
专区
圈层
工具
发布

CSS常用布局实现03-水平垂直居中

1. 简介

其实,水平居中和垂直居中都是水平垂直居中的一部分,所以这一章节所讲到的方法稍微改下就可用于前面两章。说道水平垂直居中,那么居中的元素肯定是有宽度和高度的,要么是指定宽高,要么就是自适应的宽高。

2. 已知宽高

这种情况比较简单,因为已知宽高,根据宽高就能做很多处理。这里我只记录一种方法。 使用 -margin + absolute(relative):

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>负margin + absolute</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .wrap {
            position: relative;
            background: gray;
            height: 300px;
        }
        .inner {
            background: blue;
            width: 200px;
            height: 100px;
            position: absolute;
            top: 50%;
            left: 50%;
            margin-top: -50px;
            margin-left: -100px;
        }
    </style>
</head>
<body>

<div class="wrap">
    <div class="inner">inner content</div>
</div>
</body>
</html>

image.png

当然,这里使用这个方法的简化方法也可以,就是不设置父元素为absolute,设置子元素为relative,其余保持一样。

3. 未知宽高

3.1 使用 -margin + absolute:

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>负margin + absolute</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .wrap {
            position: relative;
            background: gray;
            height: 300px;
        }
        .inner {
            background: blue;
            width: 200px;
            height: 100px;
            position: absolute;
            top: 0;
            right: 0;
            bottom: 0;
            left: 0;
            margin: auto auto;
        }
    </style>
</head>
<body>

<div class="wrap">
    <div class="inner">inner content</div>
</div>
</body>
</html>

这种方法很巧妙,使用也很多。IE7及之前版本不支持。

3.2 flex

是的,flex,flex,flex。

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>flex</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .wrap {
            background: gray;
            display: flex;
            height: 60px;
            align-items: center;
            justify-content: center;
        }
        .inner {
            background: blue;
        }
    </style>
</head>
<body>

<div class="wrap">
    <div class="inner">inner content</div>
</div>
</body>
</html>

3.3 grid

还有grid,grid,grid。

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>grid</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .wrap {
            background: gray;
            display: grid;
            height: 60px;
            align-items: center;
            justify-content: center;
        }
        .inner {
            background: blue;
        }
    </style>
</head>
<body>

<div class="wrap">
    <div class="inner">inner content</div>
</div>
</body>
</html>

3.4 table

当然,这种情景使用table也很方便。

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>table</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .wrap {
            display: table-cell;
            background: gray;
            height: 100px;
            width: 300px;
            text-align: center;
            vertical-align: middle;
        }
        .inner {
            background: blue;
        }
    </style>
</head>
<body>

<div class="wrap">
    <div class="inner">
        inner content
    </div>
</div>
</body>
</html>

ie8以后兼容。

下一篇
举报
领券