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 falschAntworten:
Schauen Sie sich an, was ich mir ausgedacht habe, eine Lösung, die den relativ unbekannten
box-sizing:border-box
Stil von CSS 3 verwendet. Dies ermöglicht eine "echte" Breite von 100% für jedes Element, unabhängig von der Auffüllung und / oder den Rändern dieser Elemente.Diese Lösung unterstützt Internet Explorer 6 und Internet Explorer 7 über ein von Erik Arvidsson geschriebenes Verhalten mit einigen Verbesserungen von Dean Edwards, um prozentuale und andere Nicht-Pixel-Breiten zu unterstützen.
Arbeitsbeispiel
Verhalten (boxsizing.htc)
quelle
width:100%
aber es funktioniert nicht, wenn Sie verwendenwidth:auto
, siehe hier: jsfiddle.net/hGuzEDer Grund dafür ist, dass die Größe einer Texteingabe durch ihr Größenattribut bestimmt wird. add size = "50" innerhalb des <input> -Tags. Dann ändern Sie es in Größe = "100" - sehen Sie, was ich meine?
Ich vermute, es gibt eine bessere Lösung, aber die einzige, die mir in den Sinn kommt, ist etwas, das ich in der Frage "Versteckte Funktionen von HTML" zu SO gefunden habe: Verwenden Sie ein inhaltsbearbeitbares div anstelle einer Eingabe. Das Übergeben der Benutzereingaben an das beiliegende Formular (falls erforderlich) kann etwas schwierig sein.
Versteckte Funktionen von HTML
quelle
button
auch mit dem, das keinsize
Attribut hat?input
um ein ersetztes Element handelt.Am besten wickeln Sie die Eingabe in ein Div mit Ihrem Rand, Ihren Rändern usw. ein und lassen die Eingabe mit einer Breite von 100% und ohne Rand, ohne Ränder usw. im Inneren.
Beispielsweise,
quelle
Sie könnten es so vortäuschen:
quelle
Versuche dies:
quelle
Sie könnten es auch so vortäuschen:
quelle
Fügen Sie dies Ihrem Stil hinzu:
quelle