這是前端挑戰 v24.09.04,CSS 藝術:空間的提交。
靈感
這個專案「Cosmic Canvas:互動式深空 CSS 藝術」的靈感來自於外太空的廣闊美景以及僅使用 CSS 和 JavaScript 重建天體現象的挑戰。目標是創建一個身臨其境的動畫空間場景,展示現代網路技術的力量,無需繁重的圖形庫即可創建複雜的、視覺上令人驚嘆的藝術。
示範
Github 倉庫連結:https://github.com/ZibrasIsmail/Interactive-Deep-Space-CSS-Art
Github 託管連結:https://zibrasismail.github.io/Interactive-Deep-Space-CSS-Art
旅行
這個計畫最初是對先進 CSS 技術的探索,後來發展成一個綜合性的太空場景。以下是旅程的一些關鍵方面:
- 複雜的 CSS 動畫:為衛星和小行星創建逼真的軌道運動是一項重大挑戰。我學會了使用複雜的 CSS 動畫和多種變換來實現平滑的圓形軌道。
動態元素創建:使用 JavaScript 動態創建恆星、星系和小行星,教會了我很多有關 DOM 操作以及如何有效生成具有不同屬性的許多元素的知識。
顏色和紋理:為天體製作正確的顏色和紋理是一項創造力練習。我嘗試了各種漸層和盒子陰影來實現深度感和真實感。
HTML結構
HTML 檔案設定了空間場景的基本結構:
<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>
此結構為各種空間元素建立容器,這些元素將使用 CSS 進行樣式設定和動畫並使用 JavaScript 進行填充。
CSS 樣式和動畫
CSS 程式碼創造了一個具有各種天體元素的視覺豐富的空間場景。它為空間場景設定全螢幕深色背景,並為不同的空間物件定義樣式和動畫。恆星和星係被絕對定位並賦予閃爍和發光的動畫。使用多個徑向漸層創建星雲效果。主行星採用徑向漸變和發光效果設計,而行星環則使用邊框創建並旋轉以獲得 3D 外觀。三個衛星有不同的顏色,並使用旋轉和平移變換給出軌道動畫。流星是用線性漸變創建的,並以動畫方式在螢幕上移動。小行星帶位於地球周圍,各個小行星都以動畫方式旋轉。 CSS 廣泛使用關鍵影格動畫來創建運動和視覺效果,為靜態 HTML 元素帶來生命。
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); } }
JavaScript 程式碼動態建立並定位構成空間場景的眾多小元素。主函數創建天體,選擇容器元素,然後循環創建指定數量的恆星、星系、流星和小行星。對於每個創建的元素,它設置適當的 CSS 類,隨機確定大小和位置等屬性,並添加動畫延遲和持續時間以獲得更自然的外觀。對於星系,它還從預先定義的陣列中隨機選擇顏色。然後,每個建立的元素都會附加到 DOM 中各自的容器中。這種動態創建允許有效地添加大量元素,從而創建詳細的空間場景,而無需手動編碼每個物件。該腳本在視窗載入時運行,確保在新增天體之前所有 HTML 元素都已就位。
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
以上是Cosmic Canvas:互動式深空 CSS 藝術的詳細內容。更多資訊請關注PHP中文網其他相關文章!

@keyframesandCSSTransitionsdifferincomplexity:@keyframesallowsfordetailedanimationsequences,whileCSSTransitionshandlesimplestatechanges.UseCSSTransitionsforhovereffectslikebuttoncolorchanges,and@keyframesforintricateanimationslikerotatingspinners.

我知道,我知道:有大量的內容管理系統選項可用,而我進行了幾個測試,但實際上沒有一個是一個,y&#039;知道嗎?怪異的定價模型,艱難的自定義,有些甚至最終成為整個&

鏈接CSS文件到HTML可以通過在HTML的部分使用元素實現。 1)使用標籤鏈接本地CSS文件。 2)多個CSS文件可通過添加多個標籤實現。 3)外部CSS文件使用絕對URL鏈接,如。 4)確保正確使用文件路徑和CSS文件加載順序,優化性能可使用CSS預處理器合併文件。

選擇Flexbox還是Grid取決於佈局需求:1)Flexbox適用於一維佈局,如導航欄;2)Grid適合二維佈局,如雜誌式佈局。兩者在項目中可結合使用,提升佈局效果。

包含CSS文件的最佳方法是使用標籤在HTML的部分引入外部CSS文件。 1.使用標籤引入外部CSS文件,如。 2.對於小型調整,可以使用內聯CSS,但應謹慎使用。 3.大型項目可使用CSS預處理器如Sass或Less,通過@import導入其他CSS文件。 4.為了性能,應合併CSS文件並使用CDN,同時使用工具如CSSNano進行壓縮。

是的,youshouldlearnbothflexboxandgrid.1)flexboxisidealforone-demensional,flexiblelayoutslikenavigationmenus.2)gridexcelstcelsintwo-dimensional,confffferDesignssignssuchasmagagazineLayouts.3)blosebothenHancesSunHanceSlineHancesLayOutflexibilitibilitibilitibilitibilityAnderibilitibilityAndresponScormentilial anderingStruction

重構自己的代碼看起來是什麼樣的?約翰·瑞亞(John Rhea)挑選了他寫的一個舊的CSS動畫,並介紹了優化它的思維過程。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1
強大的PHP整合開發環境

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver Mac版
視覺化網頁開發工具