CSS-Feldgröße

Eine Codezeile für die automatische Größenanpassung von Elementen mit bearbeitbaren Inhalten.

Ohne field-sizing musste zum Erstellen eines bedarfsgerechten Eingabefelds entweder die durchschnittliche Größe eines Textfelds geschätzt oder JavaScript verwendet werden, um die Zeichen zu zählen und die Höhe oder Breite des Elements entsprechend dem vom Nutzer eingegebenen Text zu erhöhen. Mit anderen Worten: Es war nicht einfach und es war fehleranfällig, wenn es versuchte, dem Inhalt zu folgen, den ein Nutzer in eine Eingabe eingegeben hatte.

Bei field-sizing benötigen Sie eine CSS-Zeile, um die Größenanpassung an den Inhalt zu ermöglichen. Dieser inhaltsbasierte Größenanpassungs-Style funktioniert auch für mehr als nur einen Textbereich.

textarea, select, input {
  field-sizing: content;
}

Spezifikationen | Erläuterung

Du magst Kurzvideos?

Wes Bos und Jhey haben jeweils ein tolles Video auf Twitter, in dem euch field-sizing vorgestellt wird.

Auf welche Elemente wirkt sich die Größenanpassung aus?

Hier ist eine Liste von <form>-Elementen, mit denen field-sizing arbeitet, mit einer Zusammenfassung der Auswirkungen auf jedes Element.

<textarea>

Die Eingabe wird auf min-inline-size oder auf den Platzhalter minimiert.

Wenn der Nutzer etwas eingibt, wächst die Eingabe in Inline-Richtung, bis sie eine maximale Inline-Größe erreicht. An dieser Stelle wird der Text umgebrochen und die Blockgröße der Eingabe wird an die neue Zeile angepasst.

<select> und <select multiple>

Das Auswahlelement wird so verkleinert, dass es in die ausgewählte Option passt.

Eine Auswahl mit dem Attribut multiple wird so vergrößert, dass sie zur breitesten Option passt und so hoch ist, wie für die Anzahl der Optionen erforderlich ist.

<input type="text">, <input type="email"> und <input type="number">

Die Eingabe wird auf min-inline-size oder auf den Platzhalter minimiert.

Wenn der Nutzer etwas eingibt, wächst die Eingabe in Inline-Richtung, bis sie einen max-inline-size erreicht. An diesem Punkt wird der Eingabewert durch den Überlauf begrenzt.

<input type="file">

Die Eingabe wird auf die Schaltfläche und den vorausgefüllten Dateinamenstext minimiert.

Beim Hochladen einer Datei wird die Eingabe so breit wie die Schaltfläche und der Dateiname.

Ergebnisse ansehen, testen und vergleichen

Hier ist ein interaktives und minimales Beispiel für das Vorher-Nachher-Verhalten jedes Formularelements, das von field-sizing beeinflusst wird.

Auf Codepen ausprobieren

Bei genauerer Betrachtung

Wenn Sie einen [placeholder] verwenden, wird der Platzhalter zum Inhalt. Dies wurde bereits erwähnt, aber hier erwähnt, weil es wichtig ist, dies zu beachten, wenn Sie ein Formular gestalten. Ein langer oder kurzer Platzhalter ändert die intrinsische Größe von Eingaben mit field-sizing: content.

Auf Codepen ausprobieren

Umgang mit leeren oder überlaufenden Stilen

Wenn Sie field-sizing verwenden, bedeutet dies, dass Sie zusätzliche Arbeit leisten müssen. Ahmad Shadeed nennt es „defensives CSS“, bei dem das Ziel nicht unbedingt genau festlegen muss, wie sich etwas verhalten oder aussehen soll, sondern es vor einem unerwünschten visuellen Zustand versetzen soll. Früher hatten die Eingaben ziemlich viele feste Größen, aber nach dem Anwenden von field-sizing: content können die Eingaben viel zu klein oder zu groß werden.

Die folgenden Stile sind ein guter Ausgangspunkt. Sie sorgen dafür, dass die Elemente nicht zu einer zu kleinen Box zusammengefasst und im Fall von textarea auch nicht zu groß werden.

textarea {
  min-block-size: 3.5rlh;
  min-inline-size: 20ch;
  max-inline-size: 50ch;
}

select {
  min-inline-size: 5ch;
  min-block-size: 1.5lh;
}

input {
  min-inline-size: 7ch;
}

Dieses CSS verwendet relative Einheiten für die Größe. Die neue lh-Einheit ist perfekt für die Blockgrößen und ch eignet sich gut für die Inline-Größen.

Wie lautet der Standardwert für die Feldgröße?

Der Standardwert von field-sizing ist fixed und akzeptiert nur die beiden Werte fixed oder content.