Newbie CSS Frage. Ich dachte width:auto
für ein display:block
Element, das "verfügbaren Platz füllen" bedeutet. Für ein <input>
Element scheint dies jedoch nicht der Fall zu sein. Beispielsweise:
<body>
<form style='background-color:red'>
<input type='text' style='background-color:green;display:block;width:auto'>
</form>
</body>
Dann zwei Fragen:
Gibt es eine Definition genau der Breite: Auto bedeutet? Die CSS-Spezifikation erscheint mir vage, aber vielleicht habe ich den entsprechenden Abschnitt verpasst.
Gibt es eine Möglichkeit, mein erwartetes Verhalten für ein Eingabefeld zu erreichen - dh. verfügbaren Platz füllen wie andere Elemente auf Blockebene?
Vielen Dank!
Antworten:
Ein
<input>
‚s Breite wird von seinem erzeugtensize
Attribute. Die Standardeinstellungsize
ist die Steuerung der automatischen Breite.Sie können es
width:100%
wie in meinem Beispiel unten dargestellt versuchen .Füllt die Breite nicht aus:
Füllt die Breite:
Kleinere Größe, kleinere Breite:
AKTUALISIEREN
Hier ist das Beste, was ich nach ein paar Minuten tun kann. In FF, Chrome und Safari ist es 1 Pixel niedriger und im IE perfekt. (Das Problem ist, dass # ^ & * IE Ränder anders anwendet als alle anderen, daher ist es nicht konsistent.)
quelle
border:2px inset #eee; margin:-2px
. Ich habe es zwar nicht selbst getestet, aber etwas in dieser Richtung."Gibt es eine Definition genau der Breite: Auto bedeutet? Die CSS-Spezifikation erscheint mir vage, aber vielleicht habe ich den entsprechenden Abschnitt verpasst."
Niemand hat den obigen Teil der Frage des Originalplakats tatsächlich beantwortet.
Hier ist die Antwort: http://www.456bereastreet.com/archive/201112/the_difference_between_widthauto_and_width100/
quelle
Wie in der anderen Antwort angegeben, funktioniert width: auto nicht, da die Breite durch das Größenattribut der Eingabe generiert wird, das nicht auf "auto" oder ähnliches eingestellt werden kann.
Es gibt ein paar Problemumgehungen, die Sie verwenden können, damit es gut mit dem Box-Modell funktioniert, aber meines Wissens nichts Fantastisches.
Zuerst können Sie die Auffüllung im Feld mithilfe von Prozentsätzen festlegen und sicherstellen, dass sich die Breite zu 100% addiert, z.
Sie können auch versuchen, die absolute Positionierung zu verwenden, wobei links und rechts auf 0 gesetzt sind. Verwenden dieses Markups:
Und dieses CSS:
Diese absolute Positionierung bewirkt, dass die Eingabe das übergeordnete Feldset horizontal ausfüllt, unabhängig von der Auffüllung oder dem Rand der Eingabe. Ein großer Nachteil davon ist jedoch, dass Sie sich jetzt mit der Höhe des Feldsatzes befassen müssen, die 0 ist, sofern Sie sie nicht einstellen. Wenn Ihre Eingaben alle dieselbe Höhe haben, funktioniert dies für Sie. Stellen Sie einfach die Höhe des Feldsatzes auf die Höhe der Eingabe ein.
Abgesehen davon gibt es einige JS-Lösungen, aber ich mag es nicht, grundlegendes Styling mit JS anzuwenden.
quelle
Da
input
'swidth
durch seinsize
Attribut gesteuert wird, initialisiere ich eininput
width
nach seinem Inhalt folgendermaßen:quelle
#angular
spezifische Antwort keine gültige Antwort auf die Frage des OP ist (und ich nicht abstimme), bin ich zu diesem Thema gekommen, nur um diese spezielle Idee zu finden.Es ist vielleicht nicht genau das, was Sie wollen, aber meine Problemumgehung besteht darin, das Autowidth-Styling auf ein Wrapper-Div anzuwenden und dann Ihre Eingabe auf 100% zu setzen.
quelle
Die einzige Option, die ich mir vorstellen kann, ist die Verwendung
width:100%
. Wenn Sie das Eingabefeld auch auffüllen möchten,label
anstatt nur einen Container darum zu platzieren, verschieben Sie stattdessen die Formatierung auf diese Beschriftung, und geben Sie die Auffüllung der Beschriftung an. Eingabefelder sind starr.quelle
Antwort 1 - "Antwort" gab eine nette Antwort / einen Link dafür. Kurz gesagt, "auto" ist die Standardeinstellung. Es ist also so, als würde man alle Änderungen in der Breite eines Elements entfernen
Antwort 2 -
width: 100%
stattdessen verwenden. Es füllt die 100% des übergeordneten Containers, in diesem Fall das "Formular".quelle
Absolut erstaunliche Links, die eine absolut erstaunliche Funktion beschreiben:
https://css-tricks.com/snippets/css/a-guide-to-flexbox
https://www.htmllion.com/css-flexbox.html
Das Wesentliche:
display: flex;
.flex-grow: 1;
auf jedes der enthaltenen Elemente ein.Bearbeiten - Beispiel :
quelle