Jak wyrównać etykietę i obszar tekstu?

83

Mój kod kończy się następująco:

             XXXXX
             XXXXX
Description: XXXXX

Chcę:

             XXXXX
Description: XXXXX
             XXXXX

„Opis” czasami obejmuje wiele linii.

Kod:

<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;
}
NibblyPig
źródło
Czy chcesz, aby etykieta Opis znajdowała się na środku?
Peter Stuifzand
3
Czy korzystasz z tabel, czy jest to wbudowane, czy przesuwasz etykietę w lewo itp.? Czy możesz opublikować swój kod HTML i CSS, abyśmy wiedzieli, jak wygląda Twój kod? Trudno jest polecić style i układy, które mogą nie pasować do Twojego kodu.
Andy E
Tak, etykieta opisu musi być wyśrodkowana w pionie, jeśli to możliwe. . . .
Załączę

Odpowiedzi:

110

Musisz umieścić je oba w jakimś elemencie kontenera, a następnie zastosować na nim wyrównanie.

Na przykład:

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

BalusC
źródło
Hmm, próbowałem umieścić to jako styl wbudowany w moim tagu p, ale to nie zadziałało
NibblyPig
1
Czy nie zostałby odziedziczony?
Mimo
1
Mój błąd, działa z formą danych *, chociaż sposób, w jaki centruje, jest trochę dziwny, działa, więc dzięki
NibblyPig
10
Lepszym rozwiązaniem byłoby po prostu umieszczenie vertical-align: middle;każdej z powyższych reguł .DataForm labeli .DataForm textarea. Używanie selektora * może czasami powodować skutki uboczne.
DisgruntledGoat
2
Możesz mieć rację, ale jeśli ktoś chciałby vertical-align: middlecoś zrobić, zwykle wolałby zastosować to na całym bloku.
BalusC
19

Po prostu zawiń obszar textarea etykietą i ustaw styl textarea na

vertical-align: middle;

Oto trochę magii dla wszystkich obszarów tekstowych na stronie :)

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

<label>Blah blah blah Description: <textarea>dura bura</textarea></label>
Rado
źródło
2
To działało doskonale. Wybrana odpowiedź nie. Dzięki!
eaglei
4
  1. Ustaw heightetykietę na taką samą, heightjak w wielowierszowym polu tekstowym.
  2. Dodaj cssClass .alignTop{vertical-align: middle;}dla kontrolki etykiety.

    <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>
    

Charlie
źródło
3

Użyj vertical-align:middlew swoim CSS.

<table>
    <tr>
       <td style="vertical-align:middle">Description:</td>
       <td><textarea></textarea></td>
    </tr>
</table>
Peter Stuifzand
źródło
Szukam eleganckiego rozwiązania bez stolików, jeśli to możliwe.
NibblyPig
4
Takie rzeczy powinieneś napisać w swoim pytaniu.
Peter Stuifzand
12
Kto obecnie używa tabel do formularzy?
BalusC
6
Przepraszam, myślałem, że to oczywiste :(
NibblyPig
4
Tabele doskonale pasują do formularzy. Są to dane tabelaryczne, chociaż zawierają tylko jeden wiersz (lub kolumnę) danych.
DisgruntledGoat
3

Wyrównaj pole obszaru tekstowego z etykietą, a nie etykietę z obszarem tekstowym,

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

textarea{
    vertical-align: middle;
}

<label for="myfield">Label text</label><textarea id="myfield" rows="5" cols="30"></textarea>
zefram
źródło
1

Spróbuj tego:

textarea { vertical-align: top; }​ 
vaibhav jain
źródło
0

Spróbuj ustawić wysokość elementów td.

vertical-align: middle; 

oznacza, że ​​element, do którego zastosowano styl, zostanie wyrównany w elemencie nadrzędnym. Wysokość td może być równa wysokości tekstu wewnątrz.

h4xnoodle
źródło