ширина етикетки 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

Відповіді:


215

Зробіть display: inline-block:

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

http://jsfiddle.net/aqMN4/


1
Дотримуйтесь Inline-block. Випробували його в IE7, IE8, IE9, FF
Девіс

1
Чи існує рішення щодо розміщення кожного елемента в <p>?
Колін Д

1
@ColinD Я рекомендував би використовувати divs, а не <p> теги.
Девіс

36

Використовуйте display: inline-block;

Пояснення:

Елемент labelє вбудованим, тобто він є настільки ж великим, як і потрібно.

Встановіть displayвластивість на inline-blockабо blockдля того, щоб 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
Дякую! inline-block - це те, що мені було потрібно. Блок робить це дивно.
TheOne

2
Майте на увазі, що підтримка вбудованого блоку є схематичною в IE нижче IE8 - ймовірно, це не надто велика проблема в наші дні, але щось, що потрібно пам’ятати. (джерело quirksmode.org/css/display.html )
n00dle

1
@PandaWood Вибачте, минуло майже 2 роки, як ви прокоментували це повідомлення. Але я відповідаю на ваш коментар, щоб інші читачі не вводили в оману пояснення автора цього допису. Останній аргументував, що labelелемент не поважає widthвластивість, оскільки це вбудований елемент. Я хотів би зазначити, що inputза замовчуванням елемент також є вбудованим елементом. Але він дозволяє змінювати його ширину за допомогою властивості ширини на відміну від labelелемента. Отже, міркування автора невірні.
ghd

6

Я вважаю, що етикетки вбудовані, і тому вони не приймають ширину. Можливо, спробуйте скористатися "display: block" і перейти звідти.


6

Спочатку зробіть це блоком, а потім пливіть ліворуч, щоб перестати натискати наступний блок на новий рядок.

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


4

labeldisplayрежим за замовчуванням є inline, а це означає, що він автоматично розміщує його на вміст. Щоб встановити ширину, вам потрібно буде встановити, display:blockа потім зробити кілька факсів, щоб правильно її розмістити (можливо, це стосується float)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.