Verwenden von CSS-Variablen zum Erstellen dynamischer Themen in Puck
Puck ist der visuelle Open-Source-Editor für React, der die nächste Generation von Seitenerstellern und No-Code-Produkten ermöglicht. Geben Sie uns einen Stern auf GitHub! ⭐️
Bei der Integration von Puck in Ihr Seitenerstellungsprodukt besteht eine häufige Anforderung darin, Ihren Benutzern die zentrale Verwaltung des Themas der Seite zu ermöglichen, ohne Anpassungen an jeder Komponente vornehmen zu müssen.
Zum Beispiel: Benutzer benötigen eine Möglichkeit, Schriftstile global zu verwalten – auch für Komponenten, die der Seite bereits hinzugefügt wurden. So könnte das in Aktion aussehen:
Da Puck nur eine React-Komponente ist, gibt es viele Möglichkeiten, dieses Problem zu lösen (und auch andere, komplexere Zustände zu verwalten). In diesem Artikel werde ich mich auf einen der einfachsten und zugleich leistungsstärksten Ansätze konzentrieren: CSS-Eigenschaften. Lasst uns eintauchen!
Für dieses Tutorial gehe ich davon aus, dass Sie über ein grundlegendes Verständnis von Puck und seiner Funktionalität verfügen. Wenn Sie neu bei Puck sind, machen Sie sich keine Sorgen – Sie können trotzdem gerne mitmachen! Ich empfehle jedoch, den Leitfaden „Erste Schritte“ zu lesen, um sich mit den Grundlagen vertraut zu machen.
Projekt-Setup mit Vite
Ich beginne damit, ein Projekt mit dem Gerüstskript von Vite einzurichten. Sie können diesem Abschnitt gerne folgen oder ihn überspringen, wenn Sie bereits ein Projekt mit Puck haben.
Wenn Sie Next.js oder Remix verwenden, können Sie auch eines der offiziellen Puck-Rezepte zum Einrichten Ihres Projekts verwenden.
Projekt erstellen
Um zu beginnen, öffnen Sie Ihr Terminal und führen Sie die folgenden Befehle aus, um ein neues Vite-Projekt zu erstellen:
npm create vite@latest puck-global-themes -- --template react cd puck-global-themes npm install
Puck installieren
Als nächstes installieren Sie das Puck-Paket:
npm i @measured/puck --save
Widersprüchliche Stile löschen
Wenn Sie ein neues Projekt mit Vite starten, werden einige Standardstile mitgeliefert, die mit denen von Puck kollidieren. Um dies zu beheben, löschen Sie src/index.css und src/App.css und entfernen Sie dann ihre Importe aus src/main.jsx und src/App.jsx:
// main.jsx import "./index.css"; // Remove this line
// App.jsx import "./App.css"; // Remove this line
Rendern des Puck-Editors
Wenn die grundlegende Projektstruktur fertig ist, gehen Sie zu Ihrer src/App.jsx-Datei und ersetzen Sie deren Inhalt durch den folgenden Code. Dadurch wird Puck mit einer Grundkonfiguration zum Ziehen und Ablegen von Überschriften- und Absatzkomponenten eingerichtet:
Beachten Sie, dass ich der Einfachheit halber in diesem Beispiel das Inline-Styling verwende
// App.jsx import { Puck } from "@measured/puck"; import "@measured/puck/puck.css"; // The configs for each of your draggable components // Ideally you would pull each of these to their own files const headingConfig = { defaultProps: { title: "Title", }, fields: { title: { type: "text", }, }, render: ({ title }) => { return ( <div> <h1>{title}</h1> </div> ); }, }; const paragraphConfig = { defaultProps: { content: "This is a paragraph...", }, fields: { content: { type: "textarea", }, }, render: ({ content }) => { return ( <div> <p>{content}</p> </div> ); }, }; // The Puck configuration object const config = { components: { Heading: headingConfig, Paragraph: paragraphConfig, }, root: { render: ({ children }) => { return ( <main > <p>Finally, run the application in development mode, navigate to http://localhost:5173, and check that everything is working as expected:<br> </p> <pre class="brush:php;toolbar:false">npm run dev
Super! Da Sie nun über eine Grundlage verfügen, auf der Sie aufbauen können, fügen wir Themen für Ihre Benutzer hinzu.
Themen hinzufügen
Wie ich bereits erwähnt habe, sind benutzerdefinierte CSS-Eigenschaften eine ausgezeichnete Wahl, um Ihrem Editor interaktive Themen hinzuzufügen. Warum ist das ein toller Ansatz? Weil es leichtgewichtig ist, keine externen Abhängigkeiten erfordert und (größtenteils) nativ vom Browser verwaltet wird.
Aufstellen
Um dynamisches Design mit CSS-Eigenschaften hinzuzufügen, müssen Sie Ihre Designvariablen als Eigenschaften bei einem übergeordneten Element der Komponente definieren, die sie benötigt. Dies kann die Stammkomponente von Puck oder eine andere übergeordnete Komponente in der Hierarchie Ihres Editors sein. Es spielt wirklich keine Rolle, solange Sie sie definieren und sie dann mithilfe der var-CSS-Funktion dort lesen, wo Sie sie benötigen.
In diesem Tutorial konzentriere ich mich auf die Verwendung der Root-Komponente von Puck, damit Benutzer die Schriftgröße und -farbe für Überschriften und Absätze an einer einzigen Stelle auf der obersten Ebene des Editors festlegen können:
Schritt 1: Definieren Sie die Variablen
Beginnen Sie mit der Definition eines Objekts, um alle CSS-Variablennamen zu zentralisieren. Dies verbessert die Konsistenz und erspart Ihnen die Debugging-Probleme, die durch falsch eingegebene Eigenschaftsnamen in CSS verursacht werden.
Profi-Tipp: Wenn Sie TypeScript verwenden, können Sie eine Aufzählung anstelle eines Objekts verwenden, um zusätzliche Typsicherheit zu erreichen
npm create vite@latest puck-global-themes -- --template react cd puck-global-themes npm install
Schritt 2: Fügen Sie die Variablen zur übergeordneten Komponente hinzu
Aktualisieren Sie als Nächstes die Stammkonfiguration, um die Requisiten und Felder für die Designvariablen einzuschließen. Dadurch können Benutzer die benutzerdefinierten Eigenschaften direkt in den Stammfeldern des Editors aktualisieren.
Dazu müssen Sie die Felder für die neuen Root-Requisiten und ihre Standardwerte definieren:
npm i @measured/puck --save
Danach lesen Sie in der Renderfunktion des Roots die benutzerdefinierten Eigenschaften aus den Requisiten und übergeben sie als CSS-Variablen an das Root-Element.
// Das Puck-Konfigurationsobjekt const config = { Komponenten: { //... vorhandene Komponenten }, Wurzel: { //... die Konfiguration der Stammfelder render: ({ Children, FontColor, HeadingFontSize, ParagraphFontSize}) => { zurückkehren ( <Haupt > <p>Wenn Sie jetzt zum Editor gehen, sollten Sie die neuen Felder auf der Stammebene für jede der Requisiten sehen. Es gibt noch kein visuelles Feedback, aber wenn Sie sich die Stile im Stammverzeichnis des Editors ansehen, werden Sie sehen, dass die Variablen bei jeder Änderung, die Sie an den Feldern vornehmen, festgelegt werden.</p> <p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173634396450671.jpg" class="lazy" alt="Using CSS variables to create dynamic themes in Puck" /></p><h3> Schritt 3: Zugriff auf gemeinsam genutzte Variablen in untergeordneten Komponenten </h3> <p>Zuletzt greifen Sie auf die Designvariablen in den Komponenten zu, die Sie benötigen, indem Sie die var-CSS-Funktion in Ihren Stilen verwenden.</p> <p>In unserem Beispiel fügen Sie sie in der ÜberschriftConfig und im AbsatzConfig:<br> hinzu </p> <pre class="brush:php;toolbar:false">const headingConfig = { //... Die Konfiguration der Überschriftenfelder render: ({ title }) => { zurückkehren ( <div> <h1 > <p>Wenn Sie zum Editor zurückkehren, einige Überschriften und Absätze per Drag-and-Drop verschieben und dann die Felder auf der Stammebene ändern, werden Sie feststellen, dass alle Überschriften und Absätze aktualisiert werden, um diese Änderungen widerzuspiegeln:</p> <p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173634396650466.jpg" class="lazy" alt="Using CSS variables to create dynamic themes in Puck"></p> <p>? Und das ist es! Ihre Benutzer können jetzt ein Thema definieren, das nahtlos auf verschiedene Komponenten auf ihren Seiten angewendet wird.</p> <h3> Vor- und Nachteile der Verwendung von CSS-Eigenschaften </h3> <p>✅ Vorteile:</p>
- Einfache und intuitive Einrichtung
- Integrierte Kaskadierungs- und Überschreibungsfunktionen in der Seitenhierarchie ermöglichen eine einfache Verwaltung gemeinsamer Stile und die Möglichkeit, einzelne Komponenten anzupassen
- Keine externen Abhängigkeiten und geringer Platzbedarf – benutzerdefinierte CSS-Eigenschaften werden nativ von Browsern unterstützt
- Geringerer Standard- und Wartungsaufwand als bei anderen Optionen
❌ Nachteile:
- Nur für einfaches Styling geeignet – kann nicht mit komplexen Daten oder Logik umgehen
- Das Debuggen kann schwierig sein, wenn mehrere Ebenen von CSS-Eigenschaftsüberschreibungen verschachtelt werden
Wir gehen weiter
Abhängig von Ihrem spezifischen Anwendungsfall gibt es viele Möglichkeiten, das Thema Ihres Editors noch weiter zu verfeinern:
- Vordefinierte Themen verwenden – In einigen Anwendungen müssen Sie möglicherweise Standard-Themenoptionen bereitstellen – wie „Dunkel“, „Hell“ oder „Minimal“. Hierzu könnten Sie ein Auswahlfeld mit mehreren Themenobjekten verwenden. Diese Objekte können alle CSS-Eigenschaften als Einheit gruppieren, sodass Benutzer problemlos zwischen verschiedenen Themen für ihre Seiten wechseln können, ohne einzelne Felder ausfüllen zu müssen.
- Stilbibliotheken integrieren – Für größere Redakteure ist es möglicherweise besser, eine Stilbibliothek zu verwenden, um vorgefertigte Stile zu nutzen, Ihre Definitionen zu optimieren und den Boilerplate zu reduzieren. Bibliotheken wie Tailwind oder Emotion können problemlos in Puck integriert werden, was Ihnen Flexibilität und Effizienz bietet und gleichzeitig ein elegantes Erscheinungsbild beibehält. Tatsächlich bietet Puck sogar ein Emotion-Plugin an, das den Integrationsprozess für Sie vereinfacht!
- Designüberschreibungen auf Komponentenebene hinzufügen – Manchmal müssen Benutzer möglicherweise einzelne Komponenten auf ihren Seiten anpassen, damit sie sich vom Rest des Designs abheben. Da wir CSS-Eigenschaften verwenden, kann dies leicht erreicht werden, indem die Designvariablen der übergeordneten Ebene auf Komponentenebene überschrieben werden. Sie könnten beispielsweise ein optionales Feld für die Schriftfarbe in Ihrer Überschriftskomponente hinzufügen, das, falls vorhanden, die CSS-Eigenschaft speziell für dieses h1-Element neu definieren würde.
Bleiben Sie in Verbindung und bauen Sie weiter auf?
Ich hoffe, dieses Tutorial hat Sie in die Lage versetzt, CSS-Variablen für dynamisches Theming in Puck-basierten Seitenerstellern zu nutzen. Die Open-Source-Entwicklergemeinschaft steht im Mittelpunkt der Entwicklung von Puck und ich kann es kaum erwarten, die innovativen Apps zu sehen, die Sie erstellen!
Wir sind bestrebt, die Fähigkeiten von Puck noch weiter auszubauen, mit einem ständigen Strom neuer Funktionen, einschließlich einer revolutionären Drag-and-Drop-Engine für komplexe Raster und Layouts, die demnächst auf den Markt kommt, und einer Reihe neuer Plugins am Horizont.
Wenn Sie also von Puck inspiriert wurden oder Sie über die neuesten Funktionen auf dem Laufenden bleiben möchten, können Sie wie folgt mitmachen:
- ⭐ Markieren Sie uns auf GitHub, um das Projekt zu unterstützen und andere zu inspirieren, sein Potenzial zu erkunden.
- ? Treten Sie unserer Discord-Community bei, um Ihre Projekte zu teilen, Fragen zu stellen und zusammenzuarbeiten.
- ? Folgen Sie uns auf X und Bluesky für die neuesten Updates, Vorschauen und Funktionsankündigungen.
- ? Tauchen Sie tiefer in die offizielle Dokumentation ein, um fortgeschrittene Techniken und Einblicke zu erhalten, die Ihre No-Code-Workflows auf die nächste Stufe heben können.
Das obige ist der detaillierte Inhalt vonVerwenden von CSS-Variablen zum Erstellen dynamischer Themen in Puck. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Der Umfang von JavaScript bestimmt den Zugangsumfang von Variablen, die in globale, Funktions- und Blockebene unterteilt sind. Der Kontext bestimmt die Richtung davon und hängt von der Funktionsaufrufmethode ab. 1. Scopes umfassen globaler Umfang (überall zugänglich), Funktionsumfang (nur innerhalb der Funktion gültig) und Blockebene (LET und const sind innerhalb von {} gültig). 2. Der Ausführungskontext enthält das variable Objekt, die Bereichskette und die Werte davon. Dies weist auf globale oder undefinierte in der normalen Funktion hin, die Methode richtet sich auf das Anrufobjekt, der Konstruktor auf das neue Objekt und kann auch explizit durch Anruf/Anwendung/Bindung angegeben werden. 3.. Verschluss bezieht sich auf Funktionen, die auf externe Bereiche zugreifen und sich erinnern. Sie werden häufig zur Kapselung und zum Cache verwendet, können aber verursachen

