Pourquoi display:block;width:auto;
ma saisie de texte ne se comporte-t-elle pas comme un div et ne remplit-elle pas la largeur du conteneur?
J'avais l'impression qu'un div est simplement un élément de bloc avec une largeur automatique. Dans le code suivant, le div et l'entrée ne devraient-ils pas avoir des dimensions identiques?
Comment puis-je obtenir l'entrée pour remplir la largeur? Une largeur de 100% ne fonctionnera pas, car l'entrée a un remplissage et une bordure (ce qui entraîne une largeur finale de 1 pixel + 5 pixels + 100% + 5 pixels + 1 pixels). Les largeurs fixes ne sont pas une option, et je recherche quelque chose de plus flexible.
Je préférerais une réponse directe à une solution de contournement. Cela semble être une bizarrerie CSS et le comprendre peut être utile plus tard.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>width:auto</title>
<style>
div, input {
border: 1px solid red;
height: 5px;
padding: 5px;
}
input, form {
display: block;
width: auto;
}
</style>
</head>
<body>
<div></div>
<form>
<input type="text" name="foo" />
</form>
</body>
</html>
Je dois souligner que je peux déjà le faire avec des solutions de contournement. En dehors de ce vissage avec la sémantique de la page et les relations de sélecteur CSS, j'essaie de comprendre la nature du problème et s'il peut être surmonté en changeant la nature de l'INPUT lui-même.
Ok, c'est VRAIMENT étrange! J'ai trouvé que la solution consiste simplement à ajouter max-width:100%
à une entrée avec width:100%;padding:5px;
. Cependant, cela soulève encore plus de questions (que je poserai dans une question distincte), mais il semble que width utilise le modèle de boîte CSS normal et que max-width utilise le modèle de border-box d'Internet Explorer. Comme c'est étrange.
Ok, ce dernier semble être un bogue dans Firefox 3. Internet Explorer 8 et Safari 4 limitent la largeur maximale à 100% + padding + border, ce que la spécification dit de faire. Enfin, Internet Explorer a fait quelque chose de bien.
Oh mon dieu, c'est génial! En jouant avec cela, et avec beaucoup d'aide des vénérables gourous Dean Edwards et Erik Arvidsson , j'ai réussi à rassembler trois solutions distinctes pour créer un véritable cross-browser 100% largeur sur des éléments avec un rembourrage et des bordures arbitraires. Voir la réponse ci-dessous. Cette solution ne nécessite aucun balisage HTML supplémentaire, juste une classe (ou un sélecteur) et un comportement facultatif pour Internet Explorer hérité.
input
éléments apparemment non conformes à la spécification CSS 2.1, tandis que la question à laquelle vous avez lié demande comment éviter le débordement des boîtes qui se produit parfaitement dans les limites de la spécification CSS 2.1. Les questions et leurs solutions se chevauchent, mais les appeler des doubles exacts est tout simplement faux.