代码地址如下:
http://www.demodashi.com/demo/11656.html

一.3D风景动态骰子

在线演示

1、css3D、动画基础知识预备

2、创建一个3D场景

先放置一个.box的div父容器,在box里放置一个.dice的div,然后在其里面放置6个div,分别表示骰子的6个面。

<div class="box">
<div class="dice">
<div class="surface front ">anyway style(text or img)</div>
<div class="surface left">anyway style(text or img)</div>
<div class="surface right">anyway style(text or img)</div>
<div class="surface bottom">anyway style(text or img)</div>
<div class="surface top">anyway style(text or img)</div>
<div class="surface back">anyway style(text or img)</div>
</div>
</div>

2、设置CSS样式

.dice {
width:200px;
height:200px;
position:relative;
margin:100px auto;
transform-style:preserve-3d;
-webkit-transform-style:preserve-3d;
}

transform-style 属性规定如何在 3D 空间中呈现被嵌套的元素,默认是其子元素不呈现3D效果,所以我们需要添加preserve-3d值,让其子元素保留其 3D 效果。

接下来,我们制作立方体的每一个面:

.face {
position: absolute;
top: 0;
left: 0;
width: 300px;
height: 300px;
background: #666;
opacity: 0.8;
font-size: 60px;
text-align: center;
line-height: 200px;
font-weight: bold;
color: #fff;
border: 1px solid #fff;
-webkit-transition: all .3s;
transition: all .3s;
} .face img {
width: 100%;
height: 100%;
} .front {
transform: rotateY(0) translateZ(100px);
} .back {
transform: translateZ(-100px) rotateY(180deg);
} .left {
transform: rotateY(-90deg) translateZ(100px);
} .right {
transform: rotateY(90deg) translateZ(100px);
} .top {
transform: rotateX(90deg) translateZ(100px);
} .bottom {
transform: rotateX(90deg) translateZ(-100px);
}

在上面的代码中,我们使用transform的rotate()和translateZ()来转换每一面,平移都是宽度的一半。

要注意rotate()和translateZ()的顺序,顺序不同,转换的结果也会不一样,比如左侧.left这一面,在这里,我们是先绕着Y轴顺时针旋转90,然后再在Z轴的正方向平移150,如果你先平移后旋转,结果就不一样了,你可以试试。

最后,我们还给div.cude加上动画:

@-webkit-keyframes rotate {
from {
transform: rotateX(0deg) rotateY(0deg);
}
to {
transform: rotateX(360deg) rotateY(360deg);
}
}

二.图片倒影效果

1、box-reflect(方法一)

(1)使用box-reflect属性最容易实现图片倒影效果。

box-reflect属性介绍:

box-reflect:<direction> <offset>? <mask-box-image>?

参数说明:

:表示倒影的方向,可能值:above、below、left、right(上下左右);

:表示倒影与元素之间的间隔;

:表示遮罩图像,可为url地址、渐变

(2) 具体代码

只需简单的放置一张图片:

<img src="images/example.jpg" alt="" />

(3)设置样式

直接使用box-reflect方法:

img {
-webkit-box-reflect: below 0 -webkit-linear-gradient(top, rgba(250, 250, 250, 0), rgba(250, 250, 250, .0) 20%, rgba(250, 250, 250, .3));
}

在这个方法中,使用渐变来充当遮罩图像,效果如下图所示:

给box-reflec设置url属性可以用另一张图片来自定义倒影效果:

img {
-webkit-box-reflect: below 0 url(images/star.png);
}

注意:由于box-reflect方法目前只有webkit引擎的浏览器才支持,所以考虑兼容性可以使用下面介绍的第二种方法

2、伪元素方法(方法二)

(1) 伪元素方法本质上是复制图片,结合 transform的用法然后翻转,最后一样是使用渐变来充当遮罩层,覆盖在翻转的图片之上。

(2) 具体代码

与第一种方式略有不同,这里用一个div包裹住图片:

<div class="box-reflect">
![](images/example.jpg)
</div>

