web-dev-qa-db-ja.com

入力の横にあるフォームのラベルを揃える

私は、入力の隣にラベルを正しく揃える必要がある、非常に基本的で既知の形式のシナリオを持っています。しかし、私はそのやり方がわかりません。

私の目標は、ラベルを右側の入力の隣に配置することです。これが望ましい結果の画像例です。

enter image description here

私はあなたの便宜のために、そして私が今何をしているのかを明確にするためにフィドルを作りました - http://jsfiddle.net/WX58z/

抜粋:

<div class="block">
    <label>Simple label</label>
    <input type="text" />
</div>
<div class="block">
    <label>Label with more text</label>
    <input type="text" />
</div>
<div class="block">
    <label>Short</label>
    <input type="text" />
</div>
113
sed

1つの可能な解決策:

  • ラベルにdisplay: inline-blockを付けます。
  • それらに固定幅を与えます
  • テキストを右に揃える

あれは:

label {
  display: inline-block;
  width: 140px;
  text-align: right;
}​
<div class="block">
    <label>Simple label</label>
    <input type="text" />
</div>
<div class="block">
    <label>Label with more text</label>
    <input type="text" />
</div>
<div class="block">
    <label>Short</label>
    <input type="text" />
</div>

JSFiddle

167
bfavaretto

ここでの解決策は実行可能ですが、より最近の技術は私がより良い解決策であると思うもののために作りました。 CSS Grid Layoutより洗練されたソリューションを構築することができます。

以下のCSSは、2列目の「設定」構造を提供しています。最初の列は右寄せされたラベルであり、その後に2番目の列の内容が続きます。より複雑なコンテンツは、<div>で囲むことで2列目に表示できます。

[ちなみに、CSSを使用して各ラベルの末尾に ':'を追加しています。これはスタイル的な要素です - 私の好みです。]

/* CSS */

div.settings {
    display:grid;
    grid-template-columns: max-content max-content;
    grid-gap:5px;
}
div.settings label       { text-align:right; }
div.settings label:after { content: ":"; }
<!-- HTML -->

<div class="settings">
    <label>Label #1</label>
    <input type="text" />

    <label>Long Label #2</label>
    <span>Display content</span>

    <label>Label #3</label>
    <input type="text" />
</div>
12

このような質問に答えた前に、あなたはここで結果を見てみることができます:

フィールドとテキストを隣り合わせにするフォームを作成する - それを行うための意味的な方法は何ですか?

そのため、同じ規則をフィドルに適用するには、display:inline-blockを使用してラベルと入力グループを並べて表示できます。

CSS

input {
    margin-top: 5px;
    margin-bottom: 5px;
    display:inline-block;
    *display: inline;     /* for IE7*/
    zoom:1;              /* for IE7*/
    vertical-align:middle;
    margin-left:20px
}

label {
    display:inline-block;
    *display: inline;     /* for IE7*/
    zoom:1;              /* for IE7*/
    float: left;
    padding-top: 5px;
    text-align: right;
    width: 140px;
}

更新されたフィドル

12
Andres Ilich

私はこれに似たものを使用します:

<div class="form-element">
  <label for="foo">Long Label</label>
  <input type="text" name="foo" id="foo" />
</div>

スタイル:

.form-element label {
    display: inline-block;
    width: 150px;
}
7
Mike G

Flex-boxを使ってみることもできます

<head><style>
body {
    color:white;
    font-family:arial;
    font-size:1.2em;
}
form {
    margin:0 auto;
    padding:20px;
    background:#444;
}
.input-group {
    margin-top:10px;
    width:60%;
    display:flex;
    justify-content:space-between;
    flex-wrap:wrap;
}
label, input {
    flex-basis:100px;
}
</style></head>
<body>

<form>
    <div class="wrapper">
        <div class="input-group">
            <label for="user_name">name:</label>
            <input type="text" id="user_name">
        </div>
        <div class="input-group">
            <label for="user_pass">Password:</label>
            <input type="password" id="user_pass">
        </div>
    </div>
</form>

</body>
</html>
4
user6797117

私はこれが古いスレッドであることを知っています、しかしより簡単な解決策はそのようにラベルの中に入力を埋め込むことでしょう:

<label>Label one: <input id="input1" type="text"></label>
1
Robert

次のようなことができます:

HTML:

<div class='div'>
<label>Something</label>
<input type='text' class='input'/>
<div>

CSS:

.div{
      margin-bottom: 10px;
      display: grid;
      grid-template-columns: 1fr 4fr;
}

.input{
       width: 50%;
}

お役に立てれば ! :)

0
Rakonjac

これは、すべてのフォームラベルの一般的なラベル幅です。幅は決まっていません。

すべてのラベルを付けてsetLabelWidth calculatorを呼び出します。この関数はUI上のすべてのラベルをロードして最大ラベル幅を見つけます。以下の関数の戻り値をすべてのラベルに適用します。

     this.setLabelWidth = function (labels) {
            var d = labels.join('<br>'),
                dummyelm = jQuery("#lblWidthCalcHolder"),
                width;
            dummyelm.empty().html(d);
            width = Math.ceil(dummyelm[0].getBoundingClientRect().width);
            width = width > 0 ? width + 5: width;
            //this.resetLabels(); //to reset labels.
            var element = angular.element("#lblWidthCalcHolder")[0];
            element.style.visibility = "hidden";
            //Removing all the lables from the element as width is calculated and the element is hidden
            element.innerHTML = "";
            return {
                width: width,
                validWidth: width !== 0
            };

        };
0
Samyak Jain