Як вирівняти ярлик та текстове поле?


83

Мій код закінчується так:

             XXXXX
             XXXXX
Description: XXXXX

Я хочу:

             XXXXX
Description: XXXXX
             XXXXX

"Опис" іноді охоплює кілька рядків.

Код:

<p class="DataForm">
    <label>Blah blah blah Description:</label>
    <asp:TextBox ID="txtBlahblahblahDescription"
                 runat="server"
                 TextMode="MultiLine"
                 Rows="8"
                 Columns="50"></asp:TextBox><br/>
</p>

CSS:

.DataForm {
}
.DataForm label {
    display: inline-block;
    font-size: small;
    margin-left: 5px;
    width: 5%;
    min-width: 60px;
}
.DataForm input {
    margin-right: 9px;
    display: inline-block;
    width: 21%;
    min-width: 30px;
}

Хочете мітку Опис посередині?
Пітер Штуйфзанд

3
Чи використовуєте ви таблиці, чи це вбудовано, чи плаваєте ярлик ліворуч тощо? Чи можете ви розмістити свій HTML і CSS, щоб ми знали, як виглядає ваш код? Важко рекомендувати стилі та макети, які можуть не відповідати вашому коду.
Andy E

Так, мітка з описом повинна бути відцентрована по вертикалі, якщо це можливо. . . . Я
вкладу

Відповіді:


110

Вам потрібно покласти їх обох в якийсь елемент контейнера, а потім застосувати вирівнювання на ньому.

Наприклад:

.formfield * {
  vertical-align: middle;
}
<p class="formfield">
  <label for="textarea">Label for textarea</label>
  <textarea id="textarea" rows="5">Textarea</textarea>
</p>


Хм, я спробував поставити це як вбудований стиль на своєму тегу p, але це не спрацювало
NibblyPig

1
Хіба це не передається у спадок? Я все-таки спробував, але це не спрацювало :(
NibblyPig

1
Шкода, це працює з інформаційною формою *, хоча те, як вона
центрирується,

10
Кращим рішенням було б просто додати до vertical-align: middle;кожного з ваших правил вище, .DataForm labelі .DataForm textarea. Використання селектора * іноді може мати побічні ефекти.
DisgruntledGoat

2
Ви можете мати рацію, але якщо хтось vertical-align: middleщось зробить, то, як правило, скоріше застосує це на повному блоці.
BalusC

19

Просто оберніть текстову область етикеткою та встановіть стиль текстової області

vertical-align: middle;

Ось трохи магії для всіх текстових областей на сторінці :)

<style>
    label textarea{
        vertical-align: middle;
    }
</style>

<label>Blah blah blah Description: <textarea>dura bura</textarea></label>

2
Це спрацювало чудово. Обрана відповідь - ні. Дякую!
eaglei22

4
  1. Встановіть heightдля мітки те саме height, що і багаторядкове текстове поле.
  2. Додайте cssClass .alignTop{vertical-align: middle;}для елемента керування етикеткою.

    <p>
        <asp:Label ID="DescriptionLabel" runat="server" Text="Description: " Width="70px" Height="200px" CssClass="alignTop"></asp:Label>
        <asp:Textbox id="DescriptionTextbox" runat="server" Width="400px" Height="200px" TextMode="MultiLine"></asp:Textbox>
        <asp:RequiredFieldValidator id="DescriptionRequiredFieldValidator" runat="server" ForeColor="Red"
        ControlToValidate="DescriptionTextbox" ErrorMessage="Description is a required field.">    
    </asp:RequiredFieldValidator>
    


3

Використовуйте vertical-align:middleу своєму CSS.

<table>
    <tr>
       <td style="vertical-align:middle">Description:</td>
       <td><textarea></textarea></td>
    </tr>
</table>

Я шукаю елегантне рішення без столів, якщо це можливо.
NibblyPig

4
Ви повинні писати подібні речі у своєму запитанні.
Пітер Штуйфзанд

11
Хто сьогодні використовує таблиці для форм?
BalusC

6
Вибачте, думав, що це очевидно :(
NibblyPig

4
Таблиці цілком справедливі для форм. Це є табличні дані, хоча тільки з одного рядка даних (або стовпець).
DisgruntledGoat

3

Вирівняйте поле текстової області за міткою, а не мітку за текстовою областю,

label {
    width: 180px;
    display: inline-block;
}

textarea{
    vertical-align: middle;
}

<label for="myfield">Label text</label><textarea id="myfield" rows="5" cols="30"></textarea>


0

Спробуйте встановити висоту для ваших елементів td.

vertical-align: middle; 

означає, що елемент, до якого застосовується стиль, буде вирівняний у межах батьківського елемента. Висота td може бути настільки високою, як текст усередині.

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