方法1. Flex弹性布局:
- .container { // 父级容器
- display: flex;
- align-items: center; /* 垂直居中对齐 */
- }
这种方法的优点是简单快捷,缺点是不适合有动画的场景。因为flex的自动内容填充,会破坏动画效果需要的绝对定位。
方法2. 绝对定位(不推荐):
- .parent { // 父级容器
- position: relative;
- height: ${heisht}px; /* 父元素的高度 */
- }
-
- .child { //需要垂直对齐的子元素
- position: absolute;
- top: 50%;
- transform: translateY(-50%);
- }
这个方法有个致命的缺点: 采用绝对定位以后,元素脱离了文档流,也就不会占据原有的位置,
所以,行内的每一个元素的定位参照点都是父级元素的左上角原点,这样带来的后果就是:
每一个元素都需要手动计算从父级元素最左边开始的margin-left, 否则元素就会都堆叠在最左边的位置,这样就很繁琐,而且也失去了float: left自动占位的优势。
方法3: 对子元素使用 transform: translateY(+xx%); (xx表示移动的比例)
这种方法不会影响动画效果,也不需要绝对定位,唯一就是需要调整translateY的偏移值。
- #nav .logo {
- /* 注意: div必须设置宽高,否则背景色设置不会生效! */
- width: 56px;
- height: 56px;
- background-color: #ff6700;
- border-radius: 5px;
- transform: translateY(+40%);
- /* overflow: hidden是隐藏动画图标的关键 */
- overflow: hidden;
- }
方法4: 对于全部是行内元素的情况,可以使用line-height= height,来使得文字垂直居中
- . element {
- /* 因为line-height会让内容自动撑开元素高度,
- 当height和line-height相等时,文字就能垂直居中 */
- height: 100px;
- line-height: 100px;
-
- }
因为line-height会让内容自动撑开元素高度,
所以当height和line-height相等时,文字就能垂直居中
方法5. 对img标签使用vertical-align: middle使img图片和相邻文字垂直方向对齐
- // html结构:
-
- <a :href="#">
- <img :src="xxxx">
- <span>xxx文字内容</span>
- </a>
-
- // css代码:
-
- img{
- width: xxpx;
- height: xxpx;
- vertical-align: middle;
- }