(3)设置样式

先将图片克隆一份,然后翻转过来:

.box-reflect {
position: relative;
width: 150px;
float: left;
margin-right: 40px;
}
.box-reflect img {
width: 100%;
height: 100%;
}
.box-reflect:before {
background: url(images/example.jpg) no-repeat;
background-size: 100% 100%;
transform: scaleY(-1);
/*设置半透明增强倒影效果*/
opacity: 0.5;
/*IE下设置透明*/。
filter: alpha(opacity='50');
}
.box-reflect:before, .box-reflect:after {
position: absolute;
width: 100%;
height: 100%;
top: 100%;
left: 0;
content: "";
}

注意:这里的transform:scaleY(-1)的作用与transform:rotateX(-180deg)等同,可联想一下transform:scaleX(-1)的效果

然后,添加一层渐变,让其覆盖在倒影的上面,渐变的值可根据实际效果调整:

.box-reflect:after {
background-image: -moz-linear-gradient(bottom, rgb(0,0,0) 20%, rgba(0,0,0,0) 90%);
background-image: -o-linear-gradient(rgba(0,0,0,0) 10%, rgb(0,0,0) 30%);
background-image: -webkit-linear-gradient(bottom,rgb(0,0,0) 20%,rgba(0,0,0,0) 90%);
filter: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColor=0, EndColorStr=#000000);
}

三.心跳效果

1.首先用css画出一个静态的红心

#heart {
position: relative;
width: 100px;
height: 90px;
}
#heart:before,
#heart:after {
position: absolute;
content: "";
left: 50px;
top: 0;
width: 50px;
height: 80px;
background: red;
-moz-border-radius: 50px 50px 0 0;
border-radius: 50px 50px 0 0;
-webkit-transform: rotate(-45deg);
-moz-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
-o-transform: rotate(-45deg);
transform: rotate(-45deg);
-webkit-transform-origin: 0 100%;
-moz-transform-origin: 0 100%;
-ms-transform-origin: 0 100%;
-o-transform-origin: 0 100%;
transform-origin: 0 100%;
}
#heart:after {
left: 0;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
-o-transform: rotate(45deg);
transform: rotate(45deg);
-webkit-transform-origin: 100% 100%;
-moz-transform-origin: 100% 100%;
-ms-transform-origin: 100% 100%;
-o-transform-origin: 100% 100%;
transform-origin :100% 100%;
}

最后给这个红心增加动画即可

.heartbeat {
-webkit-animation-name: heartbeat;
-webkit-animation-duration: 0.83s;
-webkit-animation-timing-function: ease-in-out;
-webkit-animation-iteration-count: infinite;
}
@keyframes heartbeat {
from {
opacity:0.1;
}
50% {
opacity:1;
}
to {
opacity:0.1;
}
}

四.3D按钮

1.创建div

放置一个要设置成3D按钮的元素,这里使用a标签:

<a href="#" class="3dButton">3dButton</a>

  1. 设置CSS样式

3D效果主要是依靠阴影(box-shadow)和新的颜色属性HSL来实现。

(1)box-shadow: h-shadow v-shadow blur spread color inset

h-shadow:必需。水平阴影的位置。允许负值。

v-shadow:必需。垂直阴影的位置。允许负值。

blur:可选。模糊距离。

spread:可选。阴影的尺寸。

color:可选。阴影的颜色。请参阅 CSS 颜色值。

inset:可选。将外部阴影 (outset) 改为内部阴影。

(2)HSL(H,S,L)。HSL色彩模式是工业界的一种颜色标准,HSL即是代表色调,饱和度,亮度三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。

H:Hue(色调)。0(或360)表示红色,120表示绿色,240表示蓝色,也可取其他数值来指定颜色。取值为:0 - 360

S:Saturation(饱和度)。取值为:0.0% - 100.0%

L:Lightness(亮度)。取值为:0.0% - 100.0%

了解完基础知识后,下面就来看看3D按钮效果怎么实现。

