最近笔者在公司内部开展了一次CSS讲座,由于授课经验不太足,授课效果自我感觉并不太好,不过课中有一个笔者用CSS写的一个小效果,其中还是包含了蛮多CSS的常见知识点的,正好也有部分同学很感兴趣如何实现,于是便有了此文。

  先来看看最终效果:(动画需要依靠hover事件来触发,请把鼠标放上去)如果看不到请点击这里

  

  如果你耐心的看完了,最终效果如下图:

  

  那么,效果看完了,让我们先来整理下上面的效果总共用了哪些css3效果呢?(可能有些火影迷已经按捺不住了XD)

  可能在继续之前有同学会问:这里面用了多少图片呢?答案当然是没有,不信的同学可以查看下dom,那么我们继续

  因为整个效果还比较复杂,我们得一步步分解开来看:

  首先是最简单的眼球:

<div class='eye'></div>
<style>
.eye{
width: 100px;
height: 100px;
border-radius: 100px;
box-sizing: border-box;
border: 2px solid #000;
position: relative;
background: radial-gradient(at center center, #fd2312, #920205);
}
.eye:before, .eye:after{
content: '';
position: absolute;
border-radius: 100%;
box-sizing: border-box;
}
.eye:before{
width: 60%;
height: 60%;
border: 2px solid #000;
left: 50%;
top: 50%;
margin: -30% 0 0 -30%;
}
.eye:after{
border: 10px solid #000;
left: 50%;
top: 50%;
transform: translate3d(-50%, -50%, 0);
z-index: 1;
}
</style>

  眼球的代码很简单,就一个div标签,然后利用伪元素,就能画出瞳孔,再使用径向渐变,就能画出红色的眼球背景色,效果如下图:

  接着我们来看看那个动来动去的勾玉应该怎么画呢?参加过去年CSS conf的同学可能还记得会上有一位同学分享了画“八字胡”的方法,其实笔者也借鉴了该方法,主要利用border来实现的:

<span class='jewel-container'>
<i class="jewel"></i>
</span>
<style>
//勾玉圆头的部分,其实它就是个圆
.jewel{
width: 100px;
height: 100px;
border-radius: 100%;
position: absolute;
left: 0;
top: 0;
-webkit-transform: rotate(-150deg);
transform: rotate(-150deg);
background-color: currentColor;
}
//勾玉的尾巴,请注意border的width和riadus的取值
.jewel:before{
content: '';
position: absolute;
width: 100px;
top: 50px;
left: 0px;
height: 120px;
border-color: currentColor;
border-style: solid;
border-width: 0 0 0 100px;
border-radius: 0 0 0 100%;
}
</style>

  如上图所示,蓝色的部分就是i标签,而半透明的红色部分则是伪元素。当设置他们为同色的时候就形成了之前demo中转动的勾玉,至于转动,稍微设置一下transform-origin属性,再旋转就可以了。

  接着是3个小勾玉合并变大成一个万花筒勾玉的过程,这就只是一个纯粹的css animation了,本身就没什么技巧性了。

  最后是那个视觉上从远到近飞来的“乌鸦”:

<div class='crow eg'>
<i></i>
</div>
<style>
.crow{
position: relative;
width: 0;
height: 0;
opacity: 0;
z-index: 3;
left: -30px;
top: 0;
-webkit-transition: all 6s;
transition: all 6s;
-webkit-transition-delay: 19s;
transition-delay: 19s;
}
.crow > i{
position: absolute;
left: -20px;
top: -20px;
border: 20px solid transparent;
border-bottom-color: #000;
-webkit-transform: rotateX(80deg);
transform: rotateX(80deg);
-webkit-transition: transform 3s ease;
transition: transform 3s ease;
}
.crow:before, .crow:after{
content: '';
position: absolute;
width: 0;
height: 0;
left: -20px;
top: -20px;
border: 20px solid transparent;
border-bottom-color: #000;
}
.crow:before{
border-bottom-color: #000;
-webkit-transition: transform 3s ease;
transition: transform 3s ease;
transform: rotateX(130deg) rotateY(0deg) rotateZ(40deg) translateX(-2px);
-webkit-animation: fly 1s linear infinite;
animation: fly 1s linear infinite;
}
.crow:after{
border-bottom-color: #000;
-webkit-transition: transform 3s ease;
transition: transform 3s ease;
transform: rotateX(130deg) rotateY(0deg) rotateZ(-40deg) translateX(2px);
-webkit-animation: fly2 1s linear infinite;
animation: fly2 1s linear infinite;
}
.crow.eg:hover > i{
-webkit-transform: rotateX(0);
transform: rotateX(0);
}
.crow.eg:before{
-webkit-animation: fly 1s linear 3;
animation: fly 1s linear 3;
}
.crow.eg:hover:before{
-webkit-transform: rotateX(0) rotateY(0) rotateZ(90deg) translateX(-10px) translateY(10px);
transform: rotateX(0) rotateY(0) rotateZ(90deg) translateX(-10px) translateY(10px);
}
.crow.eg:after{
-webkit-animation: fly2 1s linear 3;
animation: fly2 1s linear 3;
}
.crow.eg:hover:after{
-webkit-transform: rotateX(0) rotateY(0) rotateZ(-90deg) translateX(10px) translateY(10px);
transform: rotateX(0) rotateY(0) rotateZ(-90deg) translateX(10px) translateY(10px);
}
</style>

  仍然只用了一个标签来实现“乌鸦”(不过这个乌鸦的完成度确实不怎么高...)的,利用了一下CSS3 中的rotate3d来进行了一些简单的3d旋转。

  最后,加上一些动画把之前的东西串起来,就做好了一只“开瞳”的写轮眼了。

  

  P.S.其实就CSS目前的发展状况而言,它对新手是有一定的门槛的,特别是CSS3增加了太多的灵活性和可操作性,给了我们特别多的能力,但是不到时候,可能我们的不知道“前端”已经具备这样一种能力,虽然未来可能会逐渐成型的web animation API会解决这一问题,但是在目前阶段,想要在css上有所提升,还是需要大家在日常生活中,多想多练,时不时把自己的一些构想尝试着实现以下,说不定,能有一些意外的收获。

  

  

【CSS】少年,你想拥有写轮眼么?的更多相关文章

  1. 想拥有一款钢铁侠Jarvis管家的软件吗?

    漫威的<钢铁侠>电影很好看,里面钢铁侠的管家Jarvis,可以说非常酷.既能管理日常生活,还能组装钢铁战衣.跟随托尼出生入死,形影不离. 那么现实生活中,想不想拥有这一款软件?看看下面这个 ...

  2. 少年,想学带修改主席树吗 | BZOJ1901 带修改区间第k小

    少年,想学带修改主席树吗 | BZOJ1901 带修改区间第k小 有一道题(BZOJ 1901)是这样的:n个数,m个询问,询问有两种:修改某个数/询问区间第k小. 不带修改的区间第k小用主席树很好写 ...

  3. 想拥有自己的Python程序包,你只需15步

    来源商业新知网,原标题:15步,你就能拥有自己的Python程序包 全文共 3192 字,预计学习时长 6 分钟 每个软件开发员和数据科学家都难免要做程序包.本文推荐一篇 Python开源程序包的制作 ...

  4. 【面试必备】CSS盒模型的点点滴滴

    从接触CSS布局开始,就一直在听盒模型的概念了,网上的文章有很多,深浅不一.有些人会认为盒模型很简单,不就是border.margin.padding.content嘛,一个元素所占的空间就是把它们都 ...

  5. 关于CSS中的PX值(像素)

    场景: 人物:前端实习生「阿树」与 切图工程师「玉凤」事件:设计师出设计稿,前端实现页面 玉凤:树,设计稿发给你啦,差那么点像素,就叼死你┏(  ̄へ ̄)=☞阿树:~(>_<)~毛问题噶啦~ ...

  6. [转]CSS 模块

    CSS 模块 如果你想知道 CSS 最近发展的转折点,你应该选择去观看 Christopher Chedeau 在2014年11月的 NationJS 大会上做的名称为 CSS in JS 的分享.不 ...

  7. IOS-网络(网页开发-UIWebView,HTML,CSS,JavaScript,OC和JS代码互调)

    一.网页基础 // // ViewController.m // IOS_0218_网页开发1 // // Created by ma c on 16/2/18. // Copyright © 201 ...

  8. Quantum CSS,一个超快的CSS引擎

    开始 本文翻译自Inside a super fast CSS engine: Quantum CSS,如果想要阅读原文,可以点击前往,以下内容夹杂本人一些思考,翻译也并不一定完全. 碎碎念 为什么翻 ...

  9. css预处理器sass使用教程(多图预警)

    css预处理器赋予了css动态语言的特性,如变量.函数.运算.继承.嵌套等,有助于更好地组织管理样式文件,以及更高效地开发项目.css预处理器可以更方便的维护和管理css代码,让整个网页变得更加灵活可 ...

随机推荐

  1. HDU 1215.七夕节【筛选法】【7月26】

    七夕节 七夕节那天,月老来到数字王国,他在城门上贴了一张告示,而且和数字王国的人们说:"你们想知道你们的还有一半是谁吗?那就依照告示上的方法去找吧!" 人们纷纷来到告示前,都想知道 ...

  2. hash_map与unordered_map区别

    http://blog.csdn.net/blues1021/article/details/45054159

  3. 分析PMT changed for the ROM:it must be downloaded.升级失败。

    应用场景描写叙述: 同样项目不同版本号(不同分支),使用Smart Phone Flash Tool工具交叉升级,出现PMT changed for the ROM;it must be downlo ...

  4. Robocopy进行大量迁移

    建议使用 Windows Server 2012 R2 或 Windows Server 2012 随附的 Robocopy.exe 版本. 即然官方建议我们用2012或2012R2所带的Roboco ...

  5. [Angular] Refactor Angular Component State Logic into Directives

    Allow the base toggle to be a tag (<toggle>) or attribute (<div toggle>). The <toggle ...

  6. cf246 ENew Reform (并查集找环)

    Berland has n cities connected by m bidirectional roads. No road connects a city to itself, and each ...

  7. rand和srand的用法(转载)

    首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明. rand(产生随机数)表头文件: #include<stdlib.h> ...

  8. LoadRunner 中调用c函数生成随机字符串

    Action() { int itera_num,rand_num,i; ]=""; char StrTable[]="abcdefghijklmnopqrstuvwxy ...

  9. linux-shell脚本命令之awk

    [ awk简单介绍: ] awk能够从一个文本中获取部分内容, 或者对这个文本进行排版, 使它按某种格式输出. [ awk工作流程: ] awk会把文件一行内容去到内存里, 然后对这行内容进行分段 ( ...

  10. UVa 10773 - Back to Intermediate Math

    题目:渡河问题.给你河水宽度,水流速度,求垂直渡河与最快渡河的时间差. 分析:物理题,数学题. 最快渡河情况,传垂直运动,垂直渡河,船的水平分速度和水流速度抵消. 说明:注意水流速度不能为0. #in ...