CSS 布局 - 水平和垂直对齐

元素居中

水平和垂直居中的元素

居中对齐元素

要使块元素(例如 <div> )水平居中,请使用 margin: auto;

设置元素的宽度将防止其延伸到容器的边缘。

然后,元素将占用指定的宽度,剩余空间将在两个外边距之间平均分配:

这个 div 元素是居中的。

实例

  1. .center {
  2. margin: auto;
  3. width: 50%;
  4. border: 3px solid green;
  5. padding: 20px;
  6. }

注意:如果未设置 width 属性(或将其设置为 100%),则居中对齐无效。

居中对齐文本

如果仅需在元素内居中文本,请使用 text-align: center;

这段文本是居中的。

实例

  1. .center {
  2. text-align: center;
  3. border: 3px solid green;
  4. }

提示:有关如何对齐文本的更多例子,请参见 CSS 文本 这一章。

居中对齐图像

如需居中图像,请将左右外边距设置为 auto,并将其设置为块元素:

CSS 对齐 - 图1

实例

  1. img {
  2. display: block;
  3. margin-left: auto;
  4. margin-right: auto;
  5. width: 40%;
  6. }

左和右对齐 - 使用 position

对齐元素的一种方法是使用 position: absolute; :

这个 div 是右对齐的。

实例

  1. .right {
  2. position: absolute;
  3. right: 0px;
  4. width: 300px;
  5. border: 3px solid #73AD21;
  6. padding: 20px;
  7. }

注意:绝对定位的元素将从正常流中删除,并可能出现元素重叠。

左和右对齐 - 使用 float

对齐元素的另一种方法是使用 float 属性:

实例

  1. .right {
  2. float: right;
  3. width: 300px;
  4. border: 3px solid #73AD21;
  5. padding: 10px;
  6. }

注意:如果一个元素比包含它的元素高,并且它是浮动的,它将溢出其容器。您可以使用 clearfix hack 来解决此问题(请看下面的例子)。

clearfix Hack

然后我们可以向包含元素添加 overflow: auto;,来解决此问题:

实例

  1. .clearfix {
  2. overflow: auto;
  3. }

垂直对齐 - 使用 padding

有很多方法可以在 CSS 中垂直对齐元素。一个简单的解决方案是使用上下内边距:

我是垂直居中的。

实例

  1. .center {
  2. padding: 70px 0;
  3. border: 3px solid green;
  4. }

如需同时垂直和水平对齐,请使用 paddingtext-align: center;

我是水平和垂直居中的。

实例

  1. .center {
  2. padding: 70px 0;
  3. border: 3px solid green;
  4. text-align: center;
  5. }

垂直对齐 - 使用 line-height

另一个技巧是使用其值等于 height 属性值的 line-height 属性:

我是水平和垂直居中的。

实例

  1. .center {
  2. line-height: 200px;
  3. height: 200px;
  4. border: 3px solid green;
  5. text-align: center;
  6. }
  7. /* 如果有多行文本,请添加如下代码:*/
  8. .center p {
  9. line-height: 1.5;
  10. display: inline-block;
  11. vertical-align: middle;
  12. }

垂直对齐 - 使用 position 和 transform

如果您的选择不是 paddingline-height,则另一种解决方案是使用 positiontransform 属性:

我是水平和垂直居中的。

实例

  1. .center {
  2. height: 200px;
  3. position: relative;
  4. border: 3px solid green;
  5. }
  6. .center p {
  7. margin: 0;
  8. position: absolute;
  9. top: 50%;
  10. left: 50%;
  11. transform: translate(-50%, -50%);
  12. }

提示:您将在 2D 转换 这一章中学习有关 transform 属性的更多知识。

垂直对齐 - 使用 Flexbox

您还可以使用 flexbox 将内容居中。请注意,IE10 以及更早的版本不支持 flexbox:

我是水平和垂直居中的。

实例

  1. .center {
  2. display: flex;
  3. justify-content: center;
  4. align-items: center;
  5. height: 200px;
  6. border: 3px solid green;
  7. }

提示:您将在我的 CSS Flexbox 这一章中学到更多关于 Flexbox 的知识。