Um den Wert des HTML -Eingangsfelds zu erhalten, besteht der Kern darin, das entsprechende Element durch die DOM -Operation zu finden und das Wertschild zu lesen. 1. Verwenden Sie das Dokument. Nach dem Hinzufügen einer ID zur Eingabe können Sie das Element abrufen und den Wert durch diese Methode lesen. 2. Verwenden Sie QuerySelector, um flexibler zu sein, und Sie können Elemente basierend auf Attributen wie Name, Klasse, Typ usw. auswählen. 3.. Sie können Eingabe- oder Ereignishörer hinzufügen, um interaktive Funktionen zu erzielen, z. B. den Erhalt von Eingabeinhalten in Echtzeit; 4. Achten Sie auf das Timing der Skriptausführung, die Rechtschreibfehler und das Beurteilungen von Null und stellen Sie sicher, dass das Element vorhanden ist, bevor Sie auf den Wert zugreifen.

Es gibt zwei Kernmethoden, um den ausgewählten Optionsknopfwert zu erhalten. 1. Verwenden Sie QuerySelector, um das ausgewählte Element direkt zu erhalten, und verwenden Sie die Eingabe [name = "Your-Radio-Name"]: Überprüfter Selektor, um das ausgewählte Element zu erhalten und das Wertattribut zu lesen. Es ist für moderne Browser geeignet und hat einen präzisen Code. 2. Verwenden Sie das Dokument. Darüber hinaus müssen Sie auf die Schreibweise des Namensattributs, die Behandlung von nicht ausgewählten Situationen und die dynamische Belastung des Inhalts achten

