J'essaie de laisser un <input type="text">
(désormais appelée "zone de texte") remplissent un conteneur parent en paramétrant leur width
à 100%
. Cela fonctionne jusqu'à ce que je donne un padding à la zone de texte. Celui-ci est alors ajouté à la largeur du contenu et le champ de saisie déborde. Notez que dans Firefox, ce phénomène ne se produit que lorsque le contenu est rendu conforme aux normes. En mode Quirks, un autre modèle de boîte semble s'appliquer.
Voici un code minimal pour reproduire le comportement dans tous les navigateurs modernes.
#x {
background: salmon;
padding: 1em;
}
#y, input {
background: red;
padding: 0 20px;
width: 100%;
}
<div id="x">
<div id="y">x</div>
<input type="text"/>
</div>
Ma question : Comment faire pour que la zone de texte s'adapte au conteneur ?
Avis pour le <div id="y">
c'est très simple : il suffit de définir width: auto
. Toutefois, si j'essaie de faire de même pour la zone de texte, l'effet est différent et la zone de texte prend son nombre de lignes par défaut comme largeur (même si j'ai défini l'option display: block
pour la zone de texte).
EDIT : La solution de David fonctionnerait bien sûr. Cependant, je ne veux pas modifier le HTML - je ne veux surtout pas ajouter des éléments factices sans fonctionnalité sémantique. C'est un cas typique de divitis que je veux éviter à tout prix. Cela ne peut être qu'un hack de dernier recours.