Quelle: https://medium.com/better-programming, Autor: Ferenc Almasi Moderne Webanwendungen enthalten viele Bilder und machen den Großteil der über das Netzwerk heruntergeladenen Bytes aus. Durch eine Optimierung können Sie deren Leistung besser ausnutzen. Wenn Sie geometrische Formen als Hintergrundbilder verwenden, gibt es eine Alternative: Sie können den Hintergrund programmgesteuert mit der CSS Paint API [1] generieren. In diesem Tutorial erkunden wir seine Fähigkeiten und schauen uns an, wie wir damit dynamische Hintergründe erstellen können, die unabhängig von der Auflösung sind. Dies ist die Ausgabe dieses Tutorials: Referenz: Einführung zur CSS Paint API Einrichten des Projekts Erstellen Sie zunächst eine neue Datei <!DOCTYPE html> <html lang="de"> <Kopf> <meta charset="UTF-8" /> <meta name="viewport" content="width=Gerätebreite, Anfangsmaßstab=1.0" /> <title>:art: CSS Paint API</title> <link rel="stylesheet" href="styles.css" /> </Kopf> <Text> <textarea Klasse="Muster"></textarea> <Skript> wenn ('paintWorklet' in CSS) { CSS.paintWorklet.addModule('pattern.js'); } </Skript> </body> </html> Dabei sind einige Dinge zu beachten:
Was ist ein Worklet? Ein Paint-Worklet ist eine Klasse, die definiert, was auf die Leinwand gezeichnet werden soll. Sie funktionieren ähnlich wie das Hier definieren wir auch die CSS-Stile. Hier verwenden wir unser Worklet: .Muster { Breite: 250px; Höhe: 250px; Rand: 1px durchgezogen #000; Hintergrundbild: Farbe (Muster); } Ich habe einen schwarzen Rand hinzugefügt, damit wir Definieren von Worklets Öffnen Sie Klasse Muster { malen(Kontext, Leinwand, Eigenschaften) { } } registerPaint('Muster', Muster); Hier können Sie Kontext PaintRenderingContext2D CanvasRenderingContext2D API Zeichnen Sie ein Rechteck Der nächste Schritt besteht darin, etwas anzuzeigen, also zeichnen wir das Rechteck. Fügen Sie Ihrer malen(Kontext, Leinwand, Eigenschaften) { für (let x = 0; x < canvas.height / 20; x++) { für (let y = 0; y < canvas.width / 20; y++) { const bgColor = (x + y) % 2 === 0 ? '#FFF' : '#FFCC00'; Kontext.shadowColor = "#212121"; Kontext.shadowBlur = 10; Kontext.shadowOffsetX = 10; Kontext.shadowOffsetY = 1; Kontext.beginPath(); Kontext.Füllstil = Hintergrundfarbe; Kontext.Rechteck(x * 20, y * 20, 20, 20); Kontext.Füllen(); } } } Alles, was wir hier getan haben, ist, eine verschachtelte Schleife zu erstellen, die die Breite und Höhe der Leinwand durchläuft. Da die Größe des Rechtecks 20 beträgt, teilen wir die Höhe und Breite des Rechtecks durch 20. In Zeile 4 können wir den Moduloperator verwenden, um zwischen den beiden Farben zu wechseln. Für mehr Tiefe habe ich auch einige Schatten hinzugefügt. Zum Schluss zeichnen wir das Rechteck auf die Leinwand. Wenn Sie es in Ihrem Browser öffnen, sollte ungefähr Folgendes angezeigt werden: Den Hintergrund dynamisch gestalten Abgesehen von der Größenänderung Öffnen Sie Ihre .Muster { Breite: 250px; Höhe: 250px; Rand: 1px durchgezogen #000; Hintergrundbild: Farbe (Muster); + --Musterfarbe: #FFCC00; + --Mustergröße: 23; + --Musterabstand: 0; + --Muster-Schatten-Unschärfe: 10; + --Musterschatten-x: 10; + --Musterschatten-y: 1; } Sie können benutzerdefinierte CSS-Eigenschaften definieren, indem Sie ihnen das Präfix Überprüfen der Unterstützung in CSS Um sicherzustellen, dass die Paint-API unterstützt wird, können wir auch nach CSS-Unterstützung suchen. Hierzu haben wir zwei Möglichkeiten:
/* Erste Option */ @supports (Hintergrund: Farbe(Muster)) { /** * Wenn dieser Abschnitt ausgewertet wird, bedeutet dies, dass die Paint-API unterstützt wird**/ } /** * Zweite Option * Wenn die Paint-API unterstützt wird, überschreibt die letztere Regel die erste Regel. * Falls nicht unterstützt, wird es durch CSS ungültig und es gelten die Regeln für url(). **/ .Muster { Hintergrundbild: URL (Muster.png); Hintergrundbild: Farbe (Muster); } Zugriff auf Parameter in einem Painting-Worklet Um diese Parameter in Klasse Muster { // Alles, was von der Methode „inputProperties“ zurückgegeben wird, ist für das Paint-Worklet zugänglich. statisch get inputProperties() { zurückkehren [ „--Musterfarbe“, „--Mustergröße“, „--pattern-spacing“, '--Muster-Schatten-Unschärfe', '--pattern-shadow-x', „--Muster-Schatten-y“ ]; } } Um innerhalb der malen(Kontext, Leinwand, Eigenschaften) { const props = { Farbe: Eigenschaften.get('--pattern-color').toString().trim(), Größe: parseInt(Eigenschaften.get('--pattern-size').toString()), Abstand: parseInt(Eigenschaften.get('--pattern-spacing').toString()), Schatten: Unschärfe: parseInt(Eigenschaften.get('--pattern-shadow-blur').toString()), x: parseInt(Eigenschaften.get('--pattern-shadow-x').toString()), y: parseInt(Eigenschaften.get('--pattern-shadow-y').toString()) } }; } Für die Farbe müssen wir es in eine Zeichenfolge umwandeln. Alles andere muss in Zahlen umgewandelt werden. Dies liegt daran, dass Um die Lesbarkeit zu verbessern, habe ich zwei neue Funktionen erstellt, die das Parsen für uns übernehmen: malen(Kontext, Leinwand, Eigenschaften) { const getPropertyAsString = Eigenschaft => Eigenschaften.get(Eigenschaft).toString().trim(); const getPropertyAsNumber = Eigenschaft => parseInt(properties.get(property).toString()); const props = { Farbe: getPropertyAsString('--pattern-color'), Größe: getPropertyAsNumber('--pattern-size'), Abstand: getPropertyAsNumber('--pattern-spacing'), Schatten: Unschärfe: getPropertyAsNumber('--pattern-shadow-blur'), x: getPropertyAsNumber('--pattern-shadow-x'), y: getPropertyAsNumber('--pattern-shadow-y') } }; } Jetzt müssen wir nur noch alles innerhalb der For-Schleife durch den entsprechenden für (let x = 0; x < canvas.height / props.size; x++) { für (let y = 0; y < canvas.width / props.size; y++) { const bgColor = (x + y) % 2 === 0 ? '#FFF' : props.color; Kontext.shadowColor = "#212121"; Kontext.shadowBlur = Requisiten.shadow.blur; Kontext.shadowOffsetX = props.shadow.x; Kontext.shadowOffsetY = props.shadow.y; Kontext.beginPath(); Kontext.Füllstil = Hintergrundfarbe; Kontext.Rechteck(x * (Eigenschaftengröße + Eigenschaftenabstand), y * (Requisitengröße + Requisitenabstand), Requisitengröße, Requisitengröße); Kontext.Füllen(); } } Gehen Sie jetzt zurück zu Ihrem Browser und versuchen Sie, ihn zu ändern. Warum ist die CSS Paint API für uns nützlich? Was sind die Anwendungsfälle? Am offensichtlichsten ist, dass dadurch die Größe der Antwort reduziert wird. Durch den Verzicht auf die Verwendung von Bildern können Sie eine Netzwerkanfrage und mehrere tausend Bytes einsparen. Dies verbessert die Leistung. Bei komplexen CSS-Effekten, die DOM-Elemente verwenden, können Sie auch die Anzahl der Knoten auf der Seite reduzieren. Da Sie mit der Paint-API komplexe Animationen erstellen können, sind keine zusätzlichen leeren Knoten erforderlich. Der größte Vorteil besteht meiner Meinung nach darin, dass es viel besser anpassbar ist als ein statisches Hintergrundbild. Die API ermöglicht Ihnen außerdem die Erstellung auflösungsunabhängiger Bilder, sodass Sie sich keine Sorgen machen müssen, ob eine einzige Bildschirmgröße fehlt. Wenn Sie sich heute für die Verwendung der CSS Paint API entscheiden, stellen Sie unbedingt einen Polyfill bereit, da dieser noch nicht weit verbreitet ist. Wenn Sie das fertige Projekt noch optimieren möchten, können Sie es aus diesem GitHub-Repository [2] klonen. Die Breite und Tiefe sorgen für einen großartigen Artikel : In Bezug auf die Tiefe befasst sich dieses Buch mit den Gründen hinter JS, die weltweit ihresgleichen suchen; in Bezug auf die Breite geht dieses Buch auf die Details der Semantik ein, und nach der Lektüre werden Sie über den Mechanismus nicht länger verwirrt sein. Die Idee der Supersprache : Alle Dinge haben denselben Zweck und sind ähnlich. Wenn Sie die JS-Shell weglassen, werden Sie feststellen, dass dieses Buch die technische Essenz der Sprache auf hohem Niveau analysiert und auf alle Programmiersprachen anwendbar ist. Der Schlüssel zur Weiterentwicklung liegt im Neulernen : Im Zeitalter hybrider App-, Node-Server-, FaaS-Cloud-Native- und Front-End-Intelligenz kann Ihnen die Rückkehr zum Wesentlichen und die Wiederholung dieses Grundkurses dabei helfen, weiter und schneller voranzukommen. Referenzen[1] CSS Paint-API: https://developer.mozilla.org/en-US/docs/Web/API/CSS_Painting_API [2] GitHub-Repository: https://github.com/flowforfrank/css-paint Dies ist das Ende dieses Artikels über die Verwendung der CSS Paint API zum dynamischen Erstellen von auflösungsunabhängigen variablen Hintergrundeffekten. Weitere relevante Inhalte zu variablen Hintergründen der CSS Paint API finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! |
<<: Vue erhält Token zur Implementierung des Beispielcodes für die Token-Anmeldung
>>: Detailliertes Tutorial zum Abrufen der Oracle 11g-Imagekonfiguration über Docker
Ziehen Sie einfach das Image, erstellen Sie einen...
1. Rendern JD-Effekt Simulationseffekt 2. Grundsa...
Die Legendenkomponente ist eine häufig verwendete...
Ausführung der Hauptbibliothek DATENBANK ERSTELLE...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis Docker-System df Docker-System...
Inhaltsverzeichnis Zabbix überwacht Nginx Zabbix ...
Vorwort Es gibt viele Möglichkeiten, in CSS horiz...
Inhaltsverzeichnis brauchen: fahren: Ideen: errei...
Der Code sieht folgendermaßen aus: <!DOCTYPE h...
Was ist eine Webseite? Die Seite, die nach dem HT...
Clickhouse-Einführung ClickHouse ist ein spalteno...
CSS Sprite, auch bekannt als CSS Sprite, ist eine...
Inhaltsverzeichnis 1. Einleitung 2. Einführung in...
In diesem Artikel wird der spezifische Code für J...