当前位置:   article > 正文

css实现垂直居中的12种方法,用起来666_css垂直居中

css垂直居中

今天利用周末整理了一下垂直居中的问题,这也是在平时的开发中用的较多的技术栈。

1.单行文字的垂直居中

       原理:利用行高等于盒子的高来实现

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <style>
  7. .content {
  8. width: 400px;
  9. height: 100px;
  10. background: #ccc;
  11. line-height: 100px;
  12. text-align: center;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <div class="content">Hello World</div>
  18. </body>
  19. </html>

2.多行文本居中

原理:子盒子设置为display:inline-block,利用line-height代替height

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <style>
  7. h2 {
  8. text-align: center;
  9. }
  10. .box {
  11. width: 500px;
  12. border: 1px solid #f00;
  13. margin: auto;
  14. line-height: 200px;
  15. text-align: center;
  16. }
  17. .box2 .content {
  18. display: inline-block;
  19. height: auto;
  20. line-height: 1;
  21. width: 400px;
  22. background: #ccc;
  23. }
  24. </style>
  25. </head>
  26. <body>
  27. <div class="box box2">
  28. <div class="content">
  29. 好多新鲜的内容,尽在 <a href="https://blog.csdn.net/qq_36818627">
  30. CSDN </a> 记得点赞吆! 當然若有不对之处还请多批评指正,留下足迹,定会虚心请教。</div>
  31. </body>
  32. </html>

3.多行文本居中

原理:利用:before伪类元素设定为100%高的inline-block,再搭配上将需要居中的子元素同样设置成inline-block性质后,就能使用vertical-align:middle来达到垂直居中的目的了

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <style>
  7. h2 {
  8. text-align: center;
  9. }
  10. .box {
  11. width: 500px;
  12. height: 250px;
  13. border: 1px solid #f00;
  14. margin: auto;
  15. text-align: center;
  16. }
  17. .box::before {
  18. content: '';
  19. display: inline-block;
  20. height: 100%;
  21. width: 0;
  22. vertical-align: middle;
  23. }
  24. .box .content {
  25. width: 400px;
  26. background: #ccc;
  27. display: inline-block;
  28. vertical-align: middle;
  29. }
  30. </style>
  31. </head>
  32. <body>
  33. <h2> :before + vertical-align</h2>
  34. <div class="box">
  35. <div class="content">
  36. 好多新鲜的内容,尽在 <a href="https://blog.csdn.net/qq_36818627">
  37. CSDN </a> 记得点赞吆! 當然若有不对之处还请多批评指正,留下足迹,定会虚心请教。</div>
  38. </div>
  39. </body>
  40. </html>

4.多行文本居中

原理:子绝父相 和 top:50%  left:50% 加上 margin的一半的负值,这个在平时用的还是挺多的。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <style>
  7. h2 {
  8. text-align: center;
  9. }
  10. .box {
  11. width: 500px;
  12. height: 250px;
  13. border: 1px solid #f00;
  14. margin: auto;
  15. position: relative;
  16. }
  17. .box4 .content {
  18. width: 400px;
  19. background: #ccc;
  20. height: 70px;
  21. position: absolute;
  22. top: 50%;
  23. left: 50%;
  24. margin-left: -200px;
  25. margin-top: -35px;
  26. }
  27. </style>
  28. </head>
  29. <body>
  30. <h2>4.absolute + margin负值的一半</h2>
  31. <div class="box box4">
  32. <div class="content">
  33. 好多新鲜的内容,尽在 <a href="https://blog.csdn.net/qq_36818627">
  34. CSDN </a> 记得点赞吆! 當然若有不对之处还请多批评指正,留下足迹,定会虚心请教。</div>
  35. </div>
  36. </body>
  37. </html>

5.多行文本居中

原理:子绝父相 和margin auto实现。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <style>
  7. h2 {
  8. text-align: center;
  9. }
  10. .box {
  11. width: 500px;
  12. height: 250px;
  13. border: 1px solid #f00;
  14. margin: auto;
  15. position: relative;
  16. }
  17. .content {
  18. width: 400px;
  19. background: #ccc;
  20. height: 70px;
  21. position: absolute;
  22. top:0;
  23. left:0;
  24. margin: auto;
  25. }
  26. </style>
  27. </head>
  28. <body>
  29. <h2>5.absolute + margin auto</h2>
  30. <div class="box box4">
  31. <div class="content">
  32. 好多新鲜的内容,尽在 <a href="https://blog.csdn.net/qq_36818627">
  33. CSDN </a> 记得点赞吆! 當然若有不对之处还请多批评指正,留下足迹,定会虚心请教。</div>
  34. </div>
  35. </body>
  36. </html>

6.多行文本居中

原理:利用绝对定位时的top 与right设置元素的上方跟左方各为50%,再利用translate(-50%,-50%)位移居中元素自身宽与高的50%就能达成居中的目的了

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <style>
  7. h2 {
  8. text-align: center;
  9. }
  10. .box {
  11. width: 500px;
  12. height: 250px;
  13. border: 1px solid #f00;
  14. margin: auto;
  15. position: relative;
  16. }
  17. .box5 .content {
  18. width: 400px;
  19. background: #ccc;
  20. position: absolute;
  21. top: 50%;
  22. left: 50%;
  23. transform: translate(-50%, -50%);
  24. }
  25. </style>
  26. </head>
  27. <body>
  28. <h2>6.absolute + transform</h2>
  29. <div class="box box5">
  30. <div class="content">
  31. 好多新鲜的内容,尽在 <a href="https://blog.csdn.net/qq_36818627">
  32. CSDN </a> 记得点赞吆! 當然若有不对之处还请多批评指正,留下足迹,定会虚心请教。</div>
  33. </div>
  34. </body>
  35. </html>

7.多行文本的居中加盒子居中

原理:不为元素设置宽度,利用padding 和margin:0 auto来实现,这个技巧用起来也是666.

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <style>
  7. h2 {
  8. text-align: center;
  9. }
  10. .box {
  11. width: 500px;
  12. padding: 50px 0;
  13. border: 1px solid #f00;
  14. margin: auto;
  15. }
  16. .content {
  17. width: 300px;
  18. padding: 20px;
  19. text-align: center;
  20. line-height: 28px;
  21. background-color: #ccc;
  22. margin: 0 auto;
  23. }
  24. </style>
  25. </head>
  26. <body>
  27. <h2>7.padding + margin</h2>
  28. <div class="box">
  29. <div class="content">
  30. 好多新鲜的内容,尽在 <a href="https://blog.csdn.net/qq_36818627">
  31. CSDN </a> 记得点赞吆! 當然若有不对之处还请多批评指正,留下足迹,定会虚心请教。</div>
  32. </div>
  33. </body>
  34. </html>

8.多行文本居中

原理:父层display:flex以及设定次轴(cross axis)属性align-items:center 

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <style>
  7. h2 {
  8. text-align: center;
  9. }
  10. .box {
  11. width: 500px;
  12. height: 250px;
  13. border: 1px solid #f00;
  14. margin: auto;
  15. display: flex;
  16. justify-content: center;
  17. align-items: center;
  18. }
  19. .content {
  20. width: 400px;
  21. background: #ccc;
  22. }
  23. </style>
  24. </head>
  25. <body>
  26. <h2>8.flex + align-items</h2>
  27. <div class="box box7">
  28. <div class="content">
  29. 好多新鲜的内容,尽在 <a href="https://blog.csdn.net/qq_36818627">
  30. CSDN </a> 记得点赞吆! 當然若有不对之处还请多批评指正,留下足迹,定会虚心请教。</div>
  31. </div>
  32. </body>
  33. </html>

9.多行文本居中

原理:flex-direction:column直式排法,搭配:before伪元素适用flex-grow伸展

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <style>
  7. h2 {
  8. text-align: center;
  9. }
  10. .box {
  11. width: 500px;
  12. height: 250px;
  13. border: 1px solid #f00;
  14. margin: auto;
  15. display: flex;
  16. /*flex-direction: row;*/
  17. align-items: center;
  18. }
  19. .box:before {
  20. content: '';
  21. flex-grow: .5;
  22. }
  23. .content {
  24. width: 400px;
  25. background: #ccc;
  26. }
  27. </style>
  28. </head>
  29. <body>
  30. <h2>9.Flex + :before + flex-grow</h2>
  31. <div class="box box7">
  32. <div class="content">
  33. 好多新鲜的内容,尽在 <a href="https://blog.csdn.net/qq_36818627">
  34. CSDN </a> 记得点赞吆! 當然若有不对之处还请多批评指正,留下足迹,定会虚心请教。</div>
  35. </div>
  36. </body>
  37. </html>

10 .多行文本居中

原理:父层元素设定display:flex,接着在需要垂直居中的元素上设定margin:auto,即可自动居中

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <style>
  7. h2 {
  8. text-align: center;
  9. }
  10. .box {
  11. width: 500px;
  12. height: 250px;
  13. border: 1px solid #f00;
  14. margin: auto;
  15. display: flex;
  16. }
  17. .content {
  18. width: 400px;
  19. background: #ccc;
  20. margin: auto;
  21. }
  22. </style>
  23. </head>
  24. <body>
  25. <h2>10.Flex + margin</h2>
  26. <div class="box box7">
  27. <div class="content">
  28. 好多新鲜的内容,尽在 <a href="https://blog.csdn.net/qq_36818627">
  29. CSDN </a> 记得点赞吆! 當然若有不对之处还请多批评指正,留下足迹,定会虚心请教。</div>
  30. </div>
  31. </body>
  32. </html>

11.多行文本居中

原理:父级设置为伸缩布局,对子元素的次轴设置align-self:center

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <style>
  7. h2 {
  8. text-align: center;
  9. }
  10. .box {
  11. width: 500px;
  12. height: 250px;
  13. border: 1px solid #f00;
  14. margin: auto;
  15. display: flex;
  16. justify-content: center;
  17. }
  18. .content {
  19. width: 400px;
  20. background: #ccc;
  21. align-self: center;
  22. }
  23. </style>
  24. </head>
  25. <body>
  26. <h2>11.Flex + align-self</h2>
  27. <div class="box box7">
  28. <div class="content">
  29. 好多新鲜的内容,尽在 <a href="https://blog.csdn.net/qq_36818627">
  30. CSDN </a> 记得点赞吆! 當然若有不对之处还请多批评指正,留下足迹,定会虚心请教。</div>
  31. </div>
  32. </body>
  33. </html>

12 .多行文本居中

原理:在正常的状况下,align-content 仅能对次轴多行flex item做居中,但是当我今天子层元素不确定有多少个时,且有时可能会有单个的情况出现时,此技巧就能用到了(当然你也能有其他解法),既然是多行子元素才能用,那我们就为单个子组件多加两个兄弟吧,使用:before以及:after 来让子元素增加到多个,这样就能使用flex的align-content属性来居中

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <style>
  7. h2 {
  8. text-align: center;
  9. }
  10. .box {
  11. width: 500px;
  12. height: 250px;
  13. border: 1px solid #f00;
  14. margin: auto;
  15. display: flex;
  16. flex-wrap: wrap;
  17. justify-content: center;
  18. align-content: center;
  19. }
  20. .content {
  21. width: 400px;
  22. background: #ccc;
  23. }
  24. .box11:before,
  25. .box11:after{
  26. content: '';
  27. display: block;
  28. width: 100%;
  29. }
  30. </style>
  31. </head>
  32. <body>
  33. <h2>12.Flex + align-content</h2>
  34. <div class="box box11">
  35. <div class="content">
  36. 好多新鲜的内容,尽在 <a href="https://blog.csdn.net/qq_36818627">
  37. CSDN </a> 记得点赞吆! 當然若有不对之处还请多批评指正,留下足迹,定会虚心请教。</div>
  38. </div>
  39. </body>
  40. </html>

当然使盒子居中的方法不止这些,上面仅仅是我所接触到的,随着知识的累积,慢慢再完善!比如Grid布局、cale等方式...

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/702781
推荐阅读
相关标签
  

闽ICP备14008679号