美文网首页程序员
CSS元素的水平/垂直居中

CSS元素的水平/垂直居中

作者: 沧海七粟 | 来源:发表于2019-01-15 16:56 被阅读0次

前言

在 CSS 中,元素的水平/垂直居中一直是程序员高频接触的东西,实现的方法也多种多样,这里将相关方法收集于此,自己再实现下代码加深记忆。不想看具体实现可以直接跳到 「总结」部分。

水平居中

需考虑要居中的元素是 行内元素(如:spani)还是块级元素(如:divp)。

行内元素

在需要居中元素的父容器上写text-align: center;即可。

<!-- HTML -->
<div class="parent">
  <span class="child">内容区</span>
</div>
/* CSS */
.parent{
  text-align: center;
}

块级元素

给需要居中的元素一个显式的宽度,再margin-left: auto;margin-right: auto;

<!-- HTML -->
<div class="parent">
  <div class="child">内容区</div>
</div>
/* CSS */
.child{
  width: 100px;
  margin-left: auto;
  margin-right: auto;
}

垂直居中

.parent的高度没有固定时,.child使用padding: 10px 0;就能实现居中,当.parent的高度固定时则需要使用以下方式进行居中,建议开发时.parent的高度能不固定就不固定。

先放通用代码,后面具体实现时就不再贴出来了。

<!-- HTML -->
<div class="parent">
  <div class="child">内容区</div>
</div>
/* CSS */
.parent{
  height: 200px;
  border: 1px solid red;
}
.parent{
  width: 50px;
  height: 50px;
  border: 1px solid blue;
}

1. absolute + margin auto

/* CSS */
.parent{
  position: relative;
}
.child{
  position: absolute;
  margin: auto;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
}

2. absolute + margin-top

使用margin-top: -50%;, 这里的-50%是指.child自身高度的一半。

/* CSS */
.parent{
  position: relative;
}
.child{
  position: absolute;
  top: 50%;
  margin-top: -25px;
}

3. absolute + transform

这个方法需要考虑transform的兼容性。

/* CSS */
.parent{
  position: relative;
}
.child{
  position: absolute;
  top: 50%;
  // 在实际项目中我们常常使用 translate(-50%, -50%) 实现水平和垂直居中
  transform: translateY(-50%);
}

4. table

布局改为table实现就能实现垂直居中。

<!-- HTML -->
<table class="parent">
  <tr>
     <td class="child">内容区</td>
  </tr>
</table>

5. div 实现 table

/* CSS */
.parent{
  display: table-cell;
  vertical-align:middle;
}

还有一种复杂版:

<!-- HTML -->
<div class="parent">
  <div class="parent-inner">
    <div class="child">内容区</div>
  </div>
</div>
/* CSS */
.parent{
  display: table;
}
.parent-inner{
  display: table-cell;
  vertical-align:middle;
}

6. line-height

设置line-height属性实现垂直居中,不推荐在项目中使用(有其他这么些方法不用,非要用这个?)

/* CSS */
.child{
  line-height: 200px; // 父容器的高度
}

7. flex

强烈推荐flex,如丝般顺滑的实现水平垂直居中。

/* CSS */
.parent{
  display: flex;
  align-items: center; //交叉轴(cross axis)如何对齐
}

8. grid

同 flex 一样也是一种布局方式。

/* CSS */
.parent{
  display: grid;
}

.child{
  align-self:center; 
}

总结

关于水平居中写得很少,其实很多垂直居中里的方法将应用于 y 轴的操作应用于 x 轴就能实现水平居中,实际项目选择适合的方法就好。

水平居中

行内元素:父容器text-align: center即可。

块级元素:给需要居中的元素一个显式的宽度,再margin-left: auto;margin-right: auto;

垂直居中:

父容器高度不固定,子元素设置相同的padding-toppadding-bottom值就可实现垂直居中。

父容器高度固定:

  1. absolute + margin auto
  2. absolute + margin-top
  3. absolute + transform
  4. table
  5. div 实现 table
  6. line-height
  7. flex
  8. grid

参考资料

七种方式实现垂直居中 - 饥人谷

CSS【日常处理总结】- GitHub

六种实现元素水平居中 - w3cplus

相关文章

  • 垂直居中,水平居中

    CSS设置行内元素的水平居中 CSS设置行内元素的垂直居中 CSS设置块级元素的水平居中 CSS设置块级元素的垂直居中

  • 2020-03-05 CSS水平垂直居中学

    1.块级元素水平居中,水平元素垂直居中 CodePen:CSS块级水平居中 2.块级元素垂直居中 CodePen:...

  • css 水平垂直居中实现方式

    css 水平垂直居中实现方式 水平垂直居中包括行内元素居中,以及块级元素居中 行内元素html结构 块级元素结构 ...

  • CSS - 垂直水平居中方法

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

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

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

  • css 图片居中

    css图片居中(水平居中和垂直居中) css图片水平居中 块状元素直接用text-align:center, di...

  • css关于居中的方式

    父元素没有固定宽高 水平垂直居中 html: css: 水平居中 不确定子元素宽高 设置水平居中,先将子元素转化为...

  • css居中大全

    css居中大全 Horizontally 水平居中 内联元素 块级元素 多个块级元素 Vertically 垂直...

  • css居中方式总结(亲测有效)

    水平居中(行内元素水平居中、块级元素水平居中) 垂直居中 水平垂直居中 行内元素水平居中 text-align: ...

  • 定位和居中问题

    CSS的居中分水平居中和垂直居中,如果要让元素水平、垂直同时据中,不同情况下有不同的方法 分类: 居中元素大小是固...

网友评论

    本文标题:CSS元素的水平/垂直居中

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