Je suis novice en HTML et j'essaie d'apprendre à utiliser les formulaires.
Le plus gros problème que je rencontre jusqu’à présent est l’alignement des formulaires. Voici un exemple de mon fichier HTML actuel:
<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>
Le problème avec ceci est que la zone de champ après 'Email' est radicalement différente en termes d'espacement par rapport au prénom et au nom de famille. Quelle est la "bonne" façon de faire en sorte qu'ils s'alignent essentiellement?
J'essaie de pratiquer la bonne forme et la bonne syntaxe ... Beaucoup de gens pourraient le faire avec CSS Je ne suis pas sûr, je n'ai appris que les bases du HTML jusqu'à présent.
Un autre exemple, celui-ci utilise CSS, je mets simplement le formulaire dans un div avec la classe conteneur. Et a précisé que les éléments d'entrée contenus dans doivent contenir 100% de la largeur du conteneur et ne comporter aucun élément de chaque côté.
.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>
La réponse acceptée (définir une largeur explicite en pixels) rend les modifications difficiles à effectuer et se brise lorsque vos utilisateurs utilisent une taille de police différente. En revanche, utiliser des tables CSS fonctionne très bien:
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>
Voici un JSFiddle: http://jsfiddle.net/DaS39/1/
Et si vous avez besoin des étiquettes alignées à droite, ajoutez simplement text-align: right
aux étiquettes: http://jsfiddle.net/DaS39/
EDIT: Une dernière remarque rapide: les tableaux CSS vous permettent également de jouer avec les colonnes: par exemple, si vous souhaitez que les champs de saisie occupent le plus d’espace possible, vous pouvez ajouter les éléments suivants dans votre formulaire.
<div style="display: table-column;"></div>
<div style="display: table-column; width:100%;"></div>
vous voudrez peut-être ajouter white-space: nowrap
à la labels
dans ce cas.
Si vous débutez en HTML, une solution simple consiste simplement à utiliser un tableau pour tout aligner.
<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>
Je trouve qu'il est beaucoup plus facile de changer l'affichage des étiquettes en inline-block et de définir une largeur
label {
display: inline-block;
width:100px;
text-align: right;
}
Vous devriez utiliser une table. En tant que structure logique, les données sont tabulaires: c’est pourquoi vous souhaitez les aligner, car vous souhaitez montrer que les étiquettes ne sont pas liées uniquement à leurs zones de saisie, mais également les unes aux autres, une structure à deux dimensions.
[Réfléchissez à ce que vous feriez si vous aviez des chaînes ou des valeurs numériques à afficher à la place des zones de saisie.]
Pour cela, je préfère garder une sémantique HTML correcte et utiliser un CSS aussi simple que possible.
Quelque chose comme ça ferait le travail:
label{
display: block;
float: left;
width : 120px;
}
Un inconvénient cependant: vous devrez peut-être choisir la bonne largeur d’étiquette pour chaque formulaire, ce qui n’est pas facile si vos étiquettes peuvent être dynamiques (étiquettes I18N par exemple).
en utilisant css
.containerdiv label {
float:left;
width:25%;
text-align:right;
margin-right:5px; /* optional */
}
.containerdiv input {
float:left;
width:65%;
}
cela vous donne quelque chose comme:
label1 |input box |
another label |another input box |
Je sais que cela a déjà été répondu, mais j'ai trouvé une nouvelle façon de les aligner correctement - avec un avantage supplémentaire - voir http://www.gargan.org/en/Web_Development/Form_Layout_with_CSS/
en gros, vous utilisez l'élément label autour de l'entrée et l'alignez en utilisant:
<label><span>Name</span> <input /></label>
<label><span>E-Mail</span> <input /></label>
<label><span>Comment</span> <textarea></textarea></label>
et puis avec css vous alignez simplement:
label {
display:block;
position:relative;
}
label span {
font-weight:bold;
position:absolute;
left: 3px;
}
label input, label textarea, label select {
margin-left: 120px;
}
Je suis un grand fan de l'utilisation des listes de définitions.
<dl>
<dt>Username:</dt>
<dd><input type="text" name="username" /></dd>
<dt>Password:</dt>
<dd><input type="password" name="password" /></dd>
</dl>
Ils sont faciles à styliser à l'aide de CSS et évitent d'avoir à utiliser des tableaux pour la mise en page.
Bien pour les bases, vous pouvez essayer de les aligner dans le tableau. Cependant, l'utilisation de tableau est mauvaise pour la mise en page car tableau est destiné au contenu.
Ce que vous pouvez utiliser, ce sont des techniques flottantes 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 */
<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>
On peut trouver un article élaboré que j'ai écrit et qui répond à la question du problème de flottement dans IE7: problèmes de flottant dans IE7
Insérez des balises d’entrée dans des listes non ordonnées. Définissez le type de style none. Voici un exemple.
<ul>
Input1
<li> <input type="text" />
Input2
<li> <input type="text" />
<ul/>
Travaillé pour moi!
css j'ai l'habitude de résoudre ce problème, semblable à Gjaa mais mieux stylé
p
{
text-align:center;
}
.styleform label
{
float:left;
width: 40%;
text-align:right;
}
.styleform input
{
float:left;
width: 30%;
}
Voici mon code HTML, utilisé spécifiquement pour un simple formulaire d'inscription sans code 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>
C'est très simple, et je ne fais que commencer, mais cela a fonctionné assez bien
La méthode traditionnelle consiste à utiliser une table.
Exemple:
<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>
Cependant, beaucoup soutiendraient que les tables sont restrictives et préfèrent CSS. L'avantage d'utiliser CSS est que vous pouvez utiliser divers éléments. À partir des divs, des listes ordonnées et non classées, vous pouvez réaliser la même présentation.
En fin de compte, vous voudrez utiliser ce avec quoi vous êtes le plus à l'aise.
Astuce: Les tables sont faciles à utiliser.