2012-06-03 12 views
51

Mam formularza HTML, takich jak:Align HTML wejściowe pola według:

<html> 
    Name:<input type="text"/></br> 
    Email Address:<input type="text"/></br> 
    Description of the input value:<input type="text"/></br> 
</html> 

Teraz etykiety wszyscy zaczynają w tej samej kolumnie, ale pola tekstowe zaczynają w różnych pozycjach, jak na długość tekstu etykiety.

Czy istnieje sposób wyrównania pól wprowadzania, tak aby wszystkie ":" i pola tekstowe zaczynały się w tej samej pozycji, a poprzedni tekst będzie wyrównany do prawej, aż do ":"?

Używanie CSS jest w porządku, jeśli może to pomóc w osiągnięciu tego.

+0

Gdzie jest forma? Widzę kontrole formularzy, ale nie formularze. –

+2

To tylko pseudo fragment kodu. Załóżmy, że masz formularz wewnątrz znacznika html. –

Odpowiedz

83

Working JS Fiddle

HTML:

<div> 
     <label>Name:</label><input type="text"> 
     <label>Email Address:</label><input type = "text"> 
     <label>Description of the input value:</label><input type="text"> 
    </div> 

CSS:

label{ 
    display: inline-block; 
    float: left; 
    clear: left; 
    width: 250px; 
    text-align: right; 
} 
input { 
    display: inline-block; 
    float: left; 
} 
+0

nie działa dla mnie ... – Ben

+1

Czy istnieje sposób, aby to zrobić bez konieczności określenia bezwzględnej szerokości? – Ajedi32

+1

Ajedi32, Możesz użyć względnej szerokości (%), spójrz tutaj: http://jsfiddle.net/T6zhj/293/. Ale musisz ustawić taką samą szerokość dla wszystkich etykiet w jakiś sposób, ponieważ musisz dopasować je do prawej. – DaneSoul

15

Można użyć etykietą (patrz JsFiddle)

CSS

label { display: inline-block; width: 210px; text-align: right; } 

HTML

<html> 
    <label for="name">Name:</label><input id="name" type="text"><br /> 
    <label for="email">Email Address:</label><input id="email" type="text"><br /> 
    <label for="desc">Description of the input value:</label><input id="desc" type="text"><br /> 
</html> 

Albo można używać tych etykiet w tabeli (JsFiddle)

<html> 
    <table> 
     <tbody> 
      <tr><td><label for="name">Name:</label></td><td><input id="name" type="text"></td></tr> 
      <tr><td><label for="email">Email Address:</label></td><td><input id="email" type = "text"></td></tr> 
      <tr><td><label for="desc">Description of the input value:</label></td><td><input id="desc" type="text"></td></tr> 
     </tbody> 
    </table> 
</html> 
+1

Dodatkowo, za pomocą 'etykiety' otrzymasz wiele miłych funkcji ułatwień dostępu: możesz kliknąć, aby przejść do skojarzonej z nią kontrolki, a czytelnicy ekranu będą w stanie rozpoznać twój formularz. 'table's dla layoutu nic ci z tego nie zrobi. –

+4

@MattiasBuelens: ale tabela przyjmie pierwszą kolumnę do szerokości etykiet. F.e. w przypadku witryny wielojęzycznej, w której dynamicznie można uzyskać podpis etykiety, można ustawić td w pierwszej kolumnie na nowszą wersję ... Więc nie upuszczaj jeszcze tabel, mają one swoje zastosowanie –

+0

@wouterHuysentruit To jest to, czego szukam, ale nie ma spacji między polami w przykładzie CSS. Jak to może zostać naprawione? –

3

Ustaw szerokość na elemencie formularza (który powinien istnieć w twoim przykładzie!) i unosić (i czyścić) elementy wejściowe. Również upuść elementy br.

2

w moim przypadku zawsze umieścić te spożywczych w znaczniku P jak

<p> name : < input type=text /> </p>

i tak dalej, a następnie zastosowanie css jak

p { 
    text-align:left; 
} 

p input { 
    float:right; 
} 

musisz określić szerokość p tag.because tagów wejściowych będzie unosić się przez całą drogę w prawo.

Ten parametr będzie również wpływał na przycisk przesyłania. Musisz zastąpić regułę dla tego tagu.

2

Wiem, że to podejście zostało podjęte wcześniej, Ale uważam, że przy użyciu tabel, układ może być generowany z łatwością, Chociaż ten może nie być najlepszą praktyką.

JSFiddle

HTML

<table> 

    <tr><td>Name:</td><td><input type="text"/></td></tr> 

    <tr><td>Age:</td><td><input type="text"/></td></tr> 

</table> 

<!--You can add the fields as you want--> 

CSS

td{ 
    text-align:right; 
} 
+0

To wciąż lepsze niż określanie szerokości absolutnie – velop

0

http://jsfiddle.net/T6zhj/1/

Korzystanie wyświetlacz table-cell/wiersz będzie wykonać zadanie bez szerokości potrzebne.

HTML:

<html> 
    <div> 
     <div class="row"><label>Name:</label><input type="text"></div> 
     <div class="row"><label>Email Address:</label><input type = "text"></div> 
     <div class="row"><label>Description of the input value:</label><input type="text"></div> 
    </div> 
</html> 

CSS:

label{ 
    display: table-cell; 
    text-align: right; 
} 
input { 
    display: table-cell; 
} 
div.row{ 
    display:table-row; 
} 
+0

przykład: http://jsfiddle.net/35sm3jsk/ – ishayle

1

Właśnie podano szerokość na etykiecie i typ wejścia były wyrównane automatycznie.

input[type="text"] { 
 
    width:100px; 
 
\t height:30px; 
 
\t border-radius:5px; 
 
\t background-color: lightblue; 
 
\t margin-left:2px; 
 
    position:relative; 
 
} 
 

 
label{ 
 
position:relative; 
 
width:300px; 
 
border:2px dotted black; 
 
margin:20px; 
 
padding:5px; 
 
font-family:AR CENA; 
 
font-size:20px; 
 

 
}
<label>First Name:</label><input type="text" name="fname"><br> 
 
<label>Last Name:</label><input type="text" name="lname"><br>

Powiązane problemy