# 垂直居中 首先将``与``的高度设置为`100%`(为演示父元素不定宽高的效果),并清除``的默认样式。 ```css html,body{ margin: 0; height: 100%; } ``` 垂直居中大致分为两类,父元素定宽高与父元素不定宽高,将两类样式以及子容器设定好。 ```css .set-parent,.dy-parent{ width: 300px; height: 200px; background: #eee; margin: 10px 0; } .child{ width: 20px; height: 10px; background: #fff; } .dy-parent{ width: 30%; height: 20%; } ``` ## 父元素定宽高 position+margin 使用`margin: auto`使水平居中,将子容器设定为`relative`以在不脱离文档流的情况下偏移`50%`,由于本身子容器占用一定宽高,会将其撑下,使用`margin`使其向上偏移。 若是子容器使用`absolute`定位,则父容器应设置为`relative`,否则会其相对于`static`定位以外的第一个父元素进行定位,在本示例中会以浏览器为基准定位,此外`absolute`无法使用`margin: auto`水平居中。 ```html
``` ## 父元素定宽高 position+transform 原理与`position+margin`相同,CSS3的`transform`使得`div`向上平移自身高度的`50%`。 ```html
``` ## 父元素定宽高 position+calc css3提供`calc`函数,能够进行动态计算。 ```html
``` ## 父元素不定宽高 flex `flex`布局可以说是布局神器,极其强大,绝大部分现代浏览器都兼容性`flex`布局。 ```html
``` ## 父元素不定宽高 grid `grid`布局将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,`grid`布局与`flex`布局有一定的相似性,都可以指定容器内部多个项目的位置。但是,它们也存在重大区别,`flex`布局是轴线布局,只能指定"项目"针对轴线的位置,可以看作是一维布局,`grid`布局则是将容器划分成"行"和"列",产生单元格,然后指定"项目"所在的单元格,可以看作是二维布局,可以认为`grid`布局比`flex`布局强大。 ```html
``` ## 父元素不定宽高 table `table`中有`vertical-align`属性设置垂直对齐方式。 ```html
``` ## 示例 ```html 垂直居中
``` ## 每日一题 ``` https://github.com/WindrunnerMax/EveryDay ```