如何检测文本基线的位置

时间:2013-07-27 00:26:51

标签: javascript jquery css vertical-alignment

如果我有一组看起来像这样的HTML:

<div>
    This is some text, followed by an image
    <img src="some image with height greater than the text" />
</div>

图像设置为在中间垂直对齐:

img {
    vertical-align: middle;
}

然后文本将最终位于div的下方,以便与图像的中间对齐。请在此处查看示例:http://jsfiddle.net/RGWny/

有没有办法使用javascript(或jquery或任何jquery插件)来检测文本的实际位置?

我正在寻找一种方法来获得文本上方空白的大小(在px / pt / em / etc中),或者从<div>顶部到文本基线的距离

我想通过查看图像大小等来避免实际计算位置应该的位置。文本是动态的,可能包含也可能不包含多个图像,这可能是也可能不是在第一行文字。我需要相对于文本第一行的垂直位置放置另一个元素。

1 个答案:

答案 0 :(得分:2)

您可以将div内的每个文本节点包装到span服务器端甚至客户端,如下面的代码所示。然后,测量“文本上方的间隙”非常简单 - 它只是文本的垂直位置 - span相对于其父div

<div id='x'>
    This is some text, followed by an image
    <img style="vertical-align:middle" src="http://www.clker.com/cliparts/R/S/Z/4/t/f/crossed-hammers-bw-100x100-md.png" />
</div>
<script>
function wrapTextNodes(jqelem) {
    jqelem.contents()
        .filter( function() { return this.nodeType===3 && $.trim(this.nodeValue); } )
        .wrap("<span class='was-text'></span>");
}
wrapTextNodes( $('#x') );

$('#x span.was-text').each( function() {
    alert( $(this).position().top );
});
</script>