怎樣用一個(gè)DIV繪制熊貓頭像

今天要給大家展示的是如何繪制一個(gè)熊貓頭像,就是這個(gè)

如果這是用Photoshop繪制出來(lái)的,你也許并不感到奇怪。但是,我要告訴你這是HTML中的一個(gè)DIV,配合CSS3繪制出來(lái)的。

驚不驚喜???意不意外!?

一個(gè)DIV上怎么做出這樣復(fù)雜的效果?本篇就來(lái)一步步教教你這是如何實(shí)現(xiàn)的。

第一步,先從熊貓臉說(shuō)起


我們先從熊貓的臉、鼻子和嘴講起,因?yàn)檫@些都是用同一個(gè)DIV渲染出來(lái)的,所以首先,我們得有個(gè)DIV:

<div></div>

很簡(jiǎn)單吧。然后利用CSS3的border屬性,勾勒出熊貓的臉:

div {
    width: 210px;
    height: 160px;
    border: 5px solid #333;
}

你也許會(huì)想:這TM在逗我?!這明明就是個(gè)矩形,哪有熊貓臉是個(gè)框?別急,請(qǐng)放下手中的菜刀繼續(xù)看,記得CSS3中的border-radius屬性嗎?border-radius可以制作出各種各樣的圓角,我們就用border-radius屬性把臉“揉揉”圓:

div {
    /* 接著剛才的代碼 */
    border-top-left-radius: 110px;
    border-top-right-radius: 110px;
    border-bottom-left-radius: 110px 60px;
    border-bottom-right-radius: 110px 60px;
}

這樣,熊貓標(biāo)準(zhǔn)的包子臉就完成了:

“面子”的問(wèn)題解決了,鼻子和嘴怎么畫(huà)?什么,再寫(xiě)兩個(gè)DIV?只能用一個(gè)DIV哦!

這就要運(yùn)用到CSS3的徑向漸變(radial-gradient)了,徑向漸變是啥?只說(shuō)學(xué)名你可能不知道,但一看圖肯定就懂了:

這就是徑向漸變,以一個(gè)中心,輻射出一個(gè)顏色漸變的橢圓。CSS3中的radial-gradient屬性就是干這個(gè)事情的,radial-gradient用起來(lái)很簡(jiǎn)單,來(lái)看看它的完整語(yǔ)法:

radial-gradient([[ circle || <length> ][ at <position> ]?,|[ ellipse || [ <length> | <percentage> ]{2} ][ at <position> ]?,|[ [ circle | ellipse ] || <extent-keyword> ][ at <position> ]?, | at <position>,]? <color-stop> [ , <color-stop> ]+ )<extent-keyword> = closest-corner | closest-side | farthest-corner | farthest-side and <color-stop> = <color> [ <percentage> | <length> ]?

是不是要看瘋了:這TM叫簡(jiǎn)單?!不懂的還以為是亂碼。。。請(qǐng)你把菜刀再放一放再聽(tīng)我說(shuō),雖然radial-gradient的完整語(yǔ)法很復(fù)雜,但我們只用到其中三個(gè)參數(shù),簡(jiǎn)單說(shuō)我們只需要告訴radial-gradient:

漸變的中心在哪,輻射的形狀是圓還是橢圓(參數(shù)1)

從什么顏色(參數(shù)2)漸變到什么顏色(參數(shù)3)

怎么樣,這樣清楚了吧。那么我們用radial-gradient畫(huà)上鼻子和嘴:

div {
    /* 接著剛才的代碼 */
    background-image: 
      radial-gradient(ellipse at 50% 60%, 
        #333 12px, transparent 12px), 
      radial-gradient(ellipse at 50% 80%, 
        #555 6px, transparent 6px);
}

你可能不了解顏色值后面的px值是什么意思,別急,一會(huì)兒就會(huì)講到,先來(lái)看看目前的效果:


你可能會(huì)問(wèn):radial-gradient實(shí)現(xiàn)的圓是漸變的,圖中是怎么畫(huà)出一個(gè)實(shí)心圓的?這兒就有個(gè)小技巧了:radial-gradient中,我們不僅可以定義漸變兩邊的顏色,還可以定義顏色漸變的距離:


對(duì)比上下兩種漸變,可以明顯地看到,當(dāng)兩種顏色的漸變距離比較遠(yuǎn)時(shí),漸變過(guò)程比較緩和;而當(dāng)漸變距離很近時(shí),漸變的過(guò)程就很劇烈。那么,當(dāng)兩個(gè)顏色的漸變距離為0,會(huì)怎么樣?


你會(huì)發(fā)現(xiàn)漸變效果完全消失了。看到這兒應(yīng)該就能明白radial-gradient中,顏色值后面的px含義了:定義了該漸變兩個(gè)顏色的兩個(gè)端點(diǎn)。熊貓的鼻子和嘴就是由黑色和白色的徑向漸變構(gòu)成的,只不過(guò)因?yàn)闈u變距離為0,所以就完全去除了漸變效果。

第二步 耳朵和黑眼圈

現(xiàn)在來(lái)畫(huà)熊貓的耳朵黑眼圈。我們唯一的DIV已經(jīng)作為熊貓臉了,用什么來(lái)充當(dāng)黑眼圈呢?你是否想起了CSS3中的 :before、:after偽元素,偽元素默認(rèn)不可見(jiàn),但可以用CSS讓它們展示出來(lái)。偽元素的操作方式和普通DIV一樣,所以有了:before、:after偽元素,我們就憑空多出兩個(gè)“DIV”。

沒(méi)錯(cuò), 我們只要將:before、:after兩個(gè)偽元素展示出來(lái),加上黑色背景以及圓角,就成熊貓的黑眼圈了:

div::before, div::after {
    width: 70px;
    height: 40px;  background-color: #333;
    border-radius: 50% 50% 45% 42%;
    display: block;
    content: '';
    position: absolute;  top: 65px;
}
div::before {
    left: 44px;  transform: rotate(-45deg);
}
div::after {
    left: 125px;  transform: rotate(45deg);
}

寫(xiě)完代碼后效果如下:

既然偽元素被黑眼圈占用了,就要發(fā)愁熊貓的耳朵如何實(shí)現(xiàn)了。幸好,山窮水復(fù)疑無(wú)路,柳暗花明又一村,你是否又想起了CSS3的box-shadow屬性?

仔細(xì)看黑眼圈和耳朵,會(huì)發(fā)現(xiàn)它們的外形是一致的。恰好可以利用上box-shadow的性質(zhì):元素陰影的外形根據(jù)元素本身的形狀而定。沒(méi)錯(cuò)兒,兩只耳朵就用它實(shí)現(xiàn)了!

div::before {
    /* 接著剛才的代碼 */
    box-shadow: 10px -68px 0 -4px #333;
}
div::after {
    /* 接著剛才的代碼 */
    box-shadow:-10px -68px 0 -4px #333;
}

讓我們停下腳步,看看當(dāng)前的效果:

不錯(cuò),已經(jīng)初步成型了。如果能看到這里,說(shuō)明你已經(jīng)學(xué)會(huì)了本篇中絕大部分CSS3的知識(shí)。現(xiàn)在就差最后的點(diǎn)睛之筆了!

第三步 眼睛 & 點(diǎn)綴

相比之前使用的技巧,眼睛的畫(huà)法就沒(méi)有什么神奇,依然是運(yùn)用了radial-gradient屬性,前面已經(jīng)介紹過(guò)radial-gradient可以畫(huà)出實(shí)心圓,這里再告訴你它的另外一個(gè)特性:radial-gradient可以互相疊加。于是,就可以實(shí)現(xiàn)熊貓眼睛中的眼白、瞳孔互相疊加的效果了:

div::before {
    /* 接著剛才的代碼 */
    background-image:
      radial-gradient(circle at 51px 20px, 
        white 3px, transparent 3px),
      radial-gradient(circle at 46px 20px, 
        #333 7px, transparent 7px),
      radial-gradient(circle at 45px 20px, 
        white 10px, transparent 10px)
}
div::after {
    /* 接著剛才的代碼 */
    background-image:
      radial-gradient(circle at 24px 15px,
        white 3px, transparent 3px),
      radial-gradient(circle at 24px 20px,
        #333 7px, transparent 7px),
      radial-gradient(circle at 25px 20px,
        white 10px, transparent 10px)
}

添加完代碼之后的效果:

最后,再對(duì)圖形做兩個(gè)細(xì)節(jié)上調(diào)整:

  1. 加厚臉型底部的厚度,增加些“熊樣”
  2. 在底部增加一些陰影,是圖形具備些立體感
div {
    /* 接著之前的代碼 */
    border-bottom-width: 10px;
    box-shadow: inset 10px -10px 0 #eee;
}

大功告成!


終于,我們用單個(gè)DIV配合CSS3完成了一幅可愛(ài)的熊貓頭像,是不是很有成就感的呢?別急別急,這還僅僅只是一個(gè)熊貓而已,如果你對(duì)單DIV繪制圖形感興趣,可以訪問(wèn)這個(gè)鏈接:

http://a.singlediv.com/

沒(méi)錯(cuò),這些圖形都是僅用一個(gè)DIV做成的,其中大量地運(yùn)用了border-radius、radial-gradient、box-shadow、:before和:after偽元素這些屬性。本文講解的熊貓頭像,也來(lái)自于這個(gè)網(wǎng)站。

通過(guò)本篇的講解,我們了解到了CSS3的屬性的強(qiáng)大,巧妙運(yùn)用這些屬性,可以達(dá)成許多令人意想不到的效果!:-)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、屬性選擇器:id選擇器 # 通過(guò)id 來(lái)選擇類名選擇器 . 通過(guò)類名來(lái)選擇屬性選擇器 ...
    Yuann閱讀 1,769評(píng)論 0 7
  • 選擇qi:是表達(dá)式 標(biāo)簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    wzhiq896閱讀 2,134評(píng)論 0 2
  • CSS3簡(jiǎn)介 CSS3的現(xiàn)狀 瀏覽器支持程度差,需要添加 私有前綴 ; 移動(dòng)端支持優(yōu)于PC端; 不斷改進(jìn)中; 應(yīng)用...
    magic_pill閱讀 912評(píng)論 0 1
  • 今天上證指數(shù)低開(kāi)后回踩2880點(diǎn)附近的支撐,最低點(diǎn)下探至2878附近,隨后開(kāi)始反彈,尾盤(pán)券商發(fā)力帶動(dòng)指數(shù)上攻,截至...
    冉恩海閱讀 851評(píng)論 0 51
  • 大概胸?zé)o點(diǎn)墨說(shuō)的就是我這種人吧,可是肚子里沒(méi)有半點(diǎn)才氣的我,又偏偏想要寫(xiě)一點(diǎn)什么。 很難想象那種思如泉涌...
    才低八斗閱讀 401評(píng)論 0 0

友情鏈接更多精彩內(nèi)容