html2canvas 文字向下偏移兼容方法

上周有个项目,搞了个转海报的功能。
结果发现,iOS1 5 及以上的一些新机型上,海报里的文字会向下偏移,这可真是头疼。
一开始,我还以为是我们用的字体或者字号出了问题,结果强制统一了字体,问题还是存在。

然后我就在网上搜,发现很多人都有这个问题,说是跟字号和字体不一致有关。
我仔细看了下,确实,虽然我用了相同的字体,但设备间的差异还是很大。

我试着调整了一下样式,但效果不明显。
这问题只在海报的部分出现,不是整体,所以我觉得可能不是样式的问题。

后来,我深入研究了2 canvas的源码,发现关键在于渲染文本的那个renderTextNode方法。
这个方法负责获取文本样式,然后在canvas上绘制。
我发现,问题出在baseline属性上,这个属性导致了文本对齐的差异。

我检查了一下baseline的计算方式,发现2 canvas内部对相同字体和字号文本保存了缓存,为了提高效率。
它是通过创建一个空的div,插入一个span和一张图片,然后利用offsetTop的差值来计算baseline。

我尝试修改了一下,发现如果用行高加上一个基值来计算baseline,会更简单一些,而且效果不错。
这个方法解决了我们特定设备的问题,虽然不能保证所有设备都能兼容,但至少我们那三台设备的问题都解决了。

反正你看着办,世界杯期间,希望大家都享受观赛乐趣吧。

html css怎么样才能把文字放在图片的正下方

2 02 3 年,我那个朋友想让我帮忙调整网页代码,让文字在图片的正右边。
我试了试,发现用vertical-align: middle;就能实现。
不过,他想要的效果是文字在图片下方,我试了半天也没成功,算了,你看着办吧。

html怎么把文字右移

说实话,要在HTML里把文字往右挪,用CSS弄挺简单的。
就这几种法子:
1 . 用text-align:right;这招最直接。
你看啊,直接加上text-align:right;文字就在父框里右对齐了。
比如这么写:
这是右对齐的文字
这样写,文字肯定在框子右边了。

2 . 或者用margin-left搞。
你给它加上margin-left:5 0px;,整个框就往右移5 0像素。
像这样:
这是向右移动了5 0px的文字
注意,这是把整个框往右移,框里的文字跟着走。

3 . 再或者用padding-left。
这招是给框子左边加垫子,框子变大,文字看起来就像往右了。
比如:
这是通过内边距向右移动的文字
这跟margin-left不一样,margin是框子外面加垫子,padding是框子里面加。

4 . 最后这招厉害了,用position和left。
你把position设成relative或absolute,再加个left:5 0px;,框子就能随便定位了。
像这样:
这是通过定位向右移动的文字
这招特别适合要精确控制位置的时候。

你看,这几种方法各有各的用法。
text-align适合直接右对齐,margin和position适合要精确控制位置。
实际用的时候,得看你要干啥,选合适的法子就行。