CSS 实现的各种球体效果【附在线演示】

http://www.cnblogs.com/lhb25/p/css-balls.html

CSS 可以实现很多你想不到的效果,今天我们来尝试使用 CSS 实现各种球体效果。有两种方法可以实现,第一种是使用大量的元素创建实际的 3D 球体,这种方法有潜在的性能问题;另外一种是使用 CSS3 渐变和阴影特性来实现,实现方法简单,效果精美。

  为保证效果,请使用 Chrome、Firefox、Safari 等现代浏览器浏览。

您可能感兴趣的相关文章

 

基本形状

  我们先来实现一个基本的圆,HTML 代码如下:

1
<figure class = "circle" ></figure>

  这里使用的是 HTML5 新增标签 figure,也可以用其它标签。figure 标签专门用于显示网页中的图片或者其它图表内容。为了实现圆型效果,添加一些基础的样式:

1
2
3
4
5
6
7
8
. circle {
display : block ;
background : black ;
border-radius: 50% ;
height : 300px ;
width : 300px ;
margin : 0 ;
}

径向渐变

  上面实现了基本的圆形效果,这里增加径向渐变效果来实现更逼真的球体。

  CSS 代码如下:

1
2
3
4
5
6
7
8
9
10
11
. circle {
   display : block ;
   background : black ;
   border-radius: 50% ;
   height : 300px ;
   width : 300px ;
   margin : 0 ;
   background : -webkit-radial-gradient( 100px 100px , circle , #5cabff , #000 );
   background : -moz-radial-gradient( 100px 100px , circle , #5cabff , #000 );
   background : radial-gradient( 100px 100px , circle , #5cabff , #000 );
}

  效果如下:

阴影和 3D

  上节已经有基本的球体效果出来了,为了增加立体效果,我们在球的底部加个阴影,这样立体感就更强了。

  这里用到的 HTML 代码如下:

1
2
3
<section class = "stage" >
   <figure class = "ball" ><span class = "shadow" ></span></figure>
</section>

  CSS 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
.stage {
   width : 300px ;
   height : 300px ;
   display : inline- block ;
   margin : 20px ;
   -webkit-perspective: 1200px ;
   -webkit-perspective-origin: 50% 50% ;
}
.ball .shadow {
   position : absolute ;
   width : 100% ;
   height : 100% ;
   background : -webkit-radial-gradient( 50% 50% , circle , rgba( 0 , 0 , 0 , 0.4 ), rgba( 0 , 0 , 0 , 0.1 ) 40% , rgba( 0 , 0 , 0 , 0 ) 50% );
   -webkit-transform: rotateX( 90 deg) translateZ( -150px );
   z-index : -1 ;
}

  这里用到了 CSS3 perspective 特性,效果如下:

多层阴影

  为了实现更逼真的球体效果,这里应用了多层阴影:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
.ball {
   display : inline- block ;
   width : 100% ;
   height : 100% ;
   margin : 0 ;
   border-radius: 50% ;
   position : relative ;
   background : -webkit-radial-gradient( 50% 120% , circle cover, #81e8f6 , #76deef 10% , #055194 80% , #062745 100% );
   );
}
.ball:before {
   content : "" ;
   position : absolute ;
   top : 1% ;
   left : 5% ;
   width : 90% ;
   height : 90% ;
   border-radius: 50% ;
   background : -webkit-radial-gradient( 50% 0px , circle , #ffffff , rgba( 255 , 255 , 255 , 0 ) 58% );
   -webkit-filter: blur( 5px );
   z-index : 2 ;
}

  呈现的效果如下:

光照效果

  上面的效果已经很有立体感了,这里我们再改变一下光照效果,让球体看起来更像斯诺克台球。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
.ball {
   display : inline- block ;
   width : 100% ;
   height : 100% ;
   margin : 0 ;
   border-radius: 50% ;
   position : relative ;
   background : -webkit-radial-gradient( 50% 120% , circle cover, #323232 , #0a0a0a 80% , #000000 100% );
}
.ball:before {
   content : "" ;
   position : absolute ;
   background : -webkit-radial-gradient( 50% 120% , circle cover, rgba( 255 , 255 , 255 , 0.5 ), rgba( 255 , 255 , 255 , 0 ) 70% );
   border-radius: 50% ;
   bottom : 2.5% ;
   left : 5% ;
   opacity: 0.6 ;
   height : 100% ;
   width : 90% ;
   -webkit-filter: blur( 5px );
   z-index : 2 ;
}
.ball:after {
   content : "" ;
   width : 100% ;
   height : 100% ;
   position : absolute ;
   top : 5% ;
   left : 10% ;
   border-radius: 50% ;
   background : -webkit-radial-gradient( 50% 50% , circle cover, rgba( 255 , 255 , 255 , 0.8 ), rgba( 255 , 255 , 255 , 0.8 ) 14% , rgba( 255 , 255 , 255 , 0 ) 24% );
   -webkit-transform: translateX( -80px ) translateY( -90px ) skewX( -20 deg);
   -webkit-filter: blur( 10px );
}

  效果如下:

8 号球效果

  我们再给球体加上数字 8,这样就有了台球黑8 的效果了。

  HTML 代码:

1
2
3
4
5
6
<section class = "stage" >
   <figure class = "ball" >
     <span class = "shadow" ></span>
     <span class = "eight" ></span>
   </figure>
</section>

  CSS 代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
.ball .eight {
   width : 110px ;
   height : 110px ;
   margin : 30% ;
   background : white ;
   border-radius: 50% ;
   -webkit-transform: translateX( 68px ) translateY( -60px ) skewX( 15 deg) skewY( 2 deg);
   position : absolute ;
}
.ball .eight:before {
   content : "8" ;
   display : block ;
   position : absolute ;
   text-align : center ;
   height : 80px ;
   width : 100px ;
   left : 50px ;
   margin-left : -40px ;
   top : 44px ;
   margin-top : -40px ;
   color : black ;
   font-family : Arial ;
   font-size : 90px ;
   line-height : 104px ;
}

  效果如下:

眼球效果

   上面的效果怎么样?相信你已经很惊讶了。不过,CSS 能坐的远不止这些,这里我们再来实现一个眼球效果。

  HTML 代码如下:

1
2
3
4
5
6
<section class = "stage" >
   <figure class = "ball" >
     <span class = "shadow" ></span>
     <span class = "iris" ></span>
   </figure>
</section>

  核心 CSS 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
.iris {
   width : 40% ;
   height : 40% ;
   margin : 30% ;
   border-radius: 50% ;
   background : -webkit-radial-gradient( 50% 50% , circle cover, #208ab4 0% , #6fbfff 30% , #4381b2 100% );
   -webkit-transform: translateX( 68px ) translateY( -60px ) skewX( 15 deg) skewY( 2 deg);
   position : absolute ;
   -webkit-animation: move-eye-skew 5 s ease-out infinite;
}
.iris:before {
   content : "" ;
   display : block ;
   position : absolute ;
   width : 37.5% ;
   height : 37.5% ;
   border-radius: 50% ;
   top : 31.25% ;
   left : 31.25% ;
   background : black ;
}
.iris:after {
   content : "" ;
   display : block ;
   position : absolute ;
   width : 31.25% ;
   height : 31.25% ;
   border-radius: 50% ;
   top : 18.75% ;
   left : 18.75% ;
   background : rgba( 255 , 255 , 255 , 0.2 );
}

  最终效果:

会动的眼球

  上节实现了眼球效果,这里我们一些关键帧来让眼球动起来,核心 CSS 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@-webkit-keyframes move-eye-skew {
   0% {
     -webkit-transform: none ;
   }
   20% {
     -webkit-transform: translateX( -68px ) translateY( 30px ) skewX( 15 deg) skewY( -10 deg) scale( 0.95 );
   }
   25% , 44% {
     -webkit-transform: none ;
   }
   50% , 60% {
     -webkit-transform: translateX( 68px ) translateY( -40px ) skewX( 5 deg) skewY( 2 deg) scaleX( 0.95 );
   }
   66% , 100% {
     -webkit-transform: none ;
   }
}

  这样,眼球就动起来了,很传神吧?!

转载于:https://www.cnblogs.com/shimily/articles/3868728.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值