代码地址如下:
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. 新电脑配置 git 同步github账户

    1.下载安装git 2.初始化 仓库文件夹 git init 3.生成公钥ssh-keygen -t rsa -C "youremail@example.com"4.github ...

  2. web.input()和web.data() 遇到特殊字符

    使用web.py的时候,web.input()和web.data() 都可以接收用户从浏览器端输入的参数. web.input()方法返回一个包含从url(GET方法)或http header(POS ...

  3. 小程序使用npm模块(引入第三方UI),报错的多种解决办法。

    前言引入第三方模块时,我遇到了很多坑. 首先是微信.第三方模块的文档描述不清楚.其次.搜索到的博客,大部分是抄的文档 / 相互转载抄袭.作用有限. 于是,我自己做了各种条件下的测试.解决各种情况的引入 ...

  4. 【并查集】bzoj2054 疯狂的馒头

    因为只有最后被染上的颜色会造成影响,所以倒着处理,用并查集维护已经染色的区间的右端点,即fa[i]为i所在的已染色区间的右端点,这样可以保证O(n)的复杂度. #include<cstdio&g ...

  5. 【斜率优化】BZOJ1010 [HNOI2008]玩具装箱toy

    [题目大意] P教授有编号为1...N的N件玩具,第i件玩具长度为Ci.为了方便整理,P教授要求在一个一维容器中的玩具编号是连续的.如果将第i件玩具到第j个玩具放到一 个容器中,那么容器的长度将为 x ...

  6. elasticsearch将数据导出json文件【使用elasticdump】

    1.前提准备 需要使用npm安装,还未安装的朋友可以阅读另一篇我的博客<安装使用npm>,windows环境. 2.安装es-dump 打开终端窗口PowerShell或者cmd. 输入命 ...

  7. 1.8(java学习笔记)继承与方法的重写

    继承 在java中可以通过继承提高代码的复用率. 例如A继承了B,就可以是 例如,首先有一个类似Person,这个类中有有一些属性和方法,我们再新建一个Student类,其中有一部分属性和方法与Per ...

  8. 找出能被5或6整除,但是不能被两者同时整除的数 Exercise05_11

    /** * @author 冰樱梦 * 时间:2018年下半年 * 题目:找出能被5或6整除,但是不能被两者同时整除的数 * */ public class Exercise05_11 { publi ...

  9. Java高级架构师(一)第07节:远程使用以及冲突解决

  10. JNI概述

    JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++). JNI 让你在利用强大 Java 平台的同时,使你仍然可以用 ...