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

一.3D风景动态骰子

.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>?

参数说明:

<direction>:表示倒影的方向,可能值:above、below、left、right(上下左右);
<offset>:表示倒影与元素之间的间隔;
<mask-box-image>:表示遮罩图像,可为url地址、渐变

(2) 具体代码

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

![](images/example.jpg)

(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);
}
3D按钮

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

推荐阅读更多精彩内容

  • 1、属性选择器:id选择器 # 通过id 来选择类名选择器 . 通过类名来选择属性选择器 ...
    Yuann阅读 1,523评论 0 7
  • 转载请声明 原文链接 关注公众号获取更多资讯 这篇文章主要总结H5的一些新增的功能以及一些基础归纳,这里只是一个提...
    程序员poetry阅读 9,015评论 22 225
  • CSS3简介 CSS3的现状 浏览器支持程度差,需要添加 私有前缀 ; 移动端支持优于PC端; 不断改进中; 应用...
    magic_pill阅读 732评论 0 1
  • 悄悄走进夜空 摘下璀璨的星斗 混合一抔时间 造出传说中的航船 喝下一口宾克斯的酒 驶向世界的尽头 海贼旗在风中飘扬...
    四十二客星阅读 168评论 0 0