为何Flexbox及Vuetify布局中移除<p>标签文本才垂直居中?
为什么Vuetify Flex布局中
标签会阻止文本垂直居中?
这个问题本质是HTML默认样式和Flexbox对齐逻辑共同作用的结果,咱们来一步步搞清楚:
1.
标签的默认外边距在搞鬼
浏览器给<p>元素预设了margin-top和margin-bottom(通常是1em左右),这会让<p>元素的整体占位高度远大于文本本身的高度。
在你的代码里,v-layout的align-center是让它的子元素(三个v-flex)在垂直方向上基于各自的整体高度中线对齐。当第二个v-flex里放<p>Text</p>时:
<p>带着上下外边距,撑高了所在的v-flex- 这个
v-flex的中线和另外两个v-flex(图标、按钮所在)的中线对齐,但<p>内部的文本其实是在自身内容区的顶部位置(因为<p>的外边距是在内容区之外的) - 最终视觉上就会觉得文本没和图标、按钮垂直居中
而直接把<p>去掉,放纯文本时:
- 文本是
v-flex的直接子节点,没有默认外边距,v-flex的高度完全由文本行高决定,和图标、按钮的高度接近 - 三个
v-flex的中线对齐后,文本自然就和其他元素对齐了
2. 为什么设置align-items: center没用?
你提到给外层div加align-items: center或align-content: center没效果,大概率是没找准目标元素:
v-layout本身已经通过align-center实现了子元素(v-flex)的垂直居中,再给它加这些属性不会改变结果- 如果要让
<p>内部的文本居中,应该给<p>所在的v-flex设置display: flex和align-items: center,但这只能让<p>在v-flex里居中,<p>的默认外边距还是会撑高v-flex,导致整体对齐还是有偏差。
快速解决方法
- 最简单:直接移除
<p>标签,用纯文本作为v-flex的内容 - 保留
<p>:给<p>重置默认外边距,比如添加自定义样式:p { margin: 0; },这样<p>的高度就和文本一致,v-layout的对齐就能生效 - 进阶:给第二个
v-flex添加d-flex align-center类(Vuetify内置类),同时重置<p>的外边距,双重保障对齐效果
内容的提问来源于stack exchange,提问作者Angular Monkey
相关产品推荐
相关产品推荐

