字体垂直居中的几种实现方法

这几天遇到了好多关于字体垂直居中的问题,整理一下,希望对大家也有帮助。

vertical-align:middle

vertical-align 用来指定行内元素(inline)和行内块级元素(inline-block)或表格单元格(table-cell)元素的垂直对齐方式。

inline和inline-block

对于行内元素和行内块级元素,vertical-alignmiddle的处理方式都是一样的。
baseline——基线

元素基线与父元素的基线对齐。

middle——垂直居中

元素中垂线与父元素的基线加上小写x一半的高度值对齐。

当我们对想要垂直居中的元素设置vertical-align:middle时,往往得不到我们预想的垂直效果。
核心代码:

<style>
.va{vertical-align: middle;}
div{font-size: 36px;
margin: 20px auto;border: 1px dashed #000;text-align: center;}
.inline{display: inline;
font-size: 12px;
border: 1px dashed #000;}
</style>

<div>         
<span class="va inline">inline垂直居中</span>
inline垂直居中
</div>

这里写图片描述

很明显,这个垂直居中的效果没有我们想象中那么好。
但是如果我们改变策略:
把设置vertical-align: middle;的元素作为标准,周围的文字就会垂直对齐。
更加通俗的讲,就是设置vertical-align: middle;的元素更大一点,周围的文字元素要更小一点,就能实现周围文字的垂直居中。
核心代码

<style>
.va{vertical-align: middle;}
div{font-size: 12px;//更改了大小
margin: 20px auto;border: 1px dashed #000;text-align: center;}
.inline{display: inline;
font-size: 36px;//更改了大小
border: 1px dashed #000;}
</style>

<div>         
<span class="va inline">inline垂直居中</span>
    inline垂直居中
</div>

这里写图片描述
这才是我们想要的垂直居中的效果。


table-cell

baseline——基线 (与sub, super, text-top, text-bottom, <length>, <percentage>等属性具有同样的效果)

与同行单元格的基线对齐。

middle——垂直居中

单元格垂直居中

本文讨论的是文体垂直居中,该属性的情况就不深入讨论了。


line-height + height

当line-height等于height时,可以实现字体垂直居中。
具体实现:
目标元素(字体)的line-height大小等于父类元素的height大小,可以实现垂直居中。
核心代码:

<style>
* { margin: 0;padding: 0;}
div{width: 300px;
height: 100px;//父类元素高度
margin: 20px auto;border: 1px dashed #000;text-align: center;}
.lh{font-size:24px;
line-height:100px; //目标垂直字体的行高
}
</style>

<div>         
 <span class="lh">inline垂直居中</span>
</div>

这里写图片描述


行内块级元素垂直居中+vertical-align:top

这种方法比较麻烦,但是适用于更多的场合。
实现过程如下:
1. 更改字体所在的元素为display:inline-blockposition:relative;
2. 设置字体的line-heightfont-size相等;
3. 设置字体所在元素,top:50%;vertical-align:topmargin-top为负的font-size大小的一半。

核心代码

<style>
* { margin: 0;padding: 0;}
 div{width: 300px;height: 100px;margin: 20px auto;border: 1px dashed #000;text-align: center;}
.middle{display: inline-block;position:relative;
font-size:24px;line-height:24px;
top:50%;margin-top:-12px;
vertical-align:top; }
</style>

<div>         
<span class="middle">inline垂直居中</span>
</div>

这里写图片描述

实现的思路:
1. 将字体放置到一个行内块级元素中
2. 将行内块级元素垂直居中

细节说明:
  • display:inline-blockspan元素变成一个行内块级元素,配合position:relative;top:50%;margin-top:-12px;可以实现块级元素垂直居中。

  • font-sizeline-height相等是为了保证span元素的高度不被行间距所影响,高度只由font-size控制,方便了margin-top的设置。

  • vertical-align:top是为了保证字体是顶格的,让文体看起来更像是垂直居中。

前两条估计大家都懂,我来详细说说最后一条vertical-align:top

行内框

vertical-align:top
把元素的顶端与行中最高元素的顶端对齐。

我们先来看看
vertical-align:baseline | middle | top 这三种的效果。
基线的效果:
这里写图片描述

中线的效果:
这里写图片描述

顶线的效果:
这里写图片描述

我们可以这样想象:
由于我们设置了position:relative;top:50%;margin-top:-12px;,这相当于从上向下排列元素。
如果我们要保证字体也垂直居中,也必须字体在元素内部的从上到下排列(也就是所说的顶格),所以需要设置vertical-align:top

  • 10
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于Java文本框字体垂直居中,可以使用以下代码实现: ``` JTextField textField = new JTextField(); textField.setHorizontalAlignment(JTextField.CENTER); textField.setVerticalAlignment(JTextField.CENTER); ``` 这里使用了JTextField类的setHorizontalAlignment和setVerticalAlignment方法,分别用来设置文本框中的文本水平和垂直方向的对齐方式,将其设置为居中即可实现文本垂直居中。 另外,关于CSS文字垂直居中的8种方法,可以参考以下内容: 1. 使用line-height属性,将行高设置为与容器高度相同。 2. 使用display:table-cell属性,将文本容器的display属性设置为table-cell,然后使用vertical-align:middle属性将文字垂直居中。 3. 使用display:flex属性,将文本容器的display属性设置为flex,然后使用align-items:center属性将文字垂直居中。 4. 使用position:absolute属性,将文本容器的position属性设置为absolute,然后使用top:50%和transform:translateY(-50%)属性将文字垂直居中。 5. 使用display:inline-block和vertical-align:middle属性,将文本容器的display属性设置为inline-block,然后使用vertical-align:middle属性将文字垂直居中。 6. 使用padding和line-height属性,将文本容器的padding属性设置为相同的值,然后将line-height设置为与容器高度相同即可。 7. 使用CSS Grid布局,将文本容器的display属性设置为grid,然后使用align-items:center属性将文字垂直居中。 8. 使用CSS Grid布局,将文本容器的display属性设置为grid,然后使用place-items:center属性将文字水平和垂直居中。 希望这些内容能对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值