移动Web单行文字垂直居中的问题

单行文字垂直居中的方式你可能可以脱口而出,height和line-height设置为同样就行了,或者设置相同的padding-top和padding-bottom值。

上图是Chrome浏览器下的效果,没什么好惊讶的,完全符合我们的预期。

然后我们到移动端,设置相等的height和line-height,情况就变的很古怪,先上个截图(截图来自易信的Webview):

这个截图来自我的魅蓝,从测试那里借了几个Android手机,基本都是这样显示的,文字明显偏上了,而且height越小越明显:

快贴上上边框了。。。。

因为用transform scale的方式做的1px border,所以怀疑是transform的原因。就先把这段CSS去掉,效果挺明显,我的魅蓝以及苹果手机都是居中的,但是依然有好多android机器依然不能居中,偏上偏下的都有。

还怀疑过是不是代码互相影响,就写了个demo,就是上面的截图们,排除。

一通谷歌,也没什么乱用,看到有答案说line-height在移动端表现异常,然后我就换成padding的方式,依然没什么乱用,而且IOS此时也开始偏上了:

和line-height出奇的一致。。

当时的我内心是崩溃的,多么简单的居中居然这么多幺蛾子,当时在想这一定是浏览器的渲染bug。。。

经过漫长的左改右改。。后来发现不管手机上怎么偏上偏下,但PC上(chrome开发者工具的手机器)一直是稳稳居中的,我又回头重新看了下自己的CSS:

/*关键代码*/
{
  height: 20px;
  line-height: 20px;
  font-size: 10px;
}

没什么异常,但是Chrome对于中文是不支持12px以下的,小于12px的会统一显示成12px,灵光一闪,是不是这个原因呢,抱着试试看的态度将font-size设置成了12px。

竟然居中了!!!!line-height和padding的方式都是居中的了!!!

锁定了问题就着手解决,有人说用 -webkit-text-size-adjust: none;  ,不过没用,最后想到了一个终极方法:

和设计湿沟通。。。。

最后统一改为12px,各个手机终于居中了,不过还是有一个手机没有居中,美图手机!!!!不管他了。顺便吐槽一句,这手机巨丑。。图标巨丑。。。没人打我吧。。。上图一张。。。

查阅了一些资料,Chrome只是将中文设定最小为12px,英文是支持10px以下的,而移动端其实是支持12px以下字体的,但不清楚为何居中异常。

所以移动端10px的英文居中是正常的,尤其是小写字母。。

时间: 2024-12-28 15:03:26

移动Web单行文字垂直居中的问题的相关文章

as3.0 TextField中单行文字内容垂直居中

在开头,先首说一下TextField中单行文字空间是怎样的.图如下 从图中可以看到,当为文字设定像素大小时,我们都可以从TextField中的文字空间信息取得两个信息Ascent与Descent,文字空间与边距的2px一般是固定的.所以如果我们想在TextField中单行文字垂直居中的话,可以这样设定TextField的高度为Ascent+Descent+4px.具体在as3.0中的个人实现代码实例如下: package { import fl.controls.Label; import fl

css实现固定高度及未知高度文字垂直居中的完美解决方案

在工作当中我们经常碰到类似于"固定高度文字垂直居中及未知高度垂直居中问题",或者 "图片垂直居中问题",而我们最容易会想到使用表格来垂直居中,或者如果是单行文字的话使用height(高度)和line-height(行高)来解决,但是假如页面有多行文字的话 固定高度该怎么解决? 或者未知高度我们该用css怎么解决? 且兼容各个游览器! 一:单行文字垂直居中: 如果一个容器中只有一行文字的话,让他垂直居中比较简单 直接定义height(高度)和 line-height(

如何使元素/文字 垂直居中?

昨天面试被问到这个问题,自己常用的是方法一和方法二,回来后查阅到了方法三,感觉莫名的好用,记录一下~ 方法一:单行文字垂直居中 line-height等于height 方法二:块级元素垂直居中 position定位或者flex布局 水平居中 margin: 0 auto;+垂直位移position: relative:top: 50%; 注意:此时当前操作元素的头部到达页面一半的水平线处, 最后使用transform: translateY(-50%),使得元素向上平移(translate)自身

用CSS如何实现单行图片与文字垂直居中

从上面的代码可以看出错误就是把样式应用在块元素中了 我们只需要改样式为 以下为引用的内容:.style img{vertical-align:middle;.....} 如果STYLE中有其它如INPUT或其它内联元素可写成 以下为引用的内容:.style img,.style.input{vertical-align:middle;.....}或.style *{vertical-align:middle;.....}/*在不影响其它元素的情况下使用这个通配符*/ 以上是在没有设置高度/行高的

多行文字或者单行文字的垂直居中解决方案

做项目的时候经常会遇到多行文字的垂直居中,如果是单行文字直接:height:40px;line-height:40px;就可以了.如果是多行文字,用这个方法,只能看见第一行文字,基于这种情况,找到了一中比较好的方法. <!doctype Html> <Html> <Head> <Meta Charset="Utf-8"> <Title>文字垂直居中</Title> <Style> Div{ Width:

如何设置块级元素的单行文本垂直居中

这里有两个条件: ①文本要求是单行的 ②它的外部容器是一个块级元素 满足这两个条件之后,只需要设置文本的line-height等于外部块级元素的高度即可. 参照如下代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>单行文本垂直居中</title> <style> h2{ width: 3

DIV+CSS如何让文字垂直居中?(转)

此篇文章转自网络,但是我忘了原文地址,如果有人知道,麻烦告知一声~ 在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中的确是有vertical-align属性,但是它只对(X)HTML元素中拥有valign特性的元素才生效,例如表格元素中的<td>.<th>.<caption>等,而像<div>.<spa

实现DIV层内的文字垂直居中

有时候,为了网页设计的美观,需要把div+css设计的页面里的某些div层里的文字垂直居中,包括多行文字以及单行文字:方法有不少,但真正能实现而代码又简洁的介绍不多,flymorn就为大家介绍几种适用的div文字垂直居中的方法. 首先要知道css里vertical-align无效,W3C官方对vertical-align做了下面的解释: " This property affects the vertical positioning inside a line box of the boxes

高度百分比时的文字垂直居中

常用css的开发人员都知道让单行文字水平居中用text-align:center垂直方向居中有一个小技巧是让line-height=height,一般用到这个的时候我们的高度都是固定的px值,但今天我设置高度为百分比时,也想让文字垂直居中,于是有了下面这段代码 <!DOCTYPE html><html><head lang="en">    <meta charset="UTF-8">    <title>