Um JavaScript zum Erstellen eines sicheren Sandbox-Iframe zu verwenden, verwenden Sie zunächst das Sandbox-Attribut von HTML, um das Iframe-Verhalten zu begrenzen, z. Zweitens durch Hinzufügen spezifischer Token wie Zulassungen zum Entspannen von Berechtigungen nach Bedarf; Kombinieren Sie dann Postmessage (), um eine sichere Cross-Domänen-Kommunikation zu erreichen und gleichzeitig Nachrichtenquellen und -daten zu überprüfen. Vermeiden Sie schließlich häufige Konfigurationsfehler, wie z.

Die Kompositionapi in VUE3 eignet sich besser für komplexe Logik- und Typableitung, und Optionsapi eignet sich für einfache Szenarien und Anfänger. 1. Optionsapi organisiert Code nach Optionen wie Daten und Methoden und hat eine klare Struktur, aber komplexe Komponenten werden fragmentiert. 2. Die Zusammensetzung verwendet ein Setup, um die verwandte Logik zu konzentrieren, die der Wartung und Wiederverwendung förderlich ist. 3. Compositionapi realisiert konfliktfreie und parameterizierbare logische Wiederverwendung durch komponierbare Funktionen, was besser ist als Mixin; 4. COMPOSECTI hat eine bessere Unterstützung für Typscript und eine genauere Typableitung; 5. Es gibt keinen signifikanten Unterschied in der Leistung und des Verpackungsvolumens der beiden; 6.

