css - 水平居中

参考:

CSS常见布局及解决方案
把简单做好也不简单-css水平垂直居中

文字水平居中

对于单行文字来说,直接使用text-align: center即可。
多行文字可以看作一个块级元素参考margin法和定位法。

1、margin法:子节点:margin + 定宽

<html>
<head>
    <meta charset="utf-8">
    <style type="text/css">
        .parent {
            background-color: #0eabdf;
            width: 300px;
            height: 300px;
        }

        .child {
            background-color: #fe6464;

            width: 100px;
            margin: 0 auto;
        }
    </style>
</head>

<body>
<div class="parent">
    <div class="child">child</div>
</div>
</body>
</html>

需要满足三个条件:
1.元素定宽
2.元素为块级元素或行内元素设置display:block
3.元素的margin-left和margin-right都必须设置为auto
三个条件缺一不可。

效果图:

这里写图片描述

2、子节点:table + margin

<html>
<head>
    <meta charset="utf-8">
    <style type="text/css">
        .parent {
            background-color: #0eabdf;
            width: 300px;
            height: 300px;
        }

        .child {
            background-color: #fe6464;

            display: table;
            margin: 0 auto;
        }
    </style>
</head>

<body>
<div class="parent">
    <div class="child">child</div>
</div>
</body>
</html>

display: table 在表现上类似 block 元素,但是宽度为内容宽。

无需设置父元素样式 (支持 IE 8 及其以上版本)兼容 IE 8 一下版本需要调整为 table

优点:只需要对自身进行设置
不足:IE6,7需要调整结构

效果图:

这里写图片描述

3、子节点:inline-block + 父节点:text-align

<html>
<head>
    <meta charset="utf-8">
    <style type="text/css">
        .parent {
            background-color: #0eabdf;
            width: 300px;
            height: 300px;

            text-align: center;
        }

        .child {
            background-color: #fe6464;

            display: inline-block;
        }
    </style>
</head>

<body>
<div class="parent">
    <div class="child">child</div>
</div>
</body>
</html>

兼容性佳(甚至可以兼容 IE 6 和 IE 7)
优点:兼容性好; 不足:需要同时设置子元素和父元素

效果图:

这里写图片描述

4、定位法:父节点:relative + 子节点:absolute + margin-left

<html>
<head>
    <meta charset="utf-8">
    <style type="text/css">
        .parent {
            background-color: #0eabdf;
            width: 300px;
            height: 300px;

            position: relative;
        }

        .child {
            background-color: #fe6464;

            position: absolute;
            left: 50%;
            width: 100px;
            margin-left: -50px;
        }
    </style>
</head>

<body>
<div class="parent">
    <div class="child">child</div>
</div>
</body>
</html>

1.元素定宽
2.元素绝对定位,并设置left:50%
3.元素负左边距margin-left为宽度的一半

子节点宽度需要固定
相比于使用transform ,有兼容性更好

效果图:

这里写图片描述

5. 定位法:父节点:relative + 子节点:absolute + transform

<html>
<head>
    <meta charset="utf-8">
    <style type="text/css">
        .parent {
            background-color: #0eabdf;
            width: 300px;
            height: 300px;

            position: relative;
        }

        .child {
            background-color: #fe6464;

            position: absolute;
            left: 50%;
            transform: translateX(-50%);
        }
    </style>
</head>

<body>
<div class="parent">
    <div class="child">child</div>
</div>
</body>
</html>

绝对定位脱离文档流,不会对后续元素的布局造成影响。
transform 为 CSS3 属性,有兼容性问题
不足:兼容性差,IE9及以上可用

子节点:不设置width具体值

    position: absolute;
    left: 50%;
    -webkit-transform: translate(-50%,0);
    -ms-transform: translate(-50%,0);
    -o-transform: translate(-50%,0);
    transform: translate(-50%,0);

效果图:

这里写图片描述

6. 父节点:flex + justify-content

<html>
<head>
    <meta charset="utf-8">
    <style type="text/css">
        .parent {
            background-color: #0eabdf;
            width: 300px;
            height: 300px;

            display: flex;
            justify-content: center;
        }

        .child {
            background-color: #fe6464;
        }
    </style>
</head>

<body>
<div class="parent">
    <div class="child">child</div>
</div>
</body>
</html>

只需设置父节点属性,无需设置子元素
flex有兼容性问题,缺点:兼容性差,如果进行大面积的布局可能会影响效率.

效果图:

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值