Warum verhält sich display:block;width:auto;
meine Texteingabe nicht wie ein Div und füllt die Containerbreite aus?
Ich hatte den Eindruck, dass ein div einfach ein Blockelement mit automatischer Breite ist. Sollten im folgenden Code nicht div und der Eingang identische Abmessungen haben?
Wie bekomme ich die Eingabe, um die Breite zu füllen? 100% Breite funktioniert nicht, da die Eingabe einen Abstand und einen Rand hat (was eine endgültige Breite von 1 Pixel + 5 Pixel + 100% + 5 Pixel + 1 Pixel verursacht). Feste Breiten sind keine Option, und ich suche etwas Flexibleres.
Ich würde eine direkte Antwort auf eine Problemumgehung vorziehen. Dies scheint eine CSS-Eigenart zu sein, und das Verständnis kann später nützlich sein.
<!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>
Ich sollte darauf hinweisen, dass ich dies bereits mit Wrapper-Problemumgehungen tun kann. Abgesehen von dieser Verschraubung mit der Seitensemantik und den CSS-Auswahlbeziehungen versuche ich, die Art des Problems zu verstehen und zu verstehen, ob es durch Ändern der Art des EINGANGS selbst überwunden werden kann.
Ok, das ist wirklich seltsam! Ich habe festgestellt, dass die Lösung darin besteht, einfach max-width:100%
eine Eingabe mit hinzuzufügen width:100%;padding:5px;
. Dies wirft jedoch noch mehr Fragen auf (die ich in einer separaten Frage stellen werde), aber es scheint, dass width das normale CSS-Box-Modell und max-width das Internet Explorer-Border-Box-Modell verwendet. Wie seltsam.
Ok, das letzte scheint ein Fehler in Firefox 3 zu sein. Internet Explorer 8 und Safari 4 beschränken die maximale Breite auf 100% + Auffüllen + Rand, was in der Spezifikation angegeben ist. Schließlich hat Internet Explorer etwas richtig gemacht.
Oh mein Gott, das ist großartig! Während ich damit spielte und mit viel Hilfe der ehrwürdigen Gurus Dean Edwards und Erik Arvidsson , gelang es mir, drei separate Lösungen zusammenzusetzen, um eine echte browserübergreifende Breite von 100% für Elemente mit willkürlichen Auffüllungen und Rändern zu erzielen. Siehe Antwort unten. Diese Lösung erfordert kein zusätzliches HTML-Markup, nur eine Klasse (oder einen Selektor) und ein optionales Verhalten für den älteren Internet Explorer.
input
Elementen, die anscheinend nicht der CSS 2.1-Spezifikation entsprechen, während die Frage, mit der Sie verknüpft haben, die Frage stellt, wie überlaufende Boxen verhindert werden können, die übrigens perfekt innerhalb der Grenzen der CSS 2.1-Spezifikation auftreten. Sowohl die Fragen als auch ihre Lösungen überschneiden sich, aber es ist einfach falsch