7

我在字段集中的一些标签文本旁边显示文本输入。我希望文本输入中文本的基线与标签文本的基线对齐。padding-top我可以为我的.label元素设置一个软糖因子,但我的元素的内容.value可能包含只读文本,这会搞砸这些字段的标签/值基线对齐。我还怀疑不同浏览器需要不同的软糖因素,因为不同浏览器的输入字段之间存在高度差异。

有谁知道如何让我的标签和输入文本基线对齐?我的标签文本可能跨越多行,因此我希望任何解决方案都考虑到这一点。

您可以在http://jsbin.com/enobe3看到以下代码的实时示例。

CSS

* {
    font-family: sans-serif;
    font-size: 13px;
}

.field {
    clear: left;
    padding-top: 5px;
}

.label {
    float: left;
    width: 90px;
}

.value {
    margin-left: 90px;
    padding-left: 10px;
}

HTML

<fieldset>
    <div class="field">
        <div class="label">A short label</div>
        <div class="value">Some text</div>
    </div>
    <div class="field">
        <div class="label">A long long long long long long long wrapping label</div>
        <div class="value">Some text</div>
    </div>
    <div class="field">
        <div class="label">A short label</div>
        <div class="value"><input value="Some text"/></div>
    </div>
    <div class="field">
        <div class="label">A long long long long long long long wrapping label</div>
        <div class="value"><input value="Some text"/></div>
    </div>
</fieldset>
4

1 回答 1

10

基线对齐问题与文本框和输入字段的默认行高有关。

input字段具有较大的默认高度以容纳填充、边框和文本。

我尝试了您的 HTML/CSS 代码片段并将我的版本发布在http://jsfiddle.net/audetwebdesign/EbuJH/

我添加了一些背景颜色、一些填充和边距来勾勒出块的轮廓。

关键是设置line-height属性,以便您的标签和输入字段具有相同的值,在我的示例中为 2.0。

.field {
    clear: left;
    padding: 5px 0;
    background-color: lightgray;
    overflow: auto;
    margin-bottom: 5px;
    line-height: 2.00; /* Key property */
}

您可以调整行高以了解其工作原理。

我在 Firefox 和 IE8 中测试了该示例,结果与严格的 doctype 一致。

结果适用于单行标签。一个缺点是多行标签的间距可能比您喜欢的要大。您可以通过将多行标签的第一行放在跨度中并将行高仅应用于跨度来解决此问题,但这是额外的工作。

至少我们知道是什么控制了基线定位,这样我们才能取得进展。

于 2011-03-02T16:12:18.500 回答