Dies ist eine Einreichung für Frontend Challenge v24.09.04, CSS Art: Space.
Inspiration
Dieses Projekt, „Cosmic Canvas: Interactive Deep Space CSS Art“, wurde von der riesigen Schönheit des Weltraums und der Herausforderung, Himmelsphänomene nur mit CSS und JavaScript nachzubilden, inspiriert. Das Ziel bestand darin, eine immersive, animierte Weltraumszene zu schaffen, die die Leistungsfähigkeit moderner Webtechnologien demonstriert, um komplexe, visuell beeindruckende Kunst zu schaffen, ohne dass umfangreiche Grafikbibliotheken erforderlich sind.
Demo
Github Repo-Link: https://github.com/ZibrasIsmail/Interactive-Deep-Space-CSS-Art
Von Github gehosteter Link: https://zibrasismail.github.io/Interactive-Deep-Space-CSS-Art
Reise
Dieses Projekt begann als Erkundung fortgeschrittener CSS-Techniken und entwickelte sich zu einer umfassenden Weltraumszene. Hier sind einige wichtige Aspekte der Reise:
- Komplexe CSS-Animationen: Die Erstellung realistischer Orbitalbewegungen für Monde und Asteroiden war eine große Herausforderung. Ich habe gelernt, komplexe CSS-Animationen mit mehreren Transformationen zu verwenden, um glatte, kreisförmige Umlaufbahnen zu erzielen.
Dynamische Elementerstellung: Die Verwendung von JavaScript zur dynamischen Erstellung von Sternen, Galaxien und Asteroiden hat mir viel über die DOM-Manipulation und die effiziente Generierung vieler Elemente mit unterschiedlichen Eigenschaften beigebracht.
Farbe und Textur: Die richtigen Farben und Texturen für Himmelskörper herzustellen war eine Übung der Kreativität. Ich habe mit verschiedenen Farbverläufen und Kastenschatten experimentiert, um ein Gefühl von Tiefe und Realismus zu erreichen.
HTML-Struktur
Die HTML-Datei legt die Grundstruktur der Weltraumszene fest:
<div class="space-scene"> <div class="stars"></div> <div class="galaxies"></div> <div class="shooting-stars"></div> <div class="nebula"></div> <div class="planet-system"> <div class="planet main-planet"></div> <div class="planet-ring"></div> <div class="moon moon1"></div> <div class="moon moon2"></div> <div class="moon moon3"></div> </div> <div class="asteroid-belt"></div> </div>
Diese Struktur erstellt Container für verschiedene Raumelemente, die mithilfe von CSS gestaltet und animiert und mit JavaScript gefüllt werden.
CSS-Styling und Animationen
Der CSS-Code erstellt eine visuell reichhaltige Weltraumszene mit verschiedenen Himmelselementen. Es richtet einen dunklen Vollbildhintergrund für die Weltraumszene ein und definiert Stile und Animationen für verschiedene Weltraumobjekte. Sterne und Galaxien werden absolut positioniert und mit funkelnden und leuchtenden Animationen versehen. Durch mehrere radiale Farbverläufe wird ein Nebeleffekt erzeugt. Der Hauptplanet ist mit einem radialen Farbverlauf und einem Leuchteffekt gestaltet, während ein Planetenring mithilfe einer Umrandung erstellt und gedreht wird, um ein 3D-Erscheinungsbild zu erzielen. Drei Monde werden mit unterschiedlichen Farben gestaltet und durch Rotations- und Verschiebungstransformationen umkreisende Animationen erhalten. Sternschnuppen werden mit einem linearen Farbverlauf erstellt und animiert, um sich über den Bildschirm zu bewegen. Um den Planeten herum liegt ein Asteroidengürtel, in dem einzelne Asteroiden zur Rotation animiert werden. Das CSS nutzt ausgiebig Keyframe-Animationen, um Bewegungen und visuelle Effekte zu erzeugen und so den statischen HTML-Elementen Leben einzuhauchen.
body, html { margin: 0; padding: 0; height: 100%; overflow: hidden; } .space-scene { width: 100%; height: 100%; background: #000000; position: relative; overflow: hidden; } .stars, .galaxies { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .star { position: absolute; background-color: #fff; border-radius: 50%; animation: twinkle 4s infinite ease-in-out; } .galaxy { position: absolute; border-radius: 50%; animation: glow 4s infinite alternate; } @keyframes twinkle { 0%, 100% { opacity: 0.5; transform: scale(1); } 50% { opacity: 1; transform: scale(1.2); } } @keyframes glow { 0% { box-shadow: 0 0 2px 1px rgba(255, 255, 255, 0.1); } 100% { box-shadow: 0 0 10px 2px rgba(255, 255, 255, 0.3); } } .nebula { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: radial-gradient( circle at 20% 80%, rgba(255, 0, 100, 0.1) 0%, transparent 50% ), radial-gradient( circle at 80% 20%, rgba(0, 100, 255, 0.1) 0%, transparent 50% ), radial-gradient( circle at 40% 40%, rgba(255, 100, 0, 0.1) 0%, transparent 60% ), radial-gradient( circle at 60% 60%, rgba(100, 0, 255, 0.1) 0%, transparent 60% ); filter: blur(20px); opacity: 0.5; } .planet-system { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 300px; height: 300px; } .main-planet { width: 150px; height: 150px; background: radial-gradient(circle at 30% 30%, #4a89dc, #1c3c78); border-radius: 50%; box-shadow: 0 0 50px rgba(74, 137, 220, 0.8); position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .planet-ring { width: 225px; height: 225px; border: 10px solid rgba(255, 255, 255, 0.2); border-radius: 50%; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%) rotateX(75deg); } .moon { width: 20px; height: 20px; border-radius: 50%; position: absolute; top: 50%; left: 50%; } .moon1 { animation: orbit 30s linear infinite; /* Increased from 10s to 30s */ background: radial-gradient(circle at 30% 30%, #ffd700, #ffa500); box-shadow: inset -2px -2px 4px rgba(0, 0, 0, 0.3), 0 0 8px rgba(255, 215, 0, 0.6); } .moon2 { animation: orbit 45s linear infinite reverse; /* Increased from 15s to 45s */ background: radial-gradient(circle at 30% 30%, #add8e6, #4169e1); box-shadow: inset -2px -2px 4px rgba(0, 0, 0, 0.3), 0 0 8px rgba(65, 105, 225, 0.6); } .moon3 { animation: orbit 60s linear infinite; /* Increased from 20s to 60s */ background: radial-gradient(circle at 30% 30%, #f0e68c, #daa520); box-shadow: inset -2px -2px 4px rgba(0, 0, 0, 0.3), 0 0 8px rgba(218, 165, 32, 0.6); } @keyframes orbit { 0% { transform: rotate(0deg) translateX(100px) rotate(0deg); } 100% { transform: rotate(360deg) translateX(100px) rotate(-360deg); } } .shooting-stars { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .shooting-star { position: absolute; height: 2px; background: linear-gradient(90deg, #ffffff, transparent); animation: shoot 3s ease-out infinite; } @keyframes shoot { 0% { transform: translateX(-100px) translateY(100px); opacity: 1; } 70% { opacity: 1; } 100% { transform: translateX(1000px) translateY(-1000px); opacity: 0; } } .asteroid-belt { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%) rotateX(75deg); width: 350px; height: 350px; border-radius: 50%; } .asteroid { position: absolute; background: #555; border-radius: 50%; top: 50%; left: 50%; transform-origin: 175px 0; animation: rotate 20s linear infinite; } @keyframes rotate { 0% { transform: rotate(0deg) translateX(175px) rotate(0deg); } 100% { transform: rotate(360deg) translateX(175px) rotate(-360deg); } }
Der JavaScript-Code erstellt und positioniert dynamisch zahlreiche kleine Elemente, aus denen die Weltraumszene besteht. Die Hauptfunktion „Himmelsobjekte erstellen“ wählt Containerelemente aus und führt dann eine Schleife aus, um eine bestimmte Anzahl von Sternen, Galaxien, Sternschnuppen und Asteroiden zu erstellen. Für jedes erstellte Element legt es geeignete CSS-Klassen fest, bestimmt zufällig Eigenschaften wie Größe und Position und fügt Animationsverzögerungen und -dauern für ein natürlicheres Erscheinungsbild hinzu. Für Galaxien wählt es außerdem zufällig Farben aus einem vordefinierten Array aus. Jedes erstellte Element wird dann an seinen jeweiligen Container im DOM angehängt. Diese dynamische Erstellung ermöglicht das effiziente Hinzufügen einer großen Anzahl von Elementen und die Erstellung einer detaillierten Raumszene, ohne dass jedes Objekt manuell codiert werden muss. Das Skript wird beim Laden des Fensters ausgeführt und stellt sicher, dass alle HTML-Elemente vorhanden sind, bevor die Himmelsobjekte hinzugefügt werden.
function createCelestialObjects() { const starsContainer = document.querySelector(".stars"); const galaxiesContainer = document.querySelector(".galaxies"); const shootingStarsContainer = document.querySelector(".shooting-stars"); const asteroidBelt = document.querySelector(".asteroid-belt"); const starCount = 1000; const galaxyCount = 50; const shootingStarCount = 5; const asteroidCount = 100; const galaxyColors = ["#FFD700", "#87CEEB", "#FFA500", "#FF69B4", "#00CED1"]; for (let i = 0; i
Das obige ist der detaillierte Inhalt vonCosmic Canvas: Interaktive Deep Space CSS-Kunst. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Ich mag es wirklich: konzentriere mich auf. Es ist ein super nützlicher Selektor, mit dem Sie im Wesentlichen ein übergeordnetes Element auswählen können, wenn eines seiner Kinder im Fokus steht.

Lassen Sie mich dies einfach für Sie rahmen

Es ist technisch wahr, dass jeder kochen kann. Es gibt jedoch einen Unterschied zwischen dem Wissen, wie man ein köstliches Essen zubereitet und auf das Beste wie Sie hofft

Das React -Ökosystem bietet uns viele Bibliotheken, die alle auf die Interaktion von Drag & Drop konzentrieren. Wir haben React-Dnd, React-beautiful-dnd,

In letzter Zeit gab es einige wunderbar miteinander verbundene Dinge über schnelle Software.

Ich kann nicht sagen, dass ich das all das oft im Hintergrund-Clip verwende. I ' D Wette It ' wird in der täglichen CSS-Arbeit kaum jemals verwendet. Aber ich wurde in einem Posten von Stefan Judis daran erinnert,

Die Animation mit RequestAnimationFrame sollte einfach sein, aber wenn Sie die Dokumentation von React nicht gründlich gelesen haben, werden Sie wahrscheinlich auf ein paar Dinge stoßen

Vielleicht ist der einfachste Weg, dies dem Benutzer anzubieten, ein Link, der auf eine ID auf das Element abzielt. Also wie ...


Heiße KI -Werkzeuge

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

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

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

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

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

SecLists
SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

Dreamweaver CS6
Visuelle Webentwicklungstools

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung