Jak wyrównać formularze wejściowe w HTML

Jestem nowy w HTML i staram się nauczyć, jak korzystać z formularzy.

Największym problemem, jaki mam do tej pory, jest wyrównanie form. Oto przykład mojego obecnego pliku HTML:

<form>
 First Name:<input type="text" name="first"><br />
 Last Name:<input type="text" name="last"><br />
 Email:<input type="text" name="email"><br />
</form>

Problem polega na tym, że pole po 'E-Mail' jest drastycznie inne pod względem odstępów w porównaniu do imienia i nazwiska. Jaki jest "właściwy" sposób na to, aby w zasadzie "składały się"?

Staram się ćwiczyć dobrą formę i składnię...Wiele osób może to zrobić z CSS nie jestem pewien, do tej pory nauczyłem się tylko podstaw HTML.
Author: yoshyosh, 2010-11-30

16 answers

Kolejny przykład, To używa CSS, po prostu umieścić formularz w div z klasy kontenera. I określiła, że elementy wejściowe zawarte wewnątrz mają stanowić 100% szerokości kontenera i nie mieć żadnych elementów po żadnej stronie.

.container {
  width: 500px;
  clear: both;
}

.container input {
  width: 100%;
  clear: both;
}
<html>

<head>
  <title>Example form</title>
</head>

<body>
  <div class="container">
    <form>
      <label>First Name</label>
      <input type="text" name="first"><br />
      <label>Last Name</label>
      <input type="text" name="last"><br />
      <label>Email</label>
      <input type="text" name="email"><br />
    </form>
  </div>
</body>

</html>
 51
Author: serialk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-19 14:57:55

Zaakceptowana odpowiedź (ustawianie jawnej szerokości w pikselach) utrudnia wprowadzanie zmian i łamie się, gdy użytkownicy używają innego rozmiaru czcionki. Korzystanie z tabel CSS, z drugiej strony, działa świetnie:

form  { display: table;      }
p     { display: table-row;  }
label { display: table-cell; }
input { display: table-cell; }
<form>
  <p>
    <label for="a">Short label:</label>
    <input id="a" type="text">
  </p>
  <p>
    <label for="b">Very very very long label:</label>
    <input id="b" type="text">
  </p>
</form>

Oto JSFiddle: http://jsfiddle.net/DaS39/1/

I jeśli potrzebujesz etykiet wyrównanych do prawej, po prostu dodaj text-align: right do etykiet: http://jsfiddle.net/DaS39/


EDIT: jeszcze jedna szybka Uwaga: tabele CSS również pozwalają Graj kolumnami: na przykład, jeśli chcesz, aby pola wejściowe zajmowały jak najwięcej miejsca, możesz dodać następujące elementy w formularzu

<div style="display: table-column;"></div>
<div style="display: table-column; width:100%;"></div>

Możesz dodać white-space: nowrap do labels w takim przypadku.

 95
Author: Clément,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-20 08:30:50

Prostym rozwiązaniem dla Ciebie, jeśli jesteś nowy w HTML, jest po prostu użycie tabeli do wyrównania wszystkiego.

<form>
  <table>
    <tr>
      <td align="right">First Name:</td>
      <td align="left"><input type="text" name="first" /></td>
    </tr>
    <tr>
      <td align="right">Last Name:</td>
      <td align="left"><input type="text" name="last" /></td>
    </tr>
    <tr>
      <td align="right">Email:</td>
      <td align="left"><input type="text" name="email" /></td>
    </tr>
  </table>
</form>
 22
Author: amonett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-30 02:25:23

Znacznie łatwiej jest zmienić wyświetlanie etykiet na inline-block i ustawić szerokość

label {
    display: inline-block;
    width:100px;
    text-align: right;
}
 16
Author: Byron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-08 21:55:22

Powinieneś użyć tabeli. Ze względu na strukturę logiczną Dane są tabelaryczne: dlatego chcesz, aby były wyrównane, ponieważ chcesz pokazać, że etykiety nie są powiązane wyłącznie ze swoimi polami wejściowymi, ale także ze sobą, w strukturze dwuwymiarowej.

[zastanów się, co byś zrobił, gdybyś miał do wyświetlenia wartości łańcuchowe lub liczbowe zamiast pól wprowadzania.]

 6
Author: Collin Street,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-12 07:56:01

W tym celu wolę zachować poprawny semantyczny HTML i używać prostego CSS.

Coś takiego załatwiłoby sprawę:

label{
  display: block;
  float: left;
  width : 120px;    
}

Jedna wada : być może będziesz musiał wybrać odpowiednią szerokość etykiet dla każdego formularza, a nie jest to łatwe, jeśli etykiety mogą być dynamiczne (na przykład etykiety I18N).

 3
Author: Samuel EUSTACHI,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-21 15:43:49

Using css

.containerdiv label {
  float:left;
  width:25%;
  text-align:right;
  margin-right:5px; /* optional */
}
.containerdiv input {
  float:left;
  width:65%;
}

To daje coś w stylu:

           label1 |input box             |
    another label |another input box     |
 2
Author: Gjaa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-18 00:16:42

Dobrze dla samych podstaw można spróbować wyrównać je w tabeli. Jednak użycie tabeli jest złe dla układu, ponieważ tabela jest przeznaczona dla zawartości.

Możesz użyć technik CSS floating.

Kod CSS

.styleform label{float:left;}
.styleform input{margin-left:200px;} /* this gives space for the label on the left */
.styleform .clear{clear:both;} /* prevent elements from stacking weirdly */

HTML

<div class="styleform">
<form>
<label>First Name:</label><input type="text" name="first" /><div class="clear"></div>
<label>Last Name:</label><input type="text" name="first" /><div class="clear"></div>
<label>Email:</label><input type="text" name="first" /><div class="clear"></div>
</form>
</div>

Rozwinięty artykuł, który napisałem, można znaleźć odpowiadając na pytanie o problem IE7 float: IE7 float right problems

 1
Author: mauris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:13

Wiem, że już na to odpowiedziałam, ale znalazłem nowy sposób, aby je ładnie wyrównać - z dodatkową korzyścią-patrz http://www.gargan.org/en/Web_Development/Form_Layout_with_CSS/

Zasadniczo używasz elementu etykiety wokół wejścia i wyrównuj używając tego:

<label><span>Name</span> <input /></label>
<label><span>E-Mail</span> <input /></label>
<label><span>Comment</span> <textarea></textarea></label>

I wtedy z css po prostu wyrównujesz:

label {
    display:block;
    position:relative;
}

label span {
    font-weight:bold;
    position:absolute;
    left: 3px;
}

label input, label textarea, label select {
    margin-left: 120px;    
}
  • nie potrzebujesz żadnych brudnych breloków do linebreaks - co oznacza, że możesz szybko wykonać układ wielokolumnowy dynamicznie
  • cała linia jest zdolna do klikania. Szczególnie w przypadku pól wyboru jest to ogromna pomoc.
  • dynamiczne wyświetlanie / ukrywanie linii formularza jest łatwe (wystarczy wyszukać dane wejściowe i ukryć ich rodzica -> Etykietę)
  • możesz przypisać klasy do całej etykiety, dzięki czemu wyświetlanie błędów jest dużo wyraźniejsze (nie tylko wokół pola wprowadzania)
 1
Author: Niko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-17 09:38:47

Tradycyjną metodą jest użycie tabeli.

Przykład:

<table>
  <tbody>
     <tr>
        <td>
           First Name:
        </td>
        <td>
           <input type="text" name="first">
        </td>
     </tr>
     <tr>
        <td>
           Last Name:
        </td>
        <td>
           <input type="text" name="last">
        </td>
     </tr>
  </tbody>
</table>

Jednak wielu twierdzi, że tabele ograniczają i preferują CSS. Zaletą korzystania z CSS jest to, że można używać różnych elementów. Z listy div, ordered i un-ordered można osiągnąć ten sam układ.

W końcu, będziesz chciał użyć tego, co Ci najbardziej odpowiada.

Wskazówka: tabele są łatwe do rozpoczęcia.

 0
Author: OV Web Solutions,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-30 02:28:17

Jestem wielkim fanem używania list definicji.

<dl>
<dt>Username:</dt>
<dd><input type="text" name="username" /></dd>
<dt>Password:</dt>
<dd><input type="password" name="password" /></dd>
</dl>

Są łatwe do stylizacji za pomocą CSS i unikają piętna używania tabel do układu.

 0
Author: Andrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-30 03:06:38

Css, którego użyłem do rozwiązania tego problemu, podobny do Gjaa, ale stylizowany lepiej

p
{
    text-align:center;
        }
.styleform label
{
    float:left;
    width: 40%;
    text-align:right;
    }
.styleform input
{
    float:left;
    width: 30%;
    }

Oto mój HTML, używany specjalnie do prostego formularza rejestracyjnego bez kodu php

<form id="registration">
    <h1>Register</h1>
    <div class="styleform">
    <fieldset id="inputs">
        <p><label>Name:</label> 
          <input id="name" type="text" placeholder="Name" autofocus required>
        </p>
        <p><label>Email:</label>   
          <input id="email" type="text" placeholder="Email Address" required>
        </p>
        <p><label>Username:</label>
          <input id="username" type="text" placeholder="Username" autofocus required>
        </p>
        <p>   
          <label>Password:</label>
          <input id="password" type="password" placeholder="Password" required>
        </p>
    </fieldset>
    <fieldset id="actions">

    </fieldset>
    </div>
    <p>
          <input type="submit" id="submit" value="Register">
          </p>

To bardzo proste, a ja dopiero zaczynam, ale działało całkiem ładnie

 0
Author: PA_Commons,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-16 23:32:11

Wstaw znaczniki wejściowe wewnątrz list nieuporządkowanych.Zrób styl-wpisz none. Oto przykład.

<ul>
Input1     
<li> <input type="text" />
Input2
<li> <input type="text" />
<ul/>

Zadziałało dla mnie !

 0
Author: Vivek Iyer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-17 04:20:59
<form>
    <div>
        <label for='username'>UserName</label>
        <input type='text' name='username' id='username' value=''>  
    </div>
</form>

W CSS musisz zadeklarować zarówno label jak i input jako display: inline-block i podać szerokość zgodnie z Twoimi wymaganiami. Mam nadzieję, że to ci pomoże. :)

 -1
Author: kta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-07 09:04:23

Myślę, że byłoby łatwiej, gdybyś użył tabeli do struktury formularza. Może być wyczerpujące, ale nic "Kopiuj i wklej" z małą edycją nie może naprawić.

<form>
<table>
<tr>
<td> <label>First Name:</label> </td> <td> <input type="text" name="first"> </td> </tr>
<tr> <td> <label>Last Name:</label> </td> <td> <input type="text" name="last"> </td></tr>
<tr> <td> <label> Email: </label> </td> <td> <input type="text" name="email"> </td></tr>
</table>
</form>

Możesz dodać wyściółkę lub unosić zawartość komórki, aby wyglądała bardziej przestronnie.

 -2
Author: Hammerton Mwawuda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-05 11:14:40

Po prostu dodaj

<form align="center ></from>

Po prostu umieść wyrównanie w znaczniku otwierającym.

 -3
Author: Zak Gill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-07 20:28:20