J'ai un formulaire simple comme ça (à titre indicatif seulement) ...
<form>
<div class="input-row">
<label>Name</label>
<input type="text" name="name" />
</div>
<div class="input-row">
<label>Country</label>
<select name="country">
<option>Australia</option>
<option>USA</option>
</select>
</div>
</form>
Ma méthode de mise en page en utilisant CSS est la suivante ...
form {
width: 500px;
}
form .input-row {
display: block;
width: 100%;
height: auto;
clear: both;
overflow: hidden; /* stretch to contain floated children */
margin-bottom: 10px;
}
form .input-row label {
display: block;
float: left;
}
form .input-row input,
form .input-row select {
display: block;
width: 50%;
float: right;
padding: 2px;
}
Tout cela s'aligne assez bien, sauf que mon élément select
(dans Firefox de toute façon) n'est pas toujours de la même largeur que mes autres éléments input
. Il est généralement plus étroit de quelques pixels.
J'ai essayé de changer la largeur en pixels (par exemple 200px
) mais cela n'a pas fait de différence.
Quelle est la meilleure façon d'obtenir que tous aient la même largeur? J'espère qu'il ne me revient pas de définir individuellement les select
width
ou de les mettre dans des tableaux ...
La solution consiste à spécifier le modèle de boîte pour les éléments de formulaire, et les navigateurs ont tendance à être le plus d'accord lorsque vous utilisez border-box:
input, select, textarea {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
Il y a normalize.css projet qui regroupe ces astuces.
A eu les mêmes problèmes avec le tableau et les cellules à 100% de largeur, avec une zone de texte (également avec une largeur à 100%) plus large que la cellule du tableau.
Cela a résolu mon problème dans le CSS:
table td
{
padding-right: 8px;
}
Ce n'est pas la meilleure solution jamais, car vous obtenez probablement un espace supplémentaire sur le côté droit. Mais au moins, il ne se cache plus!
le rembourrage rapprochera le texte du bord de la boîte.
essayez de régler la marge sur 0px, et si cela semble correct, jouez avec (comme si vous définissiez la marge gauche uniquement)