box-shadow:
inset rgba(255, 254, 255, 0.6) 0 0.3em .3em,
inset rgba(0, 0, 0, 0.15) 0 -0.1em .3em,
hsl(0, 0%, 60%) 0 .1em 3px, hsl(0, 0%, 45%) 0 .3em 1px,
rgba(0, 0, 0, 0.2) 0 .5em 5px;

如上代码所示,这里使用了5层阴影,1和2层是内阴影,这是为了实现上下两边光滑效果,你也可以去除这两个;第5层只是普通的阴影;第3层是为了更真实,可有可无;关键是第4层,实现类似于border的实投影。

为了更完美来按钮实现点击效果,这里主要是想让实阴影消失:

.button:active {
box-shadow: inset rgba(255, 255, 255, 0.6) 0 0.3em .3em, inset rgba(0, 0, 0, 0.2) 0 -0.1em .3em,
rgba(0, 0, 0, 0.4) 0 .1em 1px,
rgba(0, 0, 0, 0.2) 0 .2em 6px;
transform: translateY(.2em);
}

最后来个示例中按钮的风形形状效果,只有了解下border-radius的高级用法就可以了:

border-radius: 1em 5em/5em 1em;

/的前后分别指的是水平半径和垂直半径。

五.渐变炫彩边框

1、html代码

<div class="gradient-border gradient-border-more">
<span></span>
![](images/eg.jpg)
</div>

注意这里的span标签是这个效果的重点和技巧所在。

2、设置CSS样式

我们通过gradient-border和span的:before和:after伪元素来实现渐变边框。

.gradient-border {
position:relative;
width:200px;
height:200px;
background:gray;
}
.gradient-border:before,
.gradient-border:after,
.gradient-border span:first-child:before,
.gradient-border span:first-child:after {
content:"";
position:absolute;
background:red;
-webkit-transition:all .2s ease;
transition:all .2s ease;
}
/*上边边框*/
.gradient-border:before {
width:0; // 初始宽度
top:-2px;
right:0;
height:2px;
}
/*右边边框*/
.gradient-border:after {
width:2px;
height:0; // 初始高度
right:-2px;
bottom:0;
}
/*下边边框*/
.gradient-border span:first-child:before {
width:0; // 初始宽度
height:2px;
bottom:-2px;
left:0;
}
/*左边边框*/
.gradient-border span:first-child:after {
width:2px;
height:0; // 初始高度
top:0;
left:-2px;
}

这这个地方使用了.gradient-border里的:before和:after,以及span里的:before和:after制作了边框。

3、增加鼠标hover动画

鼠标移动上去的动画,原理是通过就是改变边框的宽高。

.gradient-border:hover:before,
.gradient-border:hover span:first-child:before {
width:calc(100% + 2px);
}
.gradient-border:hover:after,
.gradient-border:hover span:first-child:after {
height:calc(100% + 2px);
}
/*添加过渡延迟时间*/
.gradient-border-more:hover:before,
.gradient-border-more:hover span:first-child:before {
-webkit-transition-delay:.2s;
transition-delay:.2s;
}
项目文件截图:

css3组件实战--绚丽效果篇

代码地址如下:
http://www.demodashi.com/demo/11656.html

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

