CSS 布局 - 水平和垂直对齐


元素居中

水平和垂直居中的元素

水平和垂直居中的元素

居中对齐元素

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

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

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

这个 div 元素是居中的。

代码如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. .center {
  6. margin: auto;
  7. width: 60%;
  8. border: 3px solid #73AD21;
  9. padding: 10px;
  10. }
  11. </style>
  12. </head>
  13. <body>
  14. <h1>居中对齐元素</h1>
  15. <p>要使块元素(例如 div)水平居中,请使用 margin: auto;</p>
  16. <div class="center">
  17. <p>Hello World!</p>
  18. </div>
  19. </body>
  20. </html>

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


居中对齐文本

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

这段文本是居中的。

代码如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. .center {
  6. text-align: center;
  7. border: 3px solid green;
  8. }
  9. </style>
  10. </head>
  11. <body>
  12. <h2>居中文本</h2>
  13. <div class="center">
  14. <p>这段文本是居中的。</p>
  15. </div>
  16. </body>
  17. </html>

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


居中对齐图像

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

代码如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. img {
  6. display: block;
  7. margin-left: auto;
  8. margin-right: auto;
  9. }
  10. </style>
  11. </head>
  12. <body>
  13. <h1>居中图像</h1>
  14. <p>要使图像居中,请将左右外边距设置为 auto,并使其成为一个块元素。</p>
  15. <img src="/znadmin/md/1243/0.jpg" style="width:40%">
  16. </body>
  17. </html>

左和右对齐 - 使用 position

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

这个 div 是右对齐的。

代码如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. .right {
  6. position: absolute;
  7. right: 0px;
  8. width: 300px;
  9. border: 3px solid #73AD21;
  10. padding: 10px;
  11. }
  12. </style>
  13. </head>
  14. <body>
  15. <h1>右对齐</h1>
  16. <p>如何用 position 属性将元素右对齐的例子:</p>
  17. <div class="right">
  18. <p>在我更年轻,更脆弱的岁月中,父亲给了我一些建议,从那以后我就一直在思考。</p>
  19. </div>
  20. </body>
  21. </html>

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


左和右对齐 - 使用 float

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

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. .right {
  6. float: right;
  7. width: 300px;
  8. border: 3px solid #73AD21;
  9. padding: 10px;
  10. }
  11. </style>
  12. </head>
  13. <body>
  14. <h1>右对齐</h1>
  15. <p>如何使用 float 属性将元素右对齐的例子:</p>
  16. <div class="right">
  17. <p>在我更年轻,更脆弱的岁月中,父亲给了我一些建议,从那以后我就一直在思考。</p>
  18. </div>
  19. </body>
  20. </html>

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


clearfix Hack

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

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. div {
  6. border: 3px solid #4CAF50;
  7. padding: 5px;
  8. }
  9. .img1 {
  10. float: right;
  11. }
  12. .clearfix {
  13. overflow: auto;
  14. }
  15. .img2 {
  16. float: right;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. <h1>Clearfix</h1>
  22. <p>在本例中,图像高于包含它的元素,然而它被浮动了,所以它会在容器之外溢出:</p>
  23. <div>
  24. <img class="img1" src="/images/demo.png" width="180" height="180">
  25. 这是一些文本,这是一些文本。
  26. </div>
  27. <p style="clear:right">请为包含元素添加一个带有 overflow: auto; 的 clearfix 类,以解决此问题:</p>
  28. <div class="clearfix">
  29. <img class="img2" src="/images/demo.png" width="180" height="180">
  30. 这是一些文本,这是一些文本。
  31. </div>
  32. </body>
  33. </html>

垂直对齐 - 使用 padding

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

我是垂直居中的。

代码如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. .center {
  6. padding: 70px 0;
  7. border: 3px solid green;
  8. }
  9. </style>
  10. </head>
  11. <body>
  12. <h1>垂直居中</h1>
  13. <p>在此例中,我们使用 padding 属性将 div 元素垂直居中:</p>
  14. <div class="center">
  15. <p>我是垂直居中的。</p>
  16. </div>
  17. </body>
  18. </html>

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

我是水平和垂直居中的。

代码如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. .center {
  6. padding: 70px 0;
  7. border: 3px solid green;
  8. text-align: center;
  9. }
  10. </style>
  11. </head>
  12. <body>
  13. <h1>居中</h1>
  14. <p>在此例中,我们使用 padding 和 text-align 将 div 元素垂直和水平居中:</p>
  15. <div class="center">
  16. <p>我是垂直和水平居中。</p>
  17. </div>
  18. </body>
  19. </html>

垂直对齐 - 使用 line-height

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

我是水平和垂直居中的。

代码如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. .center {
  6. line-height: 200px;
  7. height: 200px;
  8. border: 3px solid green;
  9. text-align: center;
  10. }
  11. .center p {
  12. line-height: 1.5;
  13. display: inline-block;
  14. vertical-align: middle;
  15. }
  16. </style>
  17. </head>
  18. <body>
  19. <h1>居中</h1>
  20. <p>在此例中,我们使用 line-height 属性,其值等于 height 属性,以使 div 元素居中:</p>
  21. <div class="center">
  22. <p>我是垂直和水平居中。</p>
  23. </div>
  24. </body>
  25. </html>

垂直对齐 - 使用 position 和 transform

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

我是水平和垂直居中的。

代码如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. .center {
  6. height: 200px;
  7. position: relative;
  8. border: 3px solid green;
  9. }
  10. .center p {
  11. margin: 0;
  12. position: absolute;
  13. top: 50%;
  14. left: 50%;
  15. -ms-transform: translate(-50%, -50%);
  16. transform: translate(-50%, -50%);
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. <h1>居中</h1>
  22. <p>在此例中,我们使用 position 和 transform 属性将 div 元素垂直和水平居中:</p>
  23. <div class="center">
  24. <p>我是垂直和水平居中。</p>
  25. </div>
  26. </body>
  27. </html>

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


垂直对齐 - 使用 Flexbox

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

我是水平和垂直居中的。

代码如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. .center {
  6. display: flex;
  7. justify-content: center;
  8. align-items: center;
  9. height: 200px;
  10. border: 3px solid green;
  11. }
  12. </style>
  13. </head>
  14. <body>
  15. <h1>弹性框</h1>
  16. <p>同时将 justify-content 和 align-items 属性设置为 <em>center</em> 的容器将使项目在中心(在两个轴上)对齐。</p>
  17. <div class="center">
  18. <p>我同时在水平和垂直方向对齐。</p>
  19. </div>
  20. </body>
  21. </html>

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