CSSラベルの幅が有効にならない


112

ラベルと入力フィールドを揃えるためにスタイルを設定したい汎用フォームがあります。何らかの理由でラベルセレクターに幅を指定しても、何も起こりません。

HTML:

<form id="report-upload-form" method="POST" action="" enctype="multipart/form-data">
    <p>
        <label for="id_title">Title:</label> 
        <input id="id_title" type="text" class="input-text" name="title"></p>
    <p>
        <label for="id_description">Description:</label> 
        <textarea id="id_description" rows="10" cols="40" name="description"></textarea></p>
    <p>
        <label for="id_report">Upload Report:</label> 
        <input id="id_report" type="file" class="input-file" name="report">
    </p>
</form>

CSS:

#report-upload-form {
    background-color: #316091;
    color: #ddeff1;
    font-weight:bold;
    margin: 23px auto 0 auto;
    border-radius:10px;
    width: 650px;
    box-shadow:  0 0 2px 2px #d9d9d9;
}

#report-upload-form label {
    padding-left:26px;
    width:125px;
    text-transform: uppercase;
}

#report-upload-form input[type=text], 
#report-upload-form input[type=file],
#report-upload-form textarea {
    width: 305px;
}

出力:

ここに画像の説明を入力してください

jsFiddle

何が悪いのですか?


ちなみに、フォームセクションを<p>タグでラップすることは本当に良い考えですか?
JGallardo 2014年

回答:


214

するdisplay: inline-block

#report-upload-form label {
    padding-left:26px;
    width:125px;
    text-transform: uppercase;
    display:inline-block
}

http://jsfiddle.net/aqMN4/


1
インラインブロックに固執する。IE7、IE8、IE9、FFでテスト
Davis

1
各要素を<p>に配置するための回避策はありますか?
コリンD

1
@ColinD <p>タグではなく、divの使用をお勧めします。
デイビス

36

使用する display: inline-block;

説明:

labelそれがあることが必要であるとして、それが唯一の大きな通りである意味、インライン要素です。

プロパティを有効にするために、またはdisplayいずれinline-blockblockにプロパティを設定しますwidth

例:

#report-upload-form {
    background-color: #316091;
    color: #ddeff1;
    font-weight: bold;
    margin: 23px auto 0 auto;
    border-radius: 10px;
    width: 650px;
    box-shadow: 0 0 2px 2px #d9d9d9;

}

#report-upload-form label {
    padding-left: 26px;
    width: 125px;
    text-transform: uppercase;
    display: inline-block;
}

#report-upload-form input[type=text], 
#report-upload-form input[type=file],
#report-upload-form textarea {
    width: 305px;
}
<form id="report-upload-form" method="POST" action="" enctype="multipart/form-data">
    <p><label for="id_title">Title:</label> <input id="id_title" type="text" class="input-text" name="title"></p>
    <p><label for="id_description">Description:</label> <textarea id="id_description" rows="10" cols="40" name="description"></textarea></p>
    <p><label for="id_report">Upload Report:</label> <input id="id_report" type="file" class="input-file" name="report"></p>
</form>


1
ありがとう!インラインブロックは私が必要としたものです。ブロックは奇妙に見えます。
TheOne、2012年

2
インラインブロックのサポートはIE8より下のIEでは大雑把です-おそらく最近はあまり問題になりませんが、覚えておくべきことはあります。(ソースquirksmode.org/css/display.html
n00dle

1
@PandaWood申し訳ありませんが、この投稿にコメントしてから約2年になります。しかし、私はあなたのコメントに返信します。これは、他の読者がこの投稿の著者による説明に誤解されないようにするためです。後者はインライン要素であるため、label要素はwidthプロパティを尊重しないと推論しています。このinput要素はデフォルトではインライン要素でもあることを指摘しておきます。ただし、label要素とは異なり、widthプロパティを使用してその幅を変更できます。したがって、著者による推論は正しくありません。
ghd 2016

6

ラベルはインラインだと思うので、幅をとらない。「display:block」を使用してそこから進んでみてください。


6

最初にブロックにしてから、左にフロートして次のブロックを新しい行に押し込むのをやめます。

#report-upload-form label {
                           padding-left:26px;
                           width:125px;
                           text-transform: uppercase;
                           display:block;
                           float:left
}


4

labelのデフォルトのdisplayモードはですinline。つまり、コンテンツに合わせて自動的にサイズ調整されます。幅を設定するには、設定する必要があり、display:blockそれを正しく配置するためにいくつかの調整を行う必要があります(おそらくを含みますfloat

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.