css3组件实战--绚丽效果篇的更多相关文章

  1. 10 款提高开发效率的 jQuery/CSS3 组件

    前端开发是一项十分繁琐而又耗体力的工作,如何更有效率的开发我们的应用,很多人会选择适当地使用一些jQuery插件.今天就要给大家分享10款可以提高开发效率的jQuery/CSS3组件.部分插件可以下载 ...

  2. 使用CSS3动画实现绚丽的照片墙效果

    临近毕业了,一大波毕业照又要来袭了!如何使用CSS3属性制作出自己的网页版照片墙呢? 闲话少说,先来看看效果图 效果要求: 1,照片要求有一定的白色边框. 2,照片都要有一定的倾斜角度. 3,鼠标移动 ...

  3. Python调用C# Com dll组件实战

    之前公司有套C# AES加解密方案,但是方案加密用的是Rijndael类,而非AES的四种模式(ECB.CBC.CFB.OFB,这四种用的是RijndaelManaged类),Python下Crypt ...

  4. CSS3组件化之圆波扩散

    本篇文章主要介绍用CSS3实现的水波扩散涟漪,圆波扩散,光圈扩散,雷达波向外散发动画. 预期效果应该是这样:,其实应该比这个更优美,因为设计师提供的gif出现透明度丢失问题,所以建议用css3实现. ...

  5. Vue 组件实战

    目录 Vue 组件 axios实现数据请求 计算属性 案例一:首字母大写 案例二:过滤案例 监听属性 局部组件 全局组件 组件通信之父传子 组件通信之子传父 ref属性(组件间通信) 普通标签使用 组 ...

  6. 分布式二级缓存组件实战(Redis+Caffeine实现)

    前言 在生产中已有实践,本组件仅做个人学习交流分享使用.github:https://github.com/axinSoochow/redis-caffeine-cache-starter 个人水平有 ...

  7. css3组件之几何图形

    一.平行四边形 1.实心无边框 #parallelogram { width: 150px; height: 100px; -webkit-transform: skew(20deg); -moz-t ...

  8. CSS3组件化之ios版菊花loading

    <div class="juhua-loading"> <div class="jh-circle1 jh-circle-ios">&l ...

  9. CSS3组件化之菊花loading

    <div class="juhua-loading"> <div class="jh-circle"></div> < ...

随机推荐

  1. [loj #6003]「网络流 24 题」魔术球 二分图最小路径覆盖,网络流

    #6003. 「网络流 24 题」魔术球 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数据 ...

  2. CodeForces - 981E Addition on Segments

    考虑每个点i在什么情况下会成为最大值. 当选的区间子集是 包含i的区间的一个子集的时候,i肯定会是最大值. 所以我们就可以用这种方法得到所有点的可能的最大值是多少... 也就是说,最后的局面可以仅由一 ...

  3. [CF678F]Lena and Queries

    题意: 初始有一个空集合$n$个操作有三种操作,如下:$1\ a\ b$表示向集合中插入二元组$(a,b)$$2\ i$表示删除第$i$次操作时所插入的二元组$3\ q$表示询问当前集合的二元组中,$ ...

  4. STL之vector3

    描述 将n个数字输入到vector里,并对其进行从大到小排序并输出. 部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码. int main() { vector<int> vec ...

  5. git强行推送到远端

    回到某一个节点git reset --hard 5db4eddeca2然后把现在这个节点,强行推送到远端git push -f origin master

  6. 记录一次Elasticsearch线上部署后出现:org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: []的问题解决

    说明:ES部署了3个节点,而一般情况只要这三个节点的IP其中一个都可以连接,Web端口使用的是9500,Client连接使用的是9600,调用程序使用了ES原生Client进行连接. 解决方法: 1. ...

  7. 【MyEcplise】导入项目后,会定时弹出一下错误MyEcplise tern was unable to complete your request in time.This couble happen if your project contains several large javaScript libraies.

    Myecplise弹出错误如下: 错误代码: MyEcplise tern was unable to complete your request in time.This couble happen ...

  8. WebLogic Server 12.2.1 多租户安装配置

    1.安装WebLogic 12.2.1版本 下载安装的时候记住选择Fusion Middleware Infrastructer Installer. 2.安装OTD OTD需要单独下载安装,安装的时 ...

  9. fl2440 platform总线led字符设备驱动

    首先需要知道的是,设备跟驱动是分开的.设备通过struct device来定义,也可以自己将结构体封装到自己定义的device结构体中: 例如:struct platform_device: 在inc ...

  10. python字符串转日期

    需要两步 为了从字符串中提取时间,并进行比较,因此有了这个问题,如何将字符串转换成datetime类型 1.字符串与time类型的转换 >>> import time>> ...