# 【Day15】project 3 --- 動態互動天氣盒子 ## 重點 - sublime快速鍵,例如:poa--->tab鍵--->position: absolute / ff--->tab鍵--->font-family: / bgc--->tab鍵--->background-color: / m--->tab鍵--->margin: / p--->tab鍵--->padding: / ...... - 新的置中方法 ```css= display: flex justify-content: center //水平對齊 align-items: center //垂直對齊 ``` - 陰影製造 box-shadow: X偏移/Y偏移/模糊程度/顏色 - 顏色漸變(線性) linear-gradient(角度,開始顏色,結束顏色) - 圓角不同位置的調整 border-radius: 左上/右上/右下/左下 - 調整背景位置 background-position - 顏色不同表示方式 rgba(色票or顏色名稱,透明度) - 虛線 stroke-dasharray - 對於同名稱但不同順序的快速調整方式:利用nth-child(n) - 鼠標樣式 cursor - 打勾輸入(HTML) ```htmlmixed= input(type="checkbox") ``` 若想在任何地方都可選取(非僅限於打勾框框內),可加入label,並將所有元素包含在其中。 ## 程式碼 **HTML(jade)** ```htmlmixed= .daybox label input#switch_night(type="checkbox") .top .moon .cloud .rain .rain.rain2 .rain.rain3 svg.temsvg circle(cx=0 cy=100 r=3) text(x=0 y=100) 27°C circle(cx=70 cy=80 r=3) text(x=70 y=80) 28°C circle(cx=140 cy=60 r=3) text(x=140 y=60) 29°C circle(cx=210 cy=70 r=3) text(x=210 y=70) 28.5°C circle(cx=280 cy=100 r=3) text(x=280 y=100) 27°C circle(cx=350 cy=40 r=3) text(x=350 y=40) 31°C circle(cx=420 cy=50 r=3) text(x=420 y=50) 30°C polyline(points="0,100 70,80 140,60 210,70 280,100 350,40 420,50") .text_area .temperature 27°C .infos .address 花蓮縣吉安鄉 .time 星期日 下午3:00 .bottom .dayweather h3 MON svg(viewbox="-50 -50 100 100") circle.sun(cx=0 cy=0 r=22) .dayweather h3 TUE svg(viewbox="-50 -50 100 100") circle.sun(cx=0 cy=0 r=22) .dayweather h3 WED svg(viewbox="-50 -50 100 100") circle.sun(cx=0 cy=0 r=22) circle.cloud(cx=0 cy=30 r=20) circle.cloud(cx=-15 cy=30 r=20) circle.cloud(cx=-30 cy=30 r=20) circle.cloud(cx=-25 cy=10 r=15) circle.cloud(cx=-7 cy=15 r=15) .dayweather h3 THUR svg(viewbox="-50 -50 100 100") circle.sun(cx=0 cy=0 r=22) circle.cloud(cx=0 cy=30 r=20) circle.cloud(cx=-15 cy=30 r=20) circle.cloud(cx=-30 cy=30 r=20) circle.cloud(cx=-25 cy=10 r=15) circle.cloud(cx=-7 cy=15 r=15) .dayweather h3 FRI svg(viewbox="-50 -50 100 100") circle.sun(cx=0 cy=0 r=22) circle.cloud(cx=0 cy=30 r=20) circle.cloud(cx=-15 cy=30 r=20) circle.cloud(cx=-30 cy=30 r=20) circle.cloud(cx=-25 cy=10 r=15) circle.cloud(cx=-7 cy=15 r=15) .dayweather h3 SAT svg(viewbox="-63 -30 100 100") line.rain(x1=-25 y1=15 x2=-25 y2=35) line.rain(x1=-14 y1=5 x2=-14 y2=25) line.rain(x1=-5 y1=20 x2=-5 y2=45) circle.cloud(cx=0 cy=30 r=20) circle.cloud(cx=-15 cy=30 r=20) circle.cloud(cx=-30 cy=30 r=20) circle.cloud(cx=-25 cy=10 r=15) circle.cloud(cx=-7 cy=15 r=15) .dayweather h3 SUN svg(viewbox="-63 -30 100 100") circle.cloud(cx=0 cy=30 r=20) circle.cloud(cx=-15 cy=30 r=20) circle.cloud(cx=-30 cy=30 r=20) circle.cloud(cx=-25 cy=10 r=15) circle.cloud(cx=-7 cy=15 r=15) ``` **CSS(sass)** ```css= $color_white: #f3f3f3 $color_yellow: #FFD633 $color_black: #222 $color_blue_start: #19283D $color_blue_end: #1D678F $color_rain: #4DACFF $color_white_cloud: #f2f9fe $color_grey_cloud: #ccc * // border: solid 1px black position: relative font-family: 'Frank Ruhl Libre', 微軟正黑體 @mixin size($w,$h) width: $w height: $h html, body width: 100% height: 100% margin: 0 padding: 0 display: flex justify-content: center align-items: center background-color: $color_black label cursor: pointer .daybox width: 50% max-width: 400px background-color: $color_white box-shadow: 0px 0px 20px rgba(black,0.3) border-radius: 5px cursor: pointer &:hover .bottom height: 100px .dayweather opacity: 1 top: 0px .top height: 330px background: linear-gradient(20deg,$color_blue_start,$color_blue_end) background-size: 100% 300% animation: daylight 5s both border-radius: 5px 5px 0px 0px @keyframes daylight 0% background-position: 100% 30% 0% background-position: 100% 100% .temsvg width: 100% polyline stroke: $color_white stroke-width: 1px fill: none opacity: 0.2 text fill: $color_white transform: translateX(-10px) translateY(20px) font-size: 12px opacity: 0 circle fill: $color_white opacity: 0.2 .rain +size(2px,10px) position: absolute left: 45px bottom: 15px animation: raindrop 1s infinite linear background-color: $color_white .rain2 left: 70px bottom: 20px animation-delay: -0.4s .rain3 left: 30px bottom: 20px animation-delay: -0.7s @keyframes raindrop 0% transform: translateY(0px) 100% transform: translateY(50px) opacity: 0 .moon +size(50px,50px) border-radius: 100% box-shadow: 15px -15px position: absolute left: 50px top: 100px animation: moonmove 20s infinite @keyframes moonmove 0% box-shadow: 15px -15px $color_yellow transform: translateX(-15px) translateY(15px) 100% box-shadow: -30px 30px $color_yellow transform: translateX(30px) translateY(-30px) .cloud +size(100px,36px) position: absolute left: 200px bottom: 50px border-radius: 20px animation: clouddrift 4s infinite background-color: $color_white box-shadow: 0px 0px 20px rgba(black,0.3) &:before, &:after content: "" // border: solid 1px display: block +size(50px,50px) border-radius: 100% position: absolute background-color: $color_white &:before left: 16px top: -28px &:after left: 35px top: -20px @keyframes clouddrift 0% transform: translateY(0px) 50% transform: translateY(-10px) 100% transform: translateY(0px) .bottom height: 10px display: flex justify-content: center box-shadow: 0px 0px 20px rgba(black,0.3) border-radius: 0px 0px 5px 5px overflow: hidden transition-duration: 2s .dayweather width: calc(100% / 7 - 5px) text-align: center opacity: 0 top: 20px transition: 0.5s h3 font-size: 8px color: rgba($color_black,0.6) font-weight: 400 letter-spacing: 1px svg width: 100% max-width: 40px height: 40px .sun fill: $color_yellow stroke: rgba($color_yellow,0.5) stroke-width: 30px stroke-dasharray: 5px .rain stroke: $color_rain .cloud fill: $color_grey_cloud .dayweather:nth-child(1) transition-delay: 0.2s .dayweather:nth-child(2) transition-delay: 0.4s .dayweather:nth-child(3) transition-delay: 0.6s .dayweather:nth-child(4) transition-delay: 0.8s .dayweather:nth-child(5) transition-delay: 1s .dayweather:nth-child(6) transition-delay: 1.2s .dayweather:nth-child(7) transition-delay: 1.4s .text_area display: inline-block position: absolute bottom: 25px left: 25px color: $color_white .temperature font-size: 75px line-height: 80px .infos font-size: 13px opacity: 0.5 .moon,.cloud transition: 0.5s .temsvg polyline transition: 0.5s 0.3s text transition: 0.5s 0.6s circle transition: 0.5s #switch_night display: none #switch_night:checked+.top .moon,.cloud opacity: 0.2 .temsvg polyline,text,circle opacity: 1 ``` ## 呈現 {%youtube E-5TTdjL4PU %} :::warning 內容主要整理自「動畫互動網頁程式入門 (HTML/CSS/JS)」課程,網址:https://hahow.in/courses/56189df9df7b3d0b005c6639/discussions?item=5a1e1745a2c4b000589dd21d :::