Die Debugging komplexer JavaScript -Anwendungen erfordert systematische Verwendung von Tools. 1. Setzen Sie Breakpoints und bedingte Haltepunkte, um verdächtige Prozesse abzufangen, z. 2. Aktivieren Sie die Blackboxing-Funktion, um die Interferenz der Bibliothek von Drittanbietern zu blockieren. 3.. Verwenden Sie Debugger -Aussagen, um den Eintrag des Debugs zu kontrollieren, der auf dem Umwelturteil basiert. 4. Verfolgen Sie die Anrufverbindung über CallStack, analysieren Sie den Ausführungspfad und den variablen Status und lokalisieren Sie so die Hauptursache des Problems effizient.

Es gibt einen wesentlichen Unterschied zwischen den Webworkers und Javatheads von JavaScript in der gleichzeitigen Verarbeitung. 1. JavaScript nimmt ein Single-Thread-Modell an. Webworker ist ein unabhängiger Thread, der vom Browser bereitgestellt wird. Es ist geeignet, zeitaufwändige Aufgaben auszuführen, die die Benutzeroberfläche nicht blockieren, aber das DOM nicht bedienen können. 2. Java unterstützt echtes Multithreading von der Sprachebene, die über die Thread-Klasse erstellt wurde und für eine komplexe gleichzeitige Logik und die serverseitige Verarbeitung geeignet ist. 3.. Webworker verwenden Postmessage (), um mit dem Hauptfaden zu kommunizieren, der sehr sicher und isoliert ist. Java -Threads können Speicher teilen, sodass Synchronisierungsprobleme aufmerksam werden müssen. V.

Das Typ -Casting ist das Verhalten der automatischen Konvertierung eines Werttyps in einen anderen Typ in JavaScript. Zu den allgemeinen Szenarien gehören: 1. Bei Verwendung von Operatoren, wenn eine Seite eine String ist, wird die andere Seite ebenfalls in eine Zeichenfolge konvertiert, wie z. B. '5' 5. Das Ergebnis ist "55"; 2. Im booleschen Kontext werden nicht-Boolenische Werte implizit in boolesche Typen wie leere Zeichenfolgen, 0, Null, undefined usw. konvertiert, die als falsch angesehen werden; 3.. Null nimmt an numerischen Operationen teil und wird in 0 umgewandelt, und undefined wird in NAN umgewandelt. 4. Die durch implizite Umwandlung verursachten Probleme können durch explizite Konvertierungsfunktionen wie Nummer (), String () und Boolean () vermieden werden. Das Beherrschen dieser Regeln hilft
