CSS3实现球体旋转

本教程简述如何用CSS3实现旋转的球体

效果如下图所示,球体沿着中间的轴旋转:

1478667349133032.png

要理解的知识点

1 三维空间的透视属性
css属性:perspective
perspective 属性有两个值,none 和 自己定义的具体像素,例如1000px。
注意:当为元素定义 perspective 属性时,其子元素会获得透视效果,而不是元素本身,所以我们可以把这个属性理解为照相机和被拍摄物体的距离,CSS3 3D 变换中透视的透视点是在浏览器的前方,当我们设置它的值为具体数值的时候,其子元素就会具有近大远小,近实远虚的效果。
目前这个属性对浏览器支持还不算太好,只有Chrome 和 Safari 支持替代的 -webkit-perspective 属性。
2 css属性transform-style
这个属性浏览器支持情况良好,除了ie浏览器,其他浏览器都支持。Firefox 支持 transform-style 属性,而Chrome、Safari 和 Opera 支持替代的 -webkit-transform-style 属性。
transform-style属性是设置其子元素是否保留3d位置的。
它也是有两个值:
1 默认值是flat,表示其子元素不保留3d位置。
2另一个值是preserve-3d,当元素设置了这个值的时候,其子元素就相当于进入了三维空间。

如图所示:


1478668191101972.png


x轴表示横向的轴
y轴表示纵向的轴
z轴其实就是我们的视线,是与我们直视的水平面垂直的


如果一个元素沿着x轴旋转,可以想象成奥运单杆运动员那样运动~
如果一个元素沿着y轴旋转,可以想象成公园旋转木马沿着中间的柱子绕圈圈~
而元素沿着z轴旋转的话更好理解了,可以想象成视线正前方,有一个风扇,风扇的扇叶就是沿着z轴旋转的~

关于3d的一些相关属性,介绍完毕,那么开始案例制作

结构和样式
(代码如下,具体属性都添加了对应注释)

<!doctype html>
<html>
<head>
      <meta charset="UTF-8">
      <title>ball</title>
    <style>
      *{padding: 0; margin: 0; list-style: none; border: 0;}
      body{background:#000;}
      /* 设置透视盒子在浏览器水平和垂直都居中 */
      .ball{
           width: 300px;
          height: 300px;
           position:absolute;
           left: 50%; top: 50%;
           margin-left: -150px;
           margin-top: -150px;
           perspective:3000px;
           -webkit-perspective:3000px;
       }
       /* 设置此元素子元素保留3d位置 */
      .ball_in{
           position:absolute;
           left: 0;
           top: 0;
           width: 100%;
           height: 100%;
            transform-style:preserve-3d;
      }
      /* 实体化这些li,然后设置其为圆形 */
      .ball_in li{
           position:absolute;
           left: 0;
           top: 0;
           width: 100%;
           height: 100%;
           border: 1px solid #fff;
            border-radius:50%;       
      }
      /* 对不同的li沿着y轴旋转不同的角度,其实圆球体就出来了 */
      /* 5个li元素,所以每个旋转的角度是360/2/5=36deg */
      .ball_in li:nth-child(1){transform:rotateY(0);}
      .ball_in li:nth-child(2){transform:rotateY(36deg);}
      .ball_in li:nth-child(3){transform:rotateY(72deg);}
      .ball_in li:nth-child(4){transform:rotateY(108deg);}
      .ball_in li:nth-child(5){transform:rotateY(144deg);}
    </style>
</head>
<body>
  
<div><!--设置透视属性的盒子,其子元素将具有透视效果-->
      <ul><!--设置其子元素保留3d位置的元素-->
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
</div>
      
</body>
</html>

效果如图:

1478668644890026.png

此时我们给球体整体则.ball_in元素沿着x轴向前倾斜和沿着z轴向左倾斜一定角度,则立体感更强。

代码:


    
.ball_in{

           
position:absolute;

           
left: 0;

           
top: 0;

           
width: 100%;

           
height: 100%;

           
transform-style:preserve-3d;

           
/* 球体向前倾斜30deg,向左倾斜30deg */

           
transform:rotateX(-30deg) rotateZ(-30deg);

      
}

效果如图:

1478668744728269.png

利用伪元素给球体添加中心轴,代码如下:


      
/* 利用伪元素给球体添加中心轴 */

      
.ball_in:after{

           
content:"";

           
position:absolute;

           
width: 2px;

           
height:500px;

           
background:blue;

           
left:150px;

           
top:-100px;  

      
}

效果如图:

1478668813915716.png

最后步骤,给每个li添加颜色和整个球体添加旋转的动画:

整个球体添加旋转的动画代码如下:


.ball_in{

           
position:absolute;

           
left: 0;

           
top: 0;

           
width: 100%;

           
height: 100%;

           
transform-style:preserve-3d;

           
-webkit-transform-style:preserve-3d;

           
/* 球体向前倾斜30deg,向左倾斜30deg */

           
transform:rotateX(-30deg) rotateZ(-30deg);

            
/* 球体旋转动画 */

           
animation:circle 10s linear infinite;

      
}

      
/* 定义旋转动画 */

      
@keyframes circle{

           
0%{transform:rotateX(-30deg) rotateZ(-30deg) rotateY(0);}

           
100%{transform:rotateX(-30deg) rotateZ(-30deg) rotateY(360deg);}

      
}

最终效果如图:

(绕着y轴转圈圈)

1478668994129590.png

是否觉得五颜六色的球体没意思?

其实还可以改装一下,搞点小意思,例如球体不需要那么多个面,然后把剩余的面换成好看的图片,改装后效果如图:

1478669165780209.png

有没有一种cd在三维空间旋转的感觉?

又或者我们再改装一下,效果如下图:

1478669201363704.png
1478669222125540.png
1478669242415643.png

好了,最后奉上案例源码,有兴趣的朋友可以自行下载。

来源:http://bbs.520it.com/forum.php?mod=viewthread&tid=2759&extra=page%3D1%26filter%3Ddateline%26orderby%3Dlastpost%26dateline%3D2592000

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

推荐阅读更多精彩内容

  • 看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印象,因...
    DCbryant阅读 1,811评论 0 4
  • 关于css3变形 CSS3变形是一些效果的集合,比如平移、旋转、缩放和倾斜效果,每个效果都被称作为变形函数(Tra...
    hopevow阅读 6,247评论 2 13
  • CSS里transform变形这个属性有点学习难度,尤其在CSS3里加上了3D效果之后,2维变3维学习成本更是成倍...
    张歆琳阅读 27,337评论 5 81
  • >*很不幸,没人能告诉你母体是什么,你只能自己体会* --骇客帝国 在第四章“可视效果”中,我们研究了一些增强图层...
    夜空下最亮的亮点阅读 1,577评论 0 2
  • 李白 危楼高百尺,手可摘星辰只有你的手可伸入云端你的手开满月光的冰凌花不敢高声语,恐惊天上人也只有你能偷听天人的歌...
    竹无心a阅读 851评论 34 41