CSS中使用vertical-align:middle使<span>元素垂直居中的坑

    在CSS样式中,vertical-align 属性设置元素的垂直对齐方式,想必学过一个前端的人都知道这个东西,也知道怎么用。今天在做 项目的时候遇到一个坑,在这里做个记录。先简单说一下vertical-align 这个属性吧,根据查阅文档可以知道它有如下几个参数:baseline:与元素的基线对齐。
middle:与元素中部对齐。
sub:字下沉。
super:字上升。
text-top:文本顶部对齐。
text-bottom:文本底部对齐。
top:和本行位置最高元素对齐。
bottom:和本行位置最低元素对齐

        本文要讨论的就是其中middle的使用,我在做项目过程中,需要在input标签后加个<span>标签作为提示内容的显示,这两个标签都放在一个<div>块中,在将<span>标签style属性设置为vertical-align:middle 后,元素内容并没有垂直居中,在仔细查阅资料后终于找到了一些原因以及解决办法。

在W3C官方中对 vertical-align做了下面的解释:
This property affects the vertical positioning inside a line box of the boxes generated by an inline-level element.
事实上,一个Box中由很多行很多元素组成,vertical-align只作用于在同一行内的元素,它的垂直并不是相对于整个Box而言的。如果把 vertical-align:middle 放到一个单元格元素,即table的td元素中,它的垂直居中显示是没任何问题的,因为它表示相对于改行的垂直高度居中显示。而在我设定的<div>块中并不只存在一行,因此它无法识别默认显示在顶部。

        为了解决这个问题,我找到了两种方法。一个是我们可以设置<span>元素style中的 line-heght 值为其父元素<div>的height值,这样 vertical-align:middle 就会使<span>元素内容垂直居中。   另外还有种方法,就是将要设置垂直居中的元素的父元素style属性添加 display:table-cell 将其作为单元格显示,这样使用 vertical-align:middle 也可以实现垂直居中。建议使用第一种方法,毕竟根据实际需要,我们一般使用<div>作为父元素其中不止一种子元素,使用单元格格式会增加一些 限制,出现一些意想不到的问题。 

  • 10
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值