如何水平/垂直居中元素

153 阅读2分钟

一、水平居中

普通流(文档流)

inline

可以设置text-align:center使标签内的文本内容居中,但对行内元素没用(如<span>),行内元素如果要实现居中,可在他的父元素上设置text-align:center

block

块元素具有宽高,可调整块元素的margin实现居中效果——上下边距为0,左右边距自适应即可。

div{
       height: 200px;
       width: 200px;   
       margin: 0 auto; 
      }                 //需要居中块元素就必须要有宽度(不设置宽度,有文字也行)

浮动元素(文本流)

相对定位

浮动元素脱离文档流后,margin: 0 auto就没办法使用了,但是可以采用position,设置成相对定位后,设置左侧相对原来偏移50%,然后回去宽度的一半。

      div {
        height: 200px;
        width: 200px;
        float: left;
        position: relative;
        left: 50%;
        margin-left: -100px;
        /* transform:translateX(-50%);   也可采用CSS3的办法,移动X轴的位置 ,就不用知道元素宽度了*/
      }

绝对定位

行内元素设置position: absolute之后,也可以像块元素一样操作了,也可以同上设置:left: 50%;margin-left: -100px;

      span {
        width: 200px;
        float: left;
        position: absolute;
        left: 0;
        right: 0;
        margin: 0 auto;
        text-align: center;
      }

二、垂直居中

1、使用padding,设置上下填充。

div {
     padding: 10px 0;   /* 上下填充10px,左右为0 */
     text-align: center;
}

2、设置行高line-height

div {
    height: 200px;
    line-height: 200px;
    text-align: center;
}
/* 如果有多行文本则需要添加以下样式: */
div p {
    line-height: 1.5;       /* 相当于行距 */
    display: inline-block;
    vertical-align: middle;
}

3、使用position和transform

      div {
        position: relative;
      }
      div p {
        margin: 0;
        position: absolute;
        left: 50%;
        top: 50%;
        transform: translate(-50%, -50%);
      }

4、使用flex-box

.center {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 200px;
  border: 3px solid green; 
}