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 と一致する結果が得られました。

結果は、単一行のラベルに適しています。1 つの欠点は、複数行のラベルの間隔が必要以上に長くなる可能性があることです。複数行ラベルの最初の行をスパンに配置し、行の高さをスパンにのみ適用することでこれを回避できますが、それは余分な作業です。

少なくとも、ベースラインのポジショニングを制御するものを理解しているので、進歩することができます。

于 2011-03-02T16:12:18.500 に答える