标签水平垂直居中全攻略,我一定要把你居中。
业务经常遇到一定死要你水平垂直居中。
我来解决。
行内元素(文本,图片)居中
行内元素水平居中
给父容器设置:
1 2
| text-align: center; object-fit: cover; //对图片进行剪切,保留原始比例:
|
行内元素垂直居中
给父容器设置行高:
1 2 3 4
| .father{ height:100px; line-height:100px }
|
块级元素水平垂直居中
margin
块级元素水平居中
margin:auto;即使父元素以及子元素都是设置高度于宽度,只能做到水平(左右)居中,而无法做到水平垂直居中
绝对定位 + margin
子元素需要设定高度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } .father{ position: relative; height: 500px; background: red; } .son { position: absolute; width: 200px; height: 100px; background: blue; top: 50%; left: 50%; margin-top: -50px;//需要计算自身高度一半 margin-left: -100px;//需要计算自身宽度一半 } </style> </head> <body> <div class="father"> <div class="son">子元素的内容</div> </div> <script></script> </body> </html> }
|
缺点:子元素还要自己偏移自身高度以及宽度50%,手动计算并且还需要子元素设定宽高值
绝对定位 + translate(推荐)
无需指定子元素的宽高,本人超级常用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } .father{ position: relative; height: 500px; background: pink; } .son { position: absolute; background: red; top: 50%; left: 50%; transform: translate(-50%, -50%); } </style> </head> <body> <div class="father"> <div class="son">子元素的内容</div> </div> <script></script> </body> </html>
|
超级推荐:子元素使用百分比来设定偏移量,并且子元素不需要设定宽高
flex 布局
代码简单
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } .father{ display: flex; //flex布局 justify-content: center; //水平居中 align-items: center; //垂直居中 min-height: 100vh; background: pink; } .son { background: red; } </style> </head> <body> <div class="father"> <div class="son">子元素的内容</div> </div> <script></script> </body> </html>
|
缺点:代码虽然简单,不过父元素里面的所有子元素都是居中的
flex + margin:auto(推荐)
推荐,可以指定子元素居中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; } .father{ display: flex; min-height: 100vh; background: pink; } .son { margin: auto; background: red; } </style> </head> <body> <div class="father"> <div class="son">子元素的内容,想水平垂直居中</div> <div class="son2">这个元素不想水平垂直居中</div> </div> <script></script> </body> </html>
|
推荐:CSS3 基本都能支持现在的项目使用此方法居中简单