CSS-Feldgröße

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

Ohne field-sizing mussten Sie entweder eine durchschnittliche Größe für ein Textfeld schätzen oder mit JavaScript Zeichen zählen und die Höhe oder Breite des Elements erhöhen, während der Nutzer Text eingab. Mit anderen Worten: Es war nicht einfach und es gab viele Fehler, wenn versucht wurde, den Inhalt zu verfolgen, den ein Nutzer in eine Eingabe eingegeben hatte.

Bei field-sizing ist eine Zeile CSS erforderlich, um die Größe basierend auf dem Inhalt zu ermöglichen. Dieser inhaltsbasierte Größenstil funktioniert nicht nur für Textfelder.

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

Browser Support

  • Chrome: 123.
  • Edge: 123.
  • Firefox: not supported.
  • Safari: not supported.

Source

Spezifikation | Erläuterung

Du magst Kurzvideos?

Wes Bos und Jhey haben jeweils ein tolles Video auf Twitter veröffentlicht, in dem sie field-sizing vorstellen.

Welche Elemente sind von der Feldgröße betroffen?

Hier ist eine Liste der <form>-Elemente, auf die field-sizing angewendet werden kann, mit einer Zusammenfassung der Auswirkungen auf jedes Element.

<textarea>

Die Eingabe wird auf min-inline-size oder auf die Größe des Platzhalters minimiert.

Während Nutzer tippen, wird die Eingabe in der Inline-Richtung vergrößert, bis eine maximale Inline-Größe erreicht wird. An diesem Punkt wird der Text umgebrochen und die Blockgröße der Eingabe wird so angepasst, dass sie in die neue Zeile passt.

<select> und <select multiple>

Das Auswahlelement schrumpft, um der ausgewählten Option zu entsprechen.

Ein Auswahlfeld mit dem Attribut multiple wird so groß, dass es die breiteste Option umschließt, und so hoch, dass es die Anzahl der Optionen umschließt.

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

Die Eingabe wird auf min-inline-size oder auf die Größe des Platzhalters minimiert.

Während Nutzer tippen, wird die Eingabe in Richtung Inline erweitert, bis sie eine max-inline-size erreicht. An diesem Punkt wird der Eingabewert durch Überlauf abgeschnitten.

<input type="file">

Die Eingabe wird auf die Schaltfläche und den vorab ausgefüllten Dateinamen reduziert.

Nach dem Hochladen einer Datei wird das Eingabefeld so breit wie die Schaltfläche und der Dateiname.

Ergebnisse ansehen, testen und vergleichen

Hier ist ein interaktives und minimalistisches Beispiel für das Verhalten vor und nach der Änderung jedes Formularelements, die durch field-sizing beeinflusst wird.

In Codepen ausprobieren

Näheres dazu

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

In Codepen ausprobieren

Umgang mit leeren und überlaufenden Stilen

Wenn Sie field-sizing verwenden, müssen Sie einige zusätzliche Schritte ausführen. Ahmad Shadeed nennt es „defensives CSS“. Dabei geht es nicht unbedingt darum, genau festzulegen, wie etwas funktionieren oder aussehen soll, sondern es soll vor einem unerwünschten visuellen Zustand geschützt werden. Bisher hatten Eingaben eine relativ feste Größe. Nach dem Anwenden von field-sizing: content können sie jedoch viel zu klein oder viel zu groß werden.

Die folgenden Stile sind ein guter Ausgangspunkt. Sie sorgen dafür, dass die Elemente nicht in einen zu kleinen Bereich zusammenschrumpfen und im Fall von textarea 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;
}

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

Was ist der Standardwert für „Feldgröße“?

Der Standardwert von field-sizing ist fixed. Es sind nur die beiden Werte fixed oder content zulässig.