CSS 实现的各种球体效果【附在线演示】
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 ;
}
} |
这样,眼球就动起来了,很传神吧?!