水平垂直居中问题

这个问题,经久不衰。。。

一、一个宽高固定的元素在页面上实现水平垂直居中有哪些方法?

方法1. 父元素相对定位,目标元素绝对定位,设置margin为auto auto,left、right、top、bottom都设为0。

代码:

   <style type="text/css">
        html,body {
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            position: relative;
        }
        .content {
            width: 300px;
            height: 300px;
            background: orange;
            position:absolute;
            margin:auto;
            left:0;
            top:0;
            bottom:0;
            right:0;
        }
    </style>

    <body>
        <div class="content"></div>
    </body>

效果:


image.png
方法2. 父元素相对定位,目标元素绝对定位,left和top分别设为50%,设置目标元素一半宽高的margin负间距。

代码:

    <style type="text/css">
        html,body {
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            position: relative;
        }
        .content {
            width: 300px;
            height: 300px;
            background: orange;
            position:absolute;
            left:50%;
            top:50%;
            margin-left:-150px;
            margin-top:-150px;
        }
    </style>

    <body>
        <div class="content"></div>
    </body>

效果:


image.png
方法3. Flex弹性布局法。

代码:

    <style type="text/css">
       html,body {
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            display: flex;
            justify-content: center; /*显示在主轴的中间*/
            align-items: center; /*子项在侧轴中间位置*/
        }
        .content {
            width: 300px;
            height: 300px;
            background: red;
        }
    </style>

    <body>
        <div class="content"></div>
    </body>

效果:


image.png
方法4. 父元素使用flex布局(display:flex),子元素使用margin:auto。

代码:

    <style type="text/css">
       html,body {
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            display: flex;
        }
        .content {
            width: 300px;
            height: 300px;
            background: red;
            margin: auto auto;
        }
    </style>

    <body>
        <div class="content"></div>
    </body>

效果:


image.png

二、多行文字实现水平垂直居中有哪些方法?

场景:父元素宽度固定,要求实现文字内容水平垂直居中。

方法1. 用display:table和display:table-cell模拟盒子。

代码:

    <style type="text/css">
        html,body {
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            display: flex;
        }
        .table {
            display: table;
            width: 500px;
            height: 100px;
            margin:auto auto;

        }
        .table-cell {
            display: table-cell;
            vertical-align: middle;
            text-align: center;
        }
    </style>

<body>
    <div class="table">
        <div class="table-cell">
            多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中
        </div>
    </div>
</body>

效果:


image.png

缺点:ie7以下不兼容。

方法2. 用display:flex实现。
    <style type="text/css">
        html,body {
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            display: flex;
        }
        .middle-content{
            margin: auto auto;
            width: 500px;
            height: 500px;
            display: flex;
            align-items: center;
        }
    </style>

<body>
    <div class="middle-content">
            多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中多行文字水平垂直居中
    </div>
</body>

效果:


image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • H5移动端知识点总结 阅读目录 移动开发基本知识点 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇阅读 4,604评论 0 26
  • 移动开发基本知识点 一.使用rem作为单位 html { font-size: 100px; } @media(m...
    横冲直撞666阅读 3,507评论 0 6
  • 问题一:盒子在文档流中居中 方法一:绝对定位-宽高的一半 方法二:绝对定位+margin:auto; 方法三、用t...
    忙兮奈若何阅读 1,459评论 1 44
  • 一:使用margin进行固定长度的偏移 在使用margin进行具体高度的偏移时,需要知道父元素和子元素的具体的宽高...
    orangekkk阅读 534评论 0 0
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    love2013阅读 2,327评论 0 11