javascript - 如何计算文本的基线

标签 javascript html css baseline

我正在尝试编写一个测试来确定文本是否在 <input> 中呈现。与标签具有相同的基线:

label adjacent to input with baselines highlighted

为了做到这一点,我想计算每个元素中呈现的文本的基线并比较这两个值。这可能吗?如果可以,它是如何实现的?如果不是,是否有更好的方法来确定两个元素的基线相同?

我找到了一种方法来确定标签的基线,它似乎可以可靠地工作:

function getBaseline(element) {
    var span = document.createElement("span");
    span.setAttribute("style", "font-size:0");
    span.innerText = "A";
    jQuery(element).prepend(span);
    return span.getBoundingClientRect().bottom;
}

但是,此方法不适用于 <input> ,因为在那种情况下我无法插入跨度。

最佳答案

我找到了一种根据您的函数获取计算基线的方法。诀窍是创建一个包装器并将元素中的所有样式应用到它。我可以确认它适用于 OSX 上的 Firefox (v38) 和 Chrome (v44)。不幸的是,它在 Safari 中无法正常工作。

DEMO

function getBaseline(element) {
    element = jQuery(element);
    var span = document.createElement("span");
    span.setAttribute("style", "font-size:0");
    span.innerText = "A";

    var wrapper = document.createElement("span");
    applyCSSProperties.call(wrapper, element);
    element.wrap(wrapper);
    element.before(span);

    var computed = span.getBoundingClientRect().bottom;

    span.remove();
    element.unwrap(wrapper);

    return computed;
}

function applyCSSProperties(element) {
    var styles = {};
    var comp = getComputedStyle(element[0]);

    for(var i = 0; i < comp.length; i++){
        styles[comp[i]] = comp.getPropertyValue(comp[i]);
    }

    jQuery(this).css(styles);
}

关于javascript - 如何计算文本的基线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31874798/

相关文章:

c# - 如何在 ASP.NET MVC4 表中执行简单的多项选择

javascript - 编程可选无知

html - 在 <div> 中居中放置 <h1> 标签

css - 为什么我的 CSS 动画在侧边栏上不起作用?

php - 自定义样式的选择框

css - 为什么当我的 react 呈现我的组件页面时我的 css 文本显示?

javascript - onBeforeUnload 处理程序在 IE 中显示为 null

javascript - 替换字符串中的多个子字符串 - Javascript

javascript - 将父类添加到样式标签内的 css

android - 将 ShapeDrawable 中的单一(黑色)颜色替换为 Android 中的另一种颜色