【CSS】少年,你想拥有写轮眼么?
最近笔者在公司内部开展了一次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】少年,你想拥有写轮眼么?的更多相关文章
- 想拥有一款钢铁侠Jarvis管家的软件吗?
漫威的<钢铁侠>电影很好看,里面钢铁侠的管家Jarvis,可以说非常酷.既能管理日常生活,还能组装钢铁战衣.跟随托尼出生入死,形影不离. 那么现实生活中,想不想拥有这一款软件?看看下面这个 ...
- 少年,想学带修改主席树吗 | BZOJ1901 带修改区间第k小
少年,想学带修改主席树吗 | BZOJ1901 带修改区间第k小 有一道题(BZOJ 1901)是这样的:n个数,m个询问,询问有两种:修改某个数/询问区间第k小. 不带修改的区间第k小用主席树很好写 ...
- 想拥有自己的Python程序包,你只需15步
来源商业新知网,原标题:15步,你就能拥有自己的Python程序包 全文共 3192 字,预计学习时长 6 分钟 每个软件开发员和数据科学家都难免要做程序包.本文推荐一篇 Python开源程序包的制作 ...
- 【面试必备】CSS盒模型的点点滴滴
从接触CSS布局开始,就一直在听盒模型的概念了,网上的文章有很多,深浅不一.有些人会认为盒模型很简单,不就是border.margin.padding.content嘛,一个元素所占的空间就是把它们都 ...
- 关于CSS中的PX值(像素)
场景: 人物:前端实习生「阿树」与 切图工程师「玉凤」事件:设计师出设计稿,前端实现页面 玉凤:树,设计稿发给你啦,差那么点像素,就叼死你┏(  ̄へ ̄)=☞阿树:~(>_<)~毛问题噶啦~ ...
- [转]CSS 模块
CSS 模块 如果你想知道 CSS 最近发展的转折点,你应该选择去观看 Christopher Chedeau 在2014年11月的 NationJS 大会上做的名称为 CSS in JS 的分享.不 ...
- IOS-网络(网页开发-UIWebView,HTML,CSS,JavaScript,OC和JS代码互调)
一.网页基础 // // ViewController.m // IOS_0218_网页开发1 // // Created by ma c on 16/2/18. // Copyright © 201 ...
- Quantum CSS,一个超快的CSS引擎
开始 本文翻译自Inside a super fast CSS engine: Quantum CSS,如果想要阅读原文,可以点击前往,以下内容夹杂本人一些思考,翻译也并不一定完全. 碎碎念 为什么翻 ...
- css预处理器sass使用教程(多图预警)
css预处理器赋予了css动态语言的特性,如变量.函数.运算.继承.嵌套等,有助于更好地组织管理样式文件,以及更高效地开发项目.css预处理器可以更方便的维护和管理css代码,让整个网页变得更加灵活可 ...
随机推荐
- weblogic线程阻塞性能调优(图解)
转自:http://blog.csdn.net/z69183787/article/details/12647539 声明:出现这个问题有程序方面.网络方面.weblogic设置方面等等原因,此文章主 ...
- SAS学习笔记 - R的数据操作
1.对象 1.1 对象及其内在属性 R中的处理数据就是对象,每个对象可以包含多个元素.对象有两个内在属性:类型和长度.类型是对象元素的基本种类,共四种:数值型,字符型,复数型和逻辑型.对象的类型和长度 ...
- grails的criteria和hql查询
grails在查询方面也保留了hibernate的hql和criteria查询功能.hql自然不必多说基本不会有什么变化,grails的criteria查询在hibernate上面做了微调使用起来更加 ...
- 一个Exchange 2010 的password不定期弹框的问题处理,希望对大家可以有所帮助。
前期有个客户採用exchange 2010的邮件系统作为他们的邮件平台.有个奇怪的现象就是Exchange 2010 系统会出现不定期"宕机"现象,为何打上引號,就是这个时候仅仅有 ...
- SGU - 186 - The Chain (贪心)
186. The Chain time limit per test: 0.25 sec. memory limit per test: 4096 KB input: standard input o ...
- Ubuntu14.04 64bit下Caffe + CUDA 6.5安装详细步骤
不多说,直接上干货! 笔者花了很长时间才装完,主要是cuda安装和opencv安装比较费劲,cuda找不到32位的安装包只好重装64位的ubuntu系统,opencv 也是尝试了很久才解决,这里建议用 ...
- 10601 - Cubes(Ploya)
UVA 10601 - Cubes 题目链接 题意:给定正方体12条棱的颜色,要求用这些棱能组成多少不同的正方体 思路:利用ploya定理去求解,分类讨论,正方体一共24种旋转.相应的旋转方式有4种: ...
- 【IOS】启动画面
总述: 两种方式,一种是使用系统自带的.按规则定义启动图片名称就可以,显示为1秒,要想延长时间,用[nsthread sleepForTimeInterval:5.0] ,还有一种就是自己定义ui ...
- [办公自动化]企业网IE多版本引发的网页无法访问
今天同事的某个网页无法打开,但是在我的计算机上该网站确实又能打开. 去看了一下,他的其他网站都正常.确认网络本身没有问题. 最后,看了一下IE版本,IE11. 只好尝试一下兼容性视图的设置. 设置了一 ...
- iOS开发——高级篇——iOS抽屉效果实现原理
实现一个简单的抽屉效果: 核心思想:KVO实现监听mainV的frame值的变化 核心代码: #import "ViewController.h" // @"frame& ...