美文网首页
css实现水平垂直居中的方法

css实现水平垂直居中的方法

作者: Melantha_CHEN | 来源:发表于2019-03-06 15:22 被阅读0次

本文主要针对子元素已知宽高和未知宽高的情况下,对其进行水平垂直居中

  本文假设对如下元素进行水平垂直居中方式(父元素和子元素):

<div class="parent">
    <div class="children size"></div>
</div>

首先给他们加一个公共使用的样式(本文介绍的方法有定宽和不定宽的,所以size用来表示children的宽高)

.parent {
   border: 1px solid red;
   width: 600px;
   height: 600px;
}
.children {
    background: green;    
}
.children .zise {
    width: 200px;
    height: 200px;
}

子元素相对父元素进行绝对定位,左和上边距为50%,此时子元素左上顶点在元素的正中间,只需要让子元素的中心点在父元素正中间即可:

1. absolute + 负margin

.parent {
    position: relative;
}
.children {
    position: absolute;
    top: 50%;
    left: 50%;
    margin-top: -100px;
    margin-left: -100px;
}
  • 次方法兼容性较好,只是只适用于必须知道子元素的宽高

2. absolute + margin auto

通过设置各个方向距离都是0,然后再将margin设为auto

.parent {
    position: relative;
}
.children {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    margin: auto;
}
  • 兼容性好,可是需要知道子元素的宽高

absolute + calc

calc()属于CSS3,用于动态计算长度值。

.parent {
    position: relative;
}
.children {
    position: absolute;
    top: calc(50% - 100px);
    left: calc(50% - 100px);
}
  • 此方法属于css3,属于依赖于需要支持该语法才可以,且需要知道子元素宽高

以下方法都是子元素未知的情况:

4. absolute + transform 移动

使用css3新属性transform的translate, 其属性的百分比是相对于自身的宽和高进行移动。

.parent {
    position: relative;
}
.children {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%,-50%);
}

在一些浏览器中可能会出现模糊,是因为元素有可能被放置在办个像素的位置上,可通过以下方法解决此问题:
transform-style: preserve-3d;

  • 此方法需要依赖translate2d的兼容性,且不需要知道子元素宽高

5. line-height 属性

利用行内元素的属性实现居中:

.parent {
    line-height: 600px;
    text-align: center;
}
.children {
    display: inline-block;
    vertical-align: middle;
    line-height: initial;
}
  • 此时子元素文字居中显示text-align: left; /* 修正文字 */

6. writing-mode

writing-mode可以改变文字的显示方向,比如可以通过writing-mode让文字的显示变为垂直方向:

<div class="div1">水平方向</div>
<div class="div2">垂直方向</div>
.div2 {
    writing-mode: vertical-lr;
}

这样可以改变文字的显示方向
具体实现方式如下:

<div class="wp">
    <div class="wp-inner">
        <div class="box"></div>
    </div>
</div>

.wp {
    writing-mode: vertical-lr;
    text-align: center;
}
.wp-inner {
    writing-mode: horizontal-tb;
    display: inline-block;
    text-align: center;
    width: 100%;
}
.box {
    display: inline-block;
    margin: auto;
    text-align: left;
}

7. table

tabel单元格中的内容天然就是垂直居中的,只要添加一个水平居中属性就好了,table会增加代码的冗余性:

<table>
    <tbody>
        <tr>
            <td class="parent">
                <div class="children">子元素-表格</div>
            </td>
        </tr>
    </tbody>
</table>

.parent {
        text-align: center;
    }
.children {
    display: inline-block;
}
  • 这种方法就是代码太冗余,而且也不是table的正确用法

8. css-table

css新增的table属性,可以让我们把普通元素,变为table元素的现实效果,通过这个特性也可以实现水平垂直居中:

.parent {
    display: table-cell;
    text-align: center;
    vertical-align: middle;
}
.box {
    display: inline-block;
}

9. flex

.parent {
    display: flex;
    justify-content: center;
    align-items: center;
}
  • 移动端已完全支持flex,PC端需要看浏览器的兼容性

10. grid

css新出的网格布局,但是兼容性不好

.wp {
    display: grid;
}
.box {
    align-self: center;
    justify-self: center;
}
  • 该方法兼容性不如flex

总结:

  • PC端有兼容性要求,宽高固定,推荐absolute + margin auto
  • PC端有兼容要求,宽高不固定,推荐css-table
  • PC端无兼容性要求,推荐flex
  • 移动端推荐使用flex

注:本文主要参考此篇文章CSS实现水平垂直居中的1010种方式(史上最全)

相关文章

  • CSS解决盒模型居中的问题

    CSS实现盒子模型水平居中、垂直居中、水平垂直居中的多种方法 CSS实现盒子模型水平居中的方法 全局样式 第一种:...

  • css实现水平垂直居中的方法总结

    css实现水平垂直居中的方法总结 实现水平垂直居中你有多少种方法?这是前端面试必考题啊!-=- 这段时间公司招前端...

  • CSS水平垂直居中总结

    CSS水平居中、垂直居中、水平垂直居中方法总结 文字的水平居中: 单行文字的垂直居中: 让有宽度的div水平居中:...

  • Flexbox实现元素的水平居中和垂直居中

    网上有N种方法实现元素的水平居中和垂直居中,如CSS制作水平垂直居中对齐,这些方法各有各的优缺点。在这里,我们使用...

  • CSS图片居中(水平居中和垂直居中)

    css图片水平居中 css图片垂直居中 css图片水平垂直居中

  • css 实现水平居中的方法总结

    css 实现水平居中,垂直居中,水平垂直居中,是css 入门的必修课题,也是代码实践,笔试面试中经常遇到的场景。这...

  • 动态设置div css属性

    jQuery实现水平和垂直居中 jQuery实现水平和垂直居中的原理就是通过jQuery设置DIV的CSS,获取D...

  • margin负值应用实例

    1. 水平垂直居中 利用margin负值可以实现元素的水平垂直居中 html代码: CSS代码 实现效果 2. 列...

  • CSS - 垂直水平居中方法

    前言 总括:整理 css 垂直水平居中方法,区分内联元素与块级元素 CSS垂直居中和水平居中 用css让一个容器水...

  • 用CSS实现元素居中的N种方法

    网页布局中,元素水平居中比垂直居中简单不少,同时实现水平垂直居中也不难,难的是想出多种实现水平垂直居中的方法并从中...

网友评论

      本文标题:css实现水平垂直居中的方法

      本文链接:https://www.haomeiwen.com/subject/kyztpqtx.html