如何創作用純 CSS 繪製一支栩栩如生的鉛筆
阿新 • • 發佈:2018-11-22
效果預覽
按下右側的“點選預覽”按鈕可以在當前頁面預覽,點選連結可以全屏預覽。
https://codepen.io/comehope/pen/PaZYBw
可互動視訊教程
此視訊是可以互動的,你可以隨時暫停視訊,編輯視訊中的程式碼。
請用 chrome, safari, edge 開啟觀看。
https://scrimba.com/p/pEgDAM/cEQqefK
原始碼下載
本地下載
每日前端實戰系列的全部原始碼請從 github 下載:
https://github.com/comehope/front-end-daily-challenges
程式碼解讀
定義dom, 容器中包含筆頭、筆桿(包含文字)和橡皮 3 部分:
<div class="pencil">
<span class="taper"></span>
<span class="barrel">made in China</span>
<span class="eraser"></span>
</div>
居中顯示:
body { margin: 0; height: 100vh; display: flex; align-items: center; justify-content: center; background-color: lightskyblue; }
定義鉛筆的尺寸:
.pencil {
position: relative;
width: 50em;
height: 3.5em;
}
畫出筆桿:
.pencil .barrel {
position: absolute;
width: 40em;
left: 4em;
background-color: green;
border-top: 1em solid forestgreen;
border-bottom: 1em solid darkgreen;
}
設定筆桿上文字的樣式:
.pencil .barrel { line-height: 1.5em; font-family: sans-serif; text-transform: uppercase; color: silver; text-align: center; }
用偽元素畫出筆頭:
.pencil .taper::before,
.pencil .taper::after {
content: '';
position: absolute;
left: -4em;
border-style: solid;
border-width: calc(3.5em / 2) 4em;
}
.pencil .taper::before {
border-color: transparent burlywood transparent transparent;
}
.pencil .taper::after {
border-color: transparent green transparent transparent;
transform: scale(0.3);
}
畫出橡皮:
.pencil .eraser {
position: absolute;
right: 0;
width: 6em;
height: 1.5em;
background-color: lightpink;
border-top: 1em solid pink;
border-bottom: 1em solid lightcoral;
border-top-right-radius: 0.5em;
border-bottom-right-radius: 0.5em;
}
用偽元素畫出橡皮上的鐵箍:
.pencil .eraser::before {
content: '';
position: absolute;
top: -1em;
left: 0;
width: 1.5em;
height: 1.5em;
background-color: silver;
border-top: 1em solid lightgray;
border-bottom: 1em solid gray;
}
最後,增加陰影:
.pencil {
filter: drop-shadow(5px 10px 3px gray);
}
大功告成!