css如何实现垂直居中对齐(你想到和想不到的都在这了)

如果 .parent 的 height 不写,你只需要 padding: 10px 0; 就能将 .child 垂直居中;如果 .parent 的 height 写死了,就很难把 .child 居中

忠告:能不写死高度就不写死高度

demo地址 https://jsbin.com/cuyifid/edit?html,css,output

方法1:table 自带功能

使用 table 标签,自带的特性可以使元素垂直居中

HTML

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>使用 table 自带属性实现垂直居中</title> </head> <body> <table class="parent"> <tr> <td class="child"> 内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容 内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容 内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容 </td> </tr> </table> </body> </html> 复制代码

CSS

.parent { border: 4px solid red; height: 600px; } .child { border: 4px solid green; } 复制代码

css如何实现垂直居中对齐(你想到和想不到的都在这了)(1)

方法2:把 div "伪装成" table

这个方法其实就是把父元素的 display 设置为 table,子元素 display 设置为 table-cell

是不是很赖皮?

HTML

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>div 伪装 table 实现垂直居中</title> </head> <body> <div class="table"> <div class="td"> <div class="child"> 内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域 内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域 内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域 内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域 内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域 内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域内容区域 </div> </div> </div> </body> </html> 复制代码

CSS

.table { display: table; border: 10px solid red; height: 600px; } .td{ display: table-cell; border: 10px solid blue; vertical-align: middle; } .child{ border: 10px solid black; } 复制代码

css如何实现垂直居中对齐(你想到和想不到的都在这了)(2)

方法3:100% 高度的 after before 加上 inline-block

这个很难想到,两边用扁担把内容给挤到中间

HTML

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>100% 高度的 afrer before 加上 inline block</title> </head> <body> <div class="parent"> <div class="child"> 这是内容这是内容这是内容这是内容这是内容这是内容这是内容这是内容 这是内容这是内容这是内容这是内容这是内容这是内容这是内容这是内容 这是内容这是内容这是内容这是内容这是内容这是内容这是内容这是内容 这是内容这是内容这是内容这是内容这是内容这是内容这是内容这是内容 这是内容这是内容这是内容这是内容这是内容这是内容这是内容这是内容 这是内容这是内容这是内容这是内容这是内容这是内容这是内容这是内容 这是内容这是内容这是内容这是内容这是内容这是内容这是内容这是内容 </div> </div> </body> </html> 复制代码

CSS

.parent { border: 4px solid blue; height: 600px; text-align: center; } .child { border: 4px solid green; display: inline-block; width: 300px; vertical-align: middle; } .parent:before { content: ''; outline: 4px solid red; display: inline-block; height: 100%; vertical-align: middle; } .parent:after { content: ''; outline: 4px solid red; display: inline-block; height: 100%; vertical-align: middle; } 复制代码

css如何实现垂直居中对齐(你想到和想不到的都在这了)(3)

方法4:margin-top: -50%

使用绝对定位

HTML

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>margin-top: -50% 实现垂直居中</title> </head> <body> <div class="parent"> <div class="child"> 内容区域内容区域内容区域内容区域内容区域内容区域内容区域 内容区域内容区域内容区域内容区域内容区域内容区域内容区域 </div> </div> </body> </html> 复制代码

CSS

.parent { height: 600px; border: 4px solid red; position: relative; } .child { border: 4px solid green; width: 300px; height: 100px; position: absolute; top: 50%; left: 50%; margin-left: -150px; margin-top: -50px; } 复制代码

css如何实现垂直居中对齐(你想到和想不到的都在这了)(4)

方法5:translate: -50%

绝对定位,设置子元素的 left 和 right 为 50%,并且加上 transform: translate(-50%,-50%);

HTML

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>translate: -50% 实现垂直居中</title> </head> <body> <div class="parent"> <div class="child"> 内容区域内容区域内容区域内容区域 内容区域内容区域内容区域内容区域 内容区域内容区域内容区域内容区域 </div> </div> </body> </html> 复制代码

CSS

.parent { height: 600px; border: 4px solid red; position: relative; } .child { border: 4px solid green; position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%); } 复制代码

css如何实现垂直居中对齐(你想到和想不到的都在这了)(5)

方法6:absolute margin auto

绝对定位,上下左右各设置为0,margin: auto;

HTMl

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>absolute margin auto 实现垂直居中</title> </head> <body> <div class="parent"> <div class="child"> 内容区域内容区域内容区域内容区域 内容区域内容区域内容区域内容区域 内容区域内容区域内容区域内容区域 内容区域内容区域内容区域内容区域 </div> </div> </body> </html> 复制代码

CSS

.parent { height: 600px; border: 4px solid red; position: relative; } .child { border: 4px solid green; position: absolute; width: 300px; height: 200px; margin: auto; top: 0; bottom: 0; left: 0; right: 0; } 复制代码

css如何实现垂直居中对齐(你想到和想不到的都在这了)(6)

方法7:终极方法 —— flex

最简单的方法了,上面的还要费那么多叼劲

display: flex; justify-content: center; align-items: center; 复制代码

HTML

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>flex 实现垂直居中</title> </head> <body> <div class="parent"> <div class="child"> 内容区域内容区域内容区域内容区域 内容区域内容区域内容区域内容区域 内容区域内容区域内容区域内容区域 </div> </div> </body> </html> 复制代码

CSS

.parent { height: 600px; border: 4px solid red; display: flex; justify-content: center; align-items: center; } .child { border: 4px solid green; width: 300px; } 复制代码

css如何实现垂直居中对齐(你想到和想不到的都在这了)(7)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页