suchen
HeimWeb-FrontendCSS-TutorialCosmic Canvas: Interaktive Deep Space CSS-Kunst

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
Cosmic Canvas: 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:

  1. 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!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Don ' t Comma-tendet: Fokus in den Schwerpunkt, wenn Sie eine tiefe Browserunterstützung benötigenDon ' t Comma-tendet: Fokus in den Schwerpunkt, wenn Sie eine tiefe Browserunterstützung benötigenApr 18, 2025 am 09:25 AM

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.

Erzählen Sie die Geschichte des GrafikdesignsErzählen Sie die Geschichte des GrafikdesignsApr 18, 2025 am 09:19 AM

Lassen Sie mich dies einfach für Sie rahmen

Designprinzipien für Entwickler: Prozesse und CSS -Tipps für besseres WebdesignDesignprinzipien für Entwickler: Prozesse und CSS -Tipps für besseres WebdesignApr 18, 2025 am 09:12 AM

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

Draggin ' und Dropfen ' in ReactDraggin ' und Dropfen ' in ReactApr 17, 2025 am 11:52 AM

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

Schnelle SoftwareSchnelle SoftwareApr 17, 2025 am 11:49 AM

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

Verschachtelte Gradienten mit HintergrundclipVerschachtelte Gradienten mit HintergrundclipApr 17, 2025 am 11:47 AM

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,

Verwenden von RequestAnimationFrame mit React -HooksVerwenden von RequestAnimationFrame mit React -HooksApr 17, 2025 am 11:46 AM

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

Müssen Sie nach oben auf der Seite scrollen?Müssen Sie nach oben auf der Seite scrollen?Apr 17, 2025 am 11:45 AM

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

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

SecLists

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

Dreamweaver CS6

Visuelle Webentwicklungstools

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung