Features

Anwendungsfälle

Blog

Veranstaltung

Dokumente

Deutsch

Text skalieren leicht gemacht: Framer's Fit Text-Funktion

24.11.2024

Text skalieren leicht gemacht: Framer's Fit Text-Funktion

24.11.2024

Text skalieren leicht gemacht: Framer's Fit Text-Funktion

24.11.2024

Text skalieren leicht gemacht: Framer's Fit Text-Funktion

24.11.2024

Wir haben ein neues Feature namens „Fit Text“ eingeführt, mit dem Sie fettgedruckte Überschriften erstellen können, die sich an jede Containergröße anpassen. Dieses Feature unterstützt mehrere Zeilen, Inline-Formatierungen sowie Mindest- und Höchstbreiten und sorgt dabei für eine hohe Leistung. In diesem Beitrag erkläre ich, wie wir das umgesetzt haben.

Die Herausforderung: Keine native CSS-Lösung

Ich begann mit der Erkundung bestehender Bibliotheken, aber sie hatten alle einen Nachteil: Sie mussten den Text messen, der gestreckt werden musste, bevor sie gerendert werden konnten. Das ist ein entscheidender Nachteil für uns, da Framer-Seiten statisch generiert werden und perfekt in jedem Browser gerendert werden müssen, bevor JavaScript ausgeführt wird. Als nächstes versuchte ich font-size: 100vw, was großartig funktioniert, wenn der Text den Bildschirm ausfüllt. Es wird jedoch herausfordernd, wenn Sie möchten, dass der Text einen beliebigen Container ausfüllt. Dazu müssen Sie einen komplexen CSS-Calculette-Ausdruck erstellen, der die Größe aller Vorfahren als Prozentsätze der gesamten vw darstellt. Obwohl dies machbar ist (und etwas, das Framer bereits tut, um die Bildqualität zu optimieren), wäre es schwierig, eine Komponente zu erstellen, die Text mit einer vw-Größe enthält, da es schwierig wäre, die Vorfahrengröße im isolierten Komponenten-Code zu kennen.

Die Lösung: SVG mit viewBox und foreignObject

Ich entdeckte, dass ein SVG mit einer viewBox und Unterstützung für HTML in SVG über ein foreignObject-Element einen Skalierungseffekt bieten könnte. Dieser Trick erfordert, dass man die genaue Begrenzungsbox des Textes kennt und sie der viewBox zuweist, und dann den Text innerhalb des SVG in einem foreignObject rendert. Das foreignObject bedeutet, dass Bildschirmleser und SEO keine Probleme haben, den Text darin zu finden. Der Nachteil ist, dass die viewBox des SVG aktualisiert werden muss, wann immer sich die Größe des Textes ändert, und sie synchron gehalten werden muss; andernfalls wird der Text abgeschnitten oder nicht zentriert. Das schließt diese Lösung wahrscheinlich für die meisten benutzerdefinierten Seiten aus. Es ist einfach nicht machbar, diese viewBox jedes Mal zu bestimmen, wenn ein Text bearbeitet wird oder sich Eigenschaften ändern, die seine Größe beeinflussen.

Die Automatisierung: Framer zur Rettung

Zum Glück kann Framer diesen Prozess automatisieren und die Mühe beseitigen, die viewBox manuell zu aktualisieren, wenn sich der Text ändert. Immer wenn Sie den Text auf „Fit“ setzen, misst Framer den Text in seiner aktuellen font-size, erhält die Begrenzungsbox, speichert sie und rendert ein SVG um Ihren Text mit einer viewBox. Jedes Mal, wenn Sie den Text bearbeiten, wiederholt Framer diesen Prozess, um sicherzustellen, dass die viewBox relativ zum Text bleibt. Framer kann sogar ein nahtloses Bearbeitungserlebnis unterstützen, indem es die Textgröße zurück in Pixel umwandelt, wann immer Sie es im Texteditor öffnen, indem es einige grundlegende Berechnungen basierend auf der aktuellen Breite durchführt. Wenn Sie mit der Bearbeitung fertig sind, setzt Framer die viewBox wieder ein, und sie wird mühelos wieder skaliert, ohne dass es einen Leistungseinfluss auf die Leinwand gibt.

Das Ergebnis: Butterweiches Größenänderungen

Wenn Sie Ihre Seite bereitstellen, ist die viewBox bereits berechnet, sodass Framer die Seite statisch generieren kann und der Text in der genau richtigen Größe gerendert wird, sogar bevor JavaScript geladen ist. Das führt zu keinen Flackern, Größenänderungen oder Einblendungen und butterweichen Größenänderungen.

Die Zukunft: Containerabfragen

In Zukunft planen wir, auf Containerabfragen umzuschalten, sobald sie von den Browsern, die Framer unterstützt, vollumfänglich unterstützt werden. Sie können die cqw-Einheit auf die gleiche Weise verwenden, wie Sie eine vw-Einheit verwenden können, aber cqw ist relativ zum Container. Dies würde für Komponenten funktionieren, da es die Notwendigkeit eines komplexen CSS calc-Statements beseitigt.

Fit Text ist ein ausgezeichnetes Beispiel dafür, wie Framer Ingenieursarbeit abstrahieren kann, die schwer auf einer Fall-zu-Fall-Basis zu implementieren wäre, und stattdessen können Sie sich darauf konzentrieren, großartige Seiten zu veröffentlichen. Es ist aufregend zu sehen, was die Leute mit diesem neuen Feature entwickeln werden.

Ressourcen

Akademie

Dokumente

Akademie

Marktplatz

Desktop-Anwendung

Marke

Unternehmen

Über

Karriere

Veranstaltungen

Unterstützung

Nachrichtenraum

Kontaktiere uns

Rechtlich

Missbrauch

Gebühren

Cookies

Bedingungen

Ressourcen

Akademie

Dokumente

Akademie

Marktplatz

Desktop-Anwendung

Marke

Unternehmen

Über

Karriere

Veranstaltungen

Unterstützung

Nachrichtenraum

Kontaktiere uns

Rechtlich

Missbrauch

Gebühren

Cookies

Bedingungen

Ressourcen

Akademie

Dokumente

Akademie

Marktplatz

Desktop-Anwendung

Marke

Unternehmen

Über

Karriere

Veranstaltungen

Unterstützung

Nachrichtenraum

Kontaktiere uns

Rechtlich

Missbrauch

Gebühren

Cookies

Bedingungen