怎样用一个DIV绘制熊猫头像

今天要给大家展示的是如何绘制一个熊猫头像,就是这个

如果这是用Photoshop绘制出来的,你也许并不感到奇怪。但是,我要告诉你这是HTML中的一个DIV,配合CSS3绘制出来的。

惊不惊喜!?意不意外!?

一个DIV上怎么做出这样复杂的效果?本篇就来一步步教教你这是如何实现的。

第一步,先从熊猫脸说起


我们先从熊猫的脸、鼻子和嘴讲起,因为这些都是用同一个DIV渲染出来的,所以首先,我们得有个DIV:

<div></div>

很简单吧。然后利用CSS3的border属性,勾勒出熊猫的脸:

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

你也许会想:这TM在逗我?!这明明就是个矩形,哪有熊猫脸是个框?别急,请放下手中的菜刀继续看,记得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;
}

这样,熊猫标准的包子脸就完成了:

“面子”的问题解决了,鼻子和嘴怎么画?什么,再写两个DIV?只能用一个DIV哦!

这就要运用到CSS3的径向渐变(radial-gradient)了,径向渐变是啥?只说学名你可能不知道,但一看图肯定就懂了:

这就是径向渐变,以一个中心,辐射出一个颜色渐变的椭圆。CSS3中的radial-gradient属性就是干这个事情的,radial-gradient用起来很简单,来看看它的完整语法:

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叫简单?!不懂的还以为是乱码。。。请你把菜刀再放一放再听我说,虽然radial-gradient的完整语法很复杂,但我们只用到其中三个参数,简单说我们只需要告诉radial-gradient:

渐变的中心在哪,辐射的形状是圆还是椭圆(参数1)

从什么颜色(参数2)渐变到什么颜色(参数3)

怎么样,这样清楚了吧。那么我们用radial-gradient画上鼻子和嘴:

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

你可能不了解颜色值后面的px值是什么意思,别急,一会儿就会讲到,先来看看目前的效果:


你可能会问:radial-gradient实现的圆是渐变的,图中是怎么画出一个实心圆的?这儿就有个小技巧了:radial-gradient中,我们不仅可以定义渐变两边的颜色,还可以定义颜色渐变的距离:


对比上下两种渐变,可以明显地看到,当两种颜色的渐变距离比较远时,渐变过程比较缓和;而当渐变距离很近时,渐变的过程就很剧烈。那么,当两个颜色的渐变距离为0,会怎么样?


你会发现渐变效果完全消失了。看到这儿应该就能明白radial-gradient中,颜色值后面的px含义了:定义了该渐变两个颜色的两个端点。熊猫的鼻子和嘴就是由黑色和白色的径向渐变构成的,只不过因为渐变距离为0,所以就完全去除了渐变效果。

第二步 耳朵和黑眼圈

现在来画熊猫的耳朵黑眼圈。我们唯一的DIV已经作为熊猫脸了,用什么来充当黑眼圈呢?你是否想起了CSS3中的 :before、:after伪元素,伪元素默认不可见,但可以用CSS让它们展示出来。伪元素的操作方式和普通DIV一样,所以有了:before、:after伪元素,我们就凭空多出两个“DIV”。

没错, 我们只要将:before、:after两个伪元素展示出来,加上黑色背景以及圆角,就成熊猫的黑眼圈了:

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);
}

写完代码后效果如下:

既然伪元素被黑眼圈占用了,就要发愁熊猫的耳朵如何实现了。幸好,山穷水复疑无路,柳暗花明又一村,你是否又想起了CSS3的box-shadow属性?

仔细看黑眼圈和耳朵,会发现它们的外形是一致的。恰好可以利用上box-shadow的性质:元素阴影的外形根据元素本身的形状而定。没错儿,两只耳朵就用它实现了!

div::before {
    /* 接着刚才的代码 */
    box-shadow: 10px -68px 0 -4px #333;
}
div::after {
    /* 接着刚才的代码 */
    box-shadow:-10px -68px 0 -4px #333;
}

让我们停下脚步,看看当前的效果:

不错,已经初步成型了。如果能看到这里,说明你已经学会了本篇中绝大部分CSS3的知识。现在就差最后的点睛之笔了!

第三步 眼睛 & 点缀

相比之前使用的技巧,眼睛的画法就没有什么神奇,依然是运用了radial-gradient属性,前面已经介绍过radial-gradient可以画出实心圆,这里再告诉你它的另外一个特性:radial-gradient可以互相叠加。于是,就可以实现熊猫眼睛中的眼白、瞳孔互相叠加的效果了:

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)
}

添加完代码之后的效果:

最后,再对图形做两个细节上调整:

  1. 加厚脸型底部的厚度,增加些“熊样”
  2. 在底部增加一些阴影,是图形具备些立体感
div {
    /* 接着之前的代码 */
    border-bottom-width: 10px;
    box-shadow: inset 10px -10px 0 #eee;
}

大功告成!


终于,我们用单个DIV配合CSS3完成了一幅可爱的熊猫头像,是不是很有成就感的呢?别急别急,这还仅仅只是一个熊猫而已,如果你对单DIV绘制图形感兴趣,可以访问这个链接:

http://a.singlediv.com/

没错,这些图形都是仅用一个DIV做成的,其中大量地运用了border-radius、radial-gradient、box-shadow、:before和:after伪元素这些属性。本文讲解的熊猫头像,也来自于这个网站。

通过本篇的讲解,我们了解到了CSS3的属性的强大,巧妙运用这些属性,可以达成许多令人意想不到的效果!:-)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • 1、属性选择器:id选择器 # 通过id 来选择类名选择器 . 通过类名来选择属性选择器 ...
    Yuann阅读 1,521评论 0 7
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    wzhiq896阅读 1,689评论 0 2
  • CSS3简介 CSS3的现状 浏览器支持程度差,需要添加 私有前缀 ; 移动端支持优于PC端; 不断改进中; 应用...
    magic_pill阅读 732评论 0 1
  • 今天上证指数低开后回踩2880点附近的支撑,最低点下探至2878附近,随后开始反弹,尾盘券商发力带动指数上攻,截至...
    冉恩海阅读 684评论 0 51
  • 大概胸无点墨说的就是我这种人吧,可是肚子里没有半点才气的我,又偏偏想要写一点什么。 很难想象那种思如泉涌...
    才低八斗阅读 356评论 0 0