[关闭]
@15013890200 2018-09-21T17:56:12.000000Z 字数 2031 阅读 504

元素垂直居中

css flex 布局 grid

元素垂直居中,一直都是前端初学者头疼的地方。之前也一直困扰着我。虽然实现方式多样,但是却找不到一个最优解。终于有一次看到别人整理的多达20多种方法,让我茅塞顿开,原来还可以这样玩。自己也亲测了自己感兴趣qie简洁的10多种方法。


总结:flex方法最为简便(当然grid也一样)

  • 将父元素display属性设置为flex,就可以通过很多种方式达到垂直居中效果
  • 将父元素display属性设置为grid,也可以通过很多种方式达到垂直居中效果,方法比flex还多。最特别的方法是 grid + template 方式,将父元素当画布处理,对应第 9 种方法
  • 绝对定位也可以解决垂直居中问题。其中transform属性 + translate方法很推荐,对应方法5
  • 外层line-height设置为父元素的高度,内层line-height高度设为1,也可以勉强达到,对应方法1
  • 利用伪类元素,对应方法2

代码

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>vertical</title>
  6. <style type="text/css">
  7. *{clear: both;margin: 0;padding: 0;}
  8. .div_parent{width: 300px;height: 200px;border:1px solid #ddd;text-align: center;margin: auto;}
  9. .way{display: inline-block;width: 200px;height: 50px;}
  10. .parent1{line-height: 200px;}
  11. .way1{line-height: 1;}
  12. /** 推荐使用 */
  13. .parent2:before{content: '';display: inline-block;height: 100%;width: 0;vertical-align: middle;}
  14. .way2{vertical-align: middle;}
  15. /** 需要事先知道父容器的宽高 */
  16. .parent3{position:relative;}
  17. .way3{position: absolute;top: 50%;left: 50%;margin-top: -25px;margin-left:-100px;}
  18. /** 定位元素需要指定高度(百分比也算) **/
  19. .parent4{position: relative;}
  20. .way4{position: absolute;top: 0;right: 0;bottom: 0;left: 0;margin: auto;}
  21. /** css3 transform属性 + translate方法 **/
  22. .parent5{position: relative;}
  23. .way5{position: absolute;top: 50%;left: 50%;transform: translate(-50%,-50%);}
  24. /** flex + align-items 最简洁 **/
  25. .parent6{display: flex;align-items: center;justify-content: center;}
  26. .way6{}
  27. /** flex + margin **/
  28. .parent7{display: flex;}
  29. .way7{margin: auto;}
  30. /** flex + align-self **/
  31. .parent8{display: flex;justify-content: center;}
  32. .way8{align-self: center;}
  33. /** grid + template 将元素当画布用,很溜 **/
  34. .parent9{display: grid;grid-template-columns: 1fr auto 1fr;grid-template-rows: 1fr auto 1fr;
  35. grid-template-areas:
  36. '. . .'
  37. '. amos .'
  38. '. . .';
  39. }
  40. .way9{grid-area: amos;}
  41. /** grid + align-items **/
  42. .parent10{display: grid;align-items: center;justify-content: center;}
  43. .way10{}
  44. /** grid + align-self **/
  45. .parent11{display: grid;justify-content: center;}
  46. .way11{align-self: center;}
  47. /** grid + margin **/
  48. .parent12{display: grid;}
  49. .way12{margin: auto;}
  50. </style>
  51. </head>
  52. <body>
  53. <div class="div_parent parent12">
  54. <div class="way way12">我的文件夹科技馆陶如果减街文化馆覅而
  55. 华润给欧文和覅而阿努皓哥飞日国际化</div>
  56. </div>
  57. </body>
  58. </html>
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注