zoukankan      html  css  js  c++  java
  • CSS 新增 2D|3D属性|动画

     本文内容概览:

    • transition:过渡
    • transform 
      • 2D变形
        • translate(x,y):移动
        • scale(x,y):缩放
        • rotate(deg):旋转
        • transform-origin:调整元素转换变形的 原点
        • skew(deg,deg):倾斜
      • 3D变形
        • rotateX()
        • rotateY()
        • rotateZ()
        • 透视(perspective)
        • translateX(x)
        • translateY(y)
        • translateZ(z)
        • translate3d(x, y, z)
        • backface-visibility
    • animation:动画

     

    过渡(CSS3)transition

    • 在CSS3中使用 transition 可以实现补间动画(过渡效果);并且当前元素只要有“属性”发生变化时都会存在两种状态。
    • 比如:将宽度为 width=100px,高度为height=50px 的盒子 变为 width = 200px的盒子时;由于刷新页面时,变化的过于突兀,因此便可用transition实现过渡效果;

     transition语法格式

    transition:要过渡的属性  花费时间  运动曲线  何时开始;
    /* 如果有多组属性变化时,还是用逗号隔开;一般只需要前面两个属性即可 */
    
    /* 以上示例代码如下 */
    transition: width 0.5s;
    
    
    /* 如果高度也发生变化时 */
    transition: width 0.5s, height 0.5s;

    transition属性值:

    transform:实现2D|3D效果

    2D变形(CSS3)transform

    定位的盒子居中对齐的完美写法

    • 优于之前写的 绝对定位水平垂直居中 让盒子水平垂直居中的写法;
    • transform:translate(水平 50%,垂直 50%)以百分比(%)为单位时;
    /* translate:移动距离,如果是 %,则以自身宽度为准 */
    transform: translate(50%,50%);
    position: absolute;
    left:50%;
    top:50%;
    /* 需要计算,并不适用 */
    /* margin-left: 盒子宽度的一半 px; */
    /* margin-top: 盒子高度的一半 px */
    transform: translate(-50%,-50%);

    设置变形中心点

     

    transform-origin:可以调整元素转换变形的原点;

    /* 改变元素的原点,可以是盒子的任意位置;left top是以左上角为原点;*/
    transform-origin: left top;
    /* 如果是四个角可以用left、top、right、bottom,但是想要精确的位置,可以用 px 像素 */
    transform-origin: 10px 20px;
    /* rotate():单位是 deg 度数  */
    transform: rotate(45deg);

    3D变形(CSS3)transform

     左手法则:分别以X(rotateX)、Y(rotateY)、Z(rotateZ)轴为中心进行旋转

    /* 以 X 轴 为中心旋转*/
    transform: rotateX();
    /* 以 Y 轴 为中心旋转*/
    transform: rotateY();
    /* 以 Z 轴 为中心旋转*/
    transform: rotateZ();

    透视

    • 透视距离原理:近大远小
    • perspective:视距,表示视点距离屏幕的长短;视点,用于模拟人眼的位置
    • perspective 一般作为一个属性,设置给父元素,作用于所有3D转换的子元素

     示例:

     <!DOCTYPE html>
     <html lang="en">
     <head>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>Document</title>
          <style>
               body {
                    /* 
                    视距:perspective;
                    视距越大,效果越不明显;
                    视距越小,效果越明显;
                     */
                    perspective: 300px;
               }
               img {
                    margin: 100px;
                    width: 200px;
                    /* 过渡 */
                    transition: all 5s;
                    /* 设置变形中心点 */
                    transform-origin: left;
               }
               img:hover {
                   /* 设置3D变形 */
                    transform: rotateY(80deg);
               }
          </style>
     </head>
     <body>
          <img src="../../../assets/images/yangzi.jpeg">
     </body>
     </html>
    View Code

    页面效果如下:

     

     综合写法:

    /* 
         x,y 轴的单位可以是 px 也可以是 %
         但是 z 轴只能是 px
    */
    transform: translate3d(x, y, z);

    动画

    • 可以通过设置多个节点来精确控制一个或一组动画,常用来实现复杂的动画效果;
    • 语法格式如下:
    /*animation: 动画名称 动画时间 运动曲线 何时开始 播放次数 是否反方向 动画之外的状态; */
    animation: name duration timing-function delay iteration-count direction fill-mode;
    • 动画属性

    示例

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
         <meta charset="UTF-8">
         <meta name="viewport" content="width=device-width, initial-scale=1.0">
         <title>Document</title>
         <style>
              img {
                   width: 200px;
                   /* 
                        purpleYang:动画名称
                        3s: 动画时间
                        2:循环次数,默认是1次
                        infinite:无限循环(循环次数)
                        alternate: 反方向开始
    
                        一般情况下,默认只写 动画名称 和 动画时间 即可;
                   */
                   animation: purpleYang 3s 0s infinite alternate;
              }
    
              /* 
                   @keyframes: 规定动画
                   purpleYang:引用选择器中设置的 动画名称
                   from{} to{}:起始位置 --> 结束位置
    
                   from--to 也可以用百分比代替:0%(相当于起始位置);100%(相当于结束位置)
    
                   0% {
                        transform: translate3d(0, 0, 0);
                   }
                   25% {
                        transform: translate3d(600px, 0 ,0);
                   }
                   50% {
                        transform: translate3d(600px, 400px ,0);
                   }
                   75% {
                        transform: translate3d(0, 400px ,0);
                   }
                   100% {
                        transform: translate3d(0, 0 ,0);
                   }
              */
              @keyframes purpleYang {
                   from {
                        transform: translateX(0);
                   }
    
                   to {
                        transform: translateX(600px);
                   }
              }
         </style>
    </head>
    
    <body>
         <img src="../../../assets/images/yangzi.jpeg">
    </body>
    
    </html>

    页面效果:图片在水平方向从0px 到 600px 来回滑动;

  • 相关阅读:
    VS使用技巧
    写的一个简单定时器(非独立线程)
    C/C++技巧
    【转载】R6034错误,C Runtime Error
    C/C++面试题(一)
    常用的coco2d-x游戏开发工具(转)
    AndroidJNI 调用JAVA(转)
    Android SDK +Eclipse+ADT+CDT+NDK 开发环境在windows 7下的搭建
    简单的字符串压缩--C代码
    SQLite: sqlite_master(转)
  • 原文地址:https://www.cnblogs.com/Chestnut-g/p/14311804.html
Copyright © 2011-2022 走看看