前言
練習 Sass 來實現星空的背景
實作的網址唷唷唷唷唷唷
開始前 先創立一個 Html 及 SCSS 檔案
index.html & stars.scss
html 簡易代碼如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" href="./stars.css" /> <title>Document</title> </head> <body> <div class="layer1"></div> <div class="layer2"></div> <div class="layer3"></div> <div class="title">Sass 星空</div> </body> </html>
|
stars.scss 初始如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| html { height: 100%; background: radial-gradient(ellipse at bottom, #1b2735 0%, #090a0f 100%); overflow: hidden; }
.title { position: absolute; top: 50%; left: 50%; color: #fff; text-align: center; font-family: "lato", sans-serif; font-weight: bold; font-size: 50px; letter-spacing: 10px; margin-top: -60px; padding-left: 10px; background: linear-gradient(white, #38495a); background-color: text; -webkit-background-clip: text; color: transparent; }
|
接下來開始來寫星星
1 2 3 4 5 6 7 8 9 10 11 12
| .layer1 { $size: 100px;
position: fixed; width: $size; height: $size; border-radius: 50%; background: #f40; left: 0; top: 0; box-shadow: 10vw 10vh #fff, 20vw 20vh #fff; }
|
第一顆星星 出來了!!!!
當然這樣沒辦法變成滿螢幕的星星
但發現可以透過box-shadow
來控制星星數量 還有位置
所以可以寫一個funtion
來處理星星
1 2 3 4 5 6 7 8 9 10
| @function getShadows($n) { $shadows: "#{random(100)}vw #{random(100)}vh #fff";
@for $i from 2 through $n { $shadows: "#{$shadows},#{random(100)}vw #{random(100)}vh #fff"; }
@return unquote($shadows); }
|
把box-shadow
後面帶入 function : getShadows(1000); <—————假設 1000 顆星星
這樣星星就出來啦~~
然後要做移動效果
開始寫一個動畫 把每顆星星往上移到螢幕外面
1 2 3 4 5
| @keyframes moveUp { 100% { transform: translateY(-100vh); } }
|
在剛剛的.layer1
加上 animation
1 2 3 4 5 6 7 8 9 10 11 12
| .layer1 { $size: 1px; position: fixed; width: $size; height: $size; border-radius: 50%; background: #f40; left: 0; top: 0; box-shadow: getShadows($count); animation: moveUp 100s linear infinite; }
|
100S 可以寫成變數$duration
1 2 3 4 5 6 7 8 9 10 11 12 13
| .layer1 { $size: 1px;
position: fixed; width: $size; height: $size; border-radius: 50%; background: #f40; left: 0; top: 0; box-shadow: getShadows($count); animation: moveUp $duration linear infinite; }
|
這樣開始畫面就可以移動拉~~~
但是這樣還有個問題
就是畫面移開 下面就沒星星了
所以可以在後面加一個&::after
1 2 3 4 5 6 7 8 9 10
| &::after { content: ""; position: fixed; width: $size; height: $size; left: 0; top: 100vh; border-radius: inherit; box-shadow: inherit; }
|
接下來這只是第一層星星
剛剛 html 還有其他 2、 3 層
所以可以用 for 迴圈來寫
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| $duration: 400s; $count: 1000; @for $i from 1 through 3 { $duration: floor($duration/2); $count: floor($count/2); .layer#{$i} { $size: #{$i}px; position: fixed; width: $size; height: $size; border-radius: 50%; background: #f40; left: 0; top: 0; box-shadow: getShadows($count); animation: moveUp $duration linear infinite; &::after { content: ""; position: fixed; width: $size; height: $size; left: 0; top: 100vh; border-radius: inherit; box-shadow: inherit; } } }
|
這樣就完成星空 SCSS
總結
少少的code
就可以完成星星
未來想增加層數星星 還可以修改 for 迴圈 輕鬆修改