個人覺得這篇非常有趣,去年鐵人賽也有拿來練習一次,這次重新切版筆記,想做更完整的記錄。
學習重點
HTML 架構確認
首先只要確認一個架構內容沒問題,其他只要複製就可以了,
1 2 3 4 5 6 7 8 9 10 11
| <div class="wrap"> <div class="card"> <img src="https://picsum.photos/300/300?pepple=10" alt="" /> <div class="content"> <h2>Amos 金魚系列 III</h2> <p> 記得當前留下嘿嘿聯絡人世界盃證明改造輕鬆這就是,本來現金,也會商業幾天懂得力道怪物預期,狀況攝影法。 </p> </div> </div> </div>
|
CSS 樣式
雛形樣式確認
確認架構上到下排列沒問題後,先簡單設定樣式,讓雛型完成。
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| body { display: flex; align-items: center; background-color: #000033; }
.wrap { width: 960px; display: flex; margin: 0 auto; }
.card { width: 300px; margin-right: 10px; margin-left: 10px; background-color: #fff; border: 1px solid #fff; transform: translateY(0px); transition: all 0.5s; cursor: pointer; img { width: 100%; vertical-align: middle; } }
.content { padding: 20px; position: relative; text-align: center; h2 { font-size: 24px; font-weight: bold; border-bottom: 1px solid #333333; padding-bottom: 10px; margin-bottom: 10px; text-align: center; } P { line-height: 1.5; text-align: left; } h2, p { color: #444444; } }
|
寫一個三角形
這次練習的重點在這裡,怎麼寫三角形,這邊就使用到偽元素,使用的是 ::before
來呈現三角形。
- 因為是在
.content
內要呈現三角形,並且要蓋在圖片上,所以要使用絕對定位,父層就是 .content
。
- 使寬度與高度為 0,固定在左上角當做起始點,把線條頂點先抓出來,並給予線條粗細度,因使用偽元素,故可以在左右邊做設定,內容跟頂點一樣,要注意的是因為 .content 有給邊框 1px,所以三角形左右邊的粗細度要各扣掉 1px。
- 在
.content
中背景是白色,所以左右邊線條也給白色,因為要做成三角形的缺角,故頂點的線條顏色使用無色(transparent)。
- 最後使三角形頂點其對齊圖片下方,使用位移
transform: translateY(-100%);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| .content { padding: 20px; position: relative; text-align: center; //三角形寫法 &::before { content: ""; position: absolute; width: 0; height: 0; top: 0; left: 0; border-top: 50px solid transparent; border-left: 149px solid #ffffff; border-right: 149px solid #ffffff; transform: translateY(-100%); } }
|
hover 互動效果
最後加上互動效果就完成這次的人員卡片互動,非常實用的一個練習呢!!
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| .card { width: 300px; margin-right: 10px; margin-left: 10px; background-color: #fff; border: 1px solid #fff; //卡片位移 transform: translateY(0px); transition: all 0.5s; cursor: pointer; img { width: 100%; vertical-align: middle; } //卡片位移效果 &:hover { transform: translateY(-30px); .content { //漸層從下到上 background-image: linear-gradient(0deg, #d0ff34, #fcff35); } }
.content { padding: 20px; position: relative; text-align: center; //三角形寫法 &::before { content: ""; position: absolute; width: 0; height: 0; top: 0; left: 0; border-top: 50px solid transparent; border-left: 149px solid #ffffff; border-right: 149px solid #ffffff; transform: translateY(-100%); } //三角形顏色互動 &:hover { &::before { content: ""; border-left: 149px solid #fcff35; border-right: 149px solid #fcff35; } }
h2 { font-size: 24px; font-weight: bold; border-bottom: 1px solid #333333; padding-bottom: 10px; margin-bottom: 10px; text-align: center; } P { line-height: 1.5; text-align: left; } h2, p { color: #444444; } } }
|
CodePen https://codepen.io/tim_hsu/full/OJMwxvj
參考資料