1. 过渡 transition

允许 CSS 的属性值在一定时间内平滑的过渡,

在鼠标点击,鼠标滑过或对属性改变中触发,并圆滑的改变 CSS 的属性值

简写属性:

  • #box {
    width: 300px;
    height: 200px;
    background-color: red;
    transition: property timing-function duration delay;

    }
    /*
    没有顺序限制
    但是必须先写 过渡,再写 延迟
    即 先写 duration , 再写 delay
    transition: 1s; 等同于 trasition: 1s all ease 0;
    */
    #box:hover {
    width: 200px;
    height: 300px;
    background-color: blue;
    }
  • transition-property

    • 定义: 设置对象的参与过渡的属性,或者说要监测的属性

      • transition-property: width;
    • 可选值: 
      • all    默认值,所有属性都改变
      • none    没有属性改变
      • property    元素的属性名
  • transition-duration

    • 定义: 设置过渡效果需要花费的事件,以 秒/毫秒 计算

      • transition-duration: 1s;
        transition-duration: 1000ms;
    • 默认值: 0
  • transition-timing-function

    • 定义: 设置过渡的动画类型(只能使用一种类型)

      • ease    默认值,平滑过渡(慢-快-慢)cubic-bezier(0.25, 0.1, 0.25, 1)
      • linear                 线性过渡(匀速)      cubic-bezier(0, 0, 1, 1)
        • transition-timing-function: 贝塞尔曲线;
        • transition-timing-function: cubic-bezier(.17,.67,.82,.35);
      • ease-in              慢-快                           cubic-bezier(0.42, 0, 1, 1)
      • ease-out            快-慢                           cubic-bezier(0, 0, 0.58, 1)
      • ease-in-out        慢-快-慢                      cubic-bezier(0.42, 0, 0.58, 1)    相较于ease 的幅度更大
  • transition-delay

    • 定义: 设置延迟的过渡时间,指定等待 1s/1000ms 再开始过渡动画。
    • 默认值: 0
  • 过渡 样式的位置

    • 放在 原来样式 中

      • 鼠标悬浮 于 鼠标离开,都有过渡效果
    • 放在 新的样式 中
      • 只有鼠标悬浮时有效果,鼠标离开时无效果
  • 多属性过渡,需求: 3s 延迟后 width 变成 300px,再延迟 1s 后 background-color 变成 red

    • 使用逗号隔开 两个过渡参数
    • #box {
      width: 300px;
      height: 200px;
      background-color: red;
      transition: 2s 3s width linear, background 2s linear;
      }
      /* (面试题)
      transition: width 3s linear 2s, 2s;
      // 不会有延迟 2s,立刻执行 3s 匀速过渡动画
      (1)过渡的覆盖问题,相当于:
      transition: all 2s ease 0s;
      */
  • js 实现页面加载时过渡

    • (2)DOM 页面没有渲染完,过渡是不生效的,即 js 代码执行了,才开始监控属性

      • 元素渲染完,过渡才生效
      • 解决方案:
        • 1. 使用 window.setTimeout() 来保证元素渲染完。
        • 2. window.onload();    保证外部所有资源加载完。
  • (3)并不是所有的属性都能加过渡

    • 就看元素的变化,有没有中间的过程
    • 元素有无到有的过渡,使用 opacity: 0→1; ,而不能使用 display: none→block;
  • 幽灵边框

    • /************** 幽灵边框 ***************/
      .ghost_border {
      position: relative;
      top: 0px;
      left: 0px;
      } .ghost_border::before,
      .ghost_border::after {
      content:""; position: absolute;
      display: block;
      width:;
      height: 20%;
      background-color: olive;
      transition: 1s all ease 0s;
      } .ghost_border::before {
      top:;
      left:;
      } .ghost_border::after {
      bottom:;
      right:;
      } body .ghost_border:hover::before,
      body .ghost_border:hover::after {
      width: 100%;
      }

2. 2D 变换

(面试题)display: inline 元素不支持 transform:即不支持 2D 变换,也不支持 3D变换

尽管元素外形发生变化 ,其在文档流的位置不变。    即不影响周围元素布局

  • 旋转 rotate(0deg)

    • 定义: 通过制定一个角度,对元素指定一个 2D 的旋转
    • 使用:
      • transform: rotate(0deg);
      • deg 增大,元素顺时针旋转
      • deg 减小,元素逆时针旋转
      • 0deg 和 360deg 的效果是一样的
  • 平移 translate(0px, 0px)

    • 定义:
    • 使用:
      • transform: translateX(0px);

        • 水平方向平移
        • 数值增大,向右移
        • 数值减小,向左移
      • transform: translateY(0px);
        • 垂直方向平移
        • 数值增大,向下
        • 数值增大,向上
      • transform: translate(0px, 0px);
        • 同时控制  水平,垂直  平移
        • transform: translate(0px);    等同于    transform: translateX(0px);
        • 即只写一个参数,第二个参数默认为 0px。即只控制水平平移
  • 缩放 scale(1)

    • 定义:
    • 使用
      • transform: scale(1);

        • 默认值 1
        • 可以为负值,-1 时为翻转,再小就是翻转放大
      • transform: scaleX(1);  
        • 设置水平方向的缩放
      • transform: scaleY(1);
      • transform: scale(1, 1);  
        • 如果只写一个参数,元素的  水平,垂直方向  同时进行缩放
  • 扭曲 skew(0deg)

    • 定义: 改变用户视觉角度,
    • 使用:
      • transform: skewX(0deg);

        • 水平方向扭曲
        • 扭曲度增加,视觉上 向左
        • 扭曲度减小,视觉上 向右
      • transform: skewY(0deg);
        • 垂直方向扭曲
        • 扭曲度增加,视觉上 向下
        • 扭曲度减小,视觉上 向上
      • transform: skew(0deg, 0deg);
        • skew(0deg);
        • 只写一个数值,是等同于 transform: skewX(0deg); 控制水平方向扭曲的
    • 当扭曲度 skew(90deg) 时,元素将垂直于屏幕,元素将在视觉上看不见
    • 当扭曲度 skew(180deg) 时,与 skew(0deg) 效果一致
  • 变换基点 transform-origin: center;    (为元素的左上角)

    • 定义: 元素变换的基准点。
    • 使用:
      • transform-origin: 水平方向 垂直方向;
    • 默认基准点:
      • rotate    几何元素中心点
      • scale    几何元素中心点
      • skew    几何元素中心点
      • translate     元素自身位置
  • #box {
    width: 200px;
    height: 200px; transform: rotate(0deg); /* 设置基准点为元素左上角 */
    transform-origin: 0px 0px; /* 默认值 */
    transform-origin: center;
    transform-origin: 100% center;
    transform-origin: 100%;
    transform-origin: 100% 100%;
    transform-origin: 100px center;
    transform-origin: 100px;
    transform-origin: 100px 100px; /* 关键字 */
    transform-origin: top left;
    transform-origin: top;
    transform-origin: right;
    transform-origin: bottom;
    transform-origin: left;
    }
  • /*百分比参照于自身
    border-radius:
    background-size:
    background-origin:
    transform: translate(-50%, -50%);
    */
  • 当前元素水平,垂直居中

    /* 所有场景可用 */
    #box {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    }
    /* 前提条件: width 和 height 必须已知 */
    #box {
    width: 200px;
    height: 200px; position: absolute;
    top: 50%;
    left: 50%;
    margin: -100px 0 0 -100px;
    } #box {
    width: 200px;
    height: 200px; position: absolute;
    top: 50%;
    left: 50%;
    margin: -50% 0 0 -50%;
    }
  • 综合变换(经常两两组合)

    • #box {
      width: 200px;
      height: 200px;
      background-color: olive; // 效果1 移动 200px 再缩小 0.5
      transform: translate(200px) scale(0.5); // 效果2 缩小 0.5,移动 100px
      transform: scale(0.5) translate(200px);
      /*
      x相当于 transform: translate(100px) scale(0.5); */
      } /*
      scale 发生缩放时,
      会将后面的 translate 的数值也会进行缩放
      对于后面的 rotate,skew 无影响 rotate 发生旋转时,
      会将后面的 translate 的 xy 坐标轴也旋转
      会将后面的 skew 的扭曲轴进行旋转 skew 发生扭曲时,
      会将后面的 translate 的 xy 坐标轴也扭曲
      */

3. 瓶体旋转:

  • 先写瓶纸,再写瓶体,保证瓶体在上

    • 包裹(瓶纸-瓶体)
    • 使用定位,使之重合
    • 使用 js 设置包裹的宽高
    • img 转成块儿,处理底部留白
    • overflow 隐藏瓶纸
    • 使用 js 定时器 更新 transform: translateX(colaX+"px");
    • 在纸后加一张纸,解决极值问题
  •         ... ...
    <style type="text/css">
    body {
    width: 100%;
    color: #000;
    background: #fff;
    font: 14px Helvetica, Arial, sans-serif;
    } /**** Cola Can Scroll ****/
    #can_box img {
    display: block; /* 解决图片留白 */
    } #can_bg img {
    float: left; /* 两张图片在一行 */
    } #can_box {
    position: relative;
    margin: 150px auto;
    overflow: hidden;
    } #can_bg {
    position: absolute;
    top: 10px;
    left: 0px;
    } #can_body {
    position: absolute;
    top: 0px;
    left: 0px;
    }
    </style>
    </head> <body> <div id="can_box"> <div id="can_bg">
    <img id="cola_bg" src="./img/cola_bg.jpg"/>
    <img src="./img/cola_bg.jpg"/>
    </div> <div id="can_body">
    <img id="cola_can" src="./img/cola_can.png"/>
    </div> </div> <!-- javascript 代码 -->
    <script type="text/javascript">
    window.onload = function(){
    var canBox = document.getElementById("can_box");
    var canBg = document.getElementById("can_bg");
    var colaBg = document.getElementById("cola_bg");
    var colaCan = document.getElementById("cola_can"); canBox.style.width = colaCan.offsetWidth+"px";
    canBox.style.height = colaCan.offsetHeight+"px"; canBg.style.width = colaBg.offsetWidth* 2+"px";
    canBg.style.height = colaCan.offsetHeight+"px"; var canLeft = 0;
    window.setInterval(function(){
    canLeft -= 1;
    if(canLeft <= -colaBg.offsetWidth){
    canLeft = 0;
    } canBg.style.transform = "translate("+canLeft+"px)";
    },20);
    };
    </script>
    ... ...

4. 动态时钟

  • HTML 元素 刻度、时、分、秒、表芯
  • 定位使各元素归位。
  • 用 js 给各个刻度设置变换基点,再设置旋转角度
  • 注意细节: 整点刻度的 变换基点 与普通刻度的 变换基点 不一样
  • 注意细节: 时针,分针移动方式。。。
    • 例如 11:30:30,

      • sec = date.getSconds();
      • min = date.getMinutes()+sec/60;
      • hour  = date.getHours()+min/60;
  • <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8" />
    <title>Timing Clock</title> <link rel="stylesheet" type="text/css" href="./css/index.css" /> <script type="text/javascript" src="./js/kjfFunctions.js"></script>
    <script type="text/javascript" src="./js/index.js"></script> <style type="text/css">
    body {
    width: 100%;
    color: #000;
    background: #96b377;
    font: 14px Helvetica, Arial, sans-serif;
    } /**** Timing clock ****/
    #clock_dial {
    position: relative; width: 300px;
    height: 300px;
    margin: 300px auto 0;
    border-radius: 50%;
    background: olive;
    } #clock_second {
    position: absolute;
    top: 30px;
    left: 149px;
    transform-origin: 1px 120px; width: 2px;
    height: 120px;
    background-color: red;
    } #clock_minute {
    position: absolute;
    top: 70px;
    left: 148px;
    transform-origin: 2px 80px; width: 4px;
    height: 80px;
    background-color: green;
    } #clock_hour {
    position: absolute;
    top: 100px;
    left: 147px;
    transform-origin: 3px 50px; width: 6px;
    height: 50px;
    background-color: blue;
    } #clock_core {
    position: absolute;
    top: 145px;
    left: 145px; width: 10px;
    height: 10px;
    border-radius: 50%;
    background-color: pink;
    } .clock_scale {
    position: absolute;
    top: 0px;
    left: 149px;
    transform-origin: 1px 150px; width: 2px;
    height: 5px;
    background-color: #68ea94;
    } .clock_scale:nth-child(5n) {
    transform-origin: 2px 150px; width: 4px;
    height: 10px;
    background-color: #68ea94;
    }
    </style>
    </head> <body> <div id="clock_dial">
    <div id="clock_second">
    </div> <div id="clock_minute">
    </div> <div id="clock_hour">
    </div> <div id="clock_core">
    </div> </div> <!-- javascript 代码 -->
    <script type="text/javascript">
    /**** 画刻度 ****/
    var clockDial = document.getElementById("clock_dial"); var i = 0;
    for(i=0; i<=59; i++){
    var firstDiv = document.createElement("div");
    firstDiv.className = "clock_scale";
    clockDial.appendChild(firstDiv);
    firstDiv.style.transform = "rotate("+ 6*i +"deg)";
    } /**** 动起来 ****/
    var clockSecond = document.getElementById("clock_second");
    var clockMinute = document.getElementById("clock_minute");
    var clockHour = document.getElementById("clock_hour");
    window.setInterval(function(){
    var nowTime = new Date();
    s = nowTime.getSeconds();
    m = nowTime.getMinutes()+s/60;
    h = nowTime.getHours()+m/60;
    clockSecond.style.transform = "rotate("+s*6+"deg)";
    clockMinute.style.transform = "rotate("+m*6+"deg)";
    clockHour.style.transform = "rotate("+h*30+"deg)"; },1000);
    </script>
    </body>
    </html>

CSS3_过渡_2D 变换_瓶体旋转_动态时钟的更多相关文章

  1. OpenGL立方体在世界坐标系中_缩放_旋转_平移_顶点片源着色器_光照作用_棋盘纹理贴图

    读取bmp等图片格式中的像素还有难度,就先用这个棋盘图象素来弄了 代码打错一个就一直First-chance exception ,貌似还有一个要用q或者Q才能成功退出,不知道缺少哪句,我用窗口红叉退 ...

  2. matlab学习笔记9 高级绘图命令_2 图形的高级控制_视点控制和图形旋转_色图和颜色映像_光照和着色

    一起来学matlab-matlab学习笔记9 高级绘图命令_2 图形的高级控制_视点控制和图形旋转_色图和颜色映像_光照和着色 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 < ...

  3. CCS3的过渡、变换、动画以及响应式布局、弹性布局

    CSS3 过渡 .变换.动画 在没有CSS3之前,如果页面上需要一些动画效果,要么你自己编写 JavaScript,要么使用 JavaScript 框架(如 jQuery)来提高效率. 但是CSS3出 ...

  4. Spring_MVC_教程_快速入门_深入分析

    Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门  资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf Spring ...

  5. 基于samba实现win7与linux之间共享文件_阳仔_新浪博客

    基于samba实现win7与linux之间共享文件_阳仔_新浪博客 然后启动samba执行如下指令: /dev/init.d/smb start 至此完成全部配置.

  6. 浅谈 Underscore.js 中 _.throttle 和 _.debounce 的差异

    Underscore.js是一个很精干的库,压缩后只有5.2KB.它提供了几十种函数式编程的方法,弥补了标准库的不足,大大方便了JavaScript的编程. 本文仅探讨Underscore.js的两个 ...

  7. CLOSE-UP FORMALWEAR_意大利进口_2015秋冬_男装发布会_西装图片系列_男装西装设计资料_WeArTrends时尚资讯网_国内最专业的服装设计资讯网站

    CLOSE-UP FORMALWEAR_意大利进口_2015秋冬_男装发布会_西装图片系列_男装西装设计资料_WeArTrends时尚资讯网_国内最专业的服装设计资讯网站 CLOSE-UP FORMA ...

  8. 聚焦设计交易与商业落地 DANG·DHUB设计师平台上线【图】_品牌资讯_服饰_太平洋时尚网

    聚焦设计交易与商业落地 DANG·DHUB设计师平台上线[图]_品牌资讯_服饰_太平洋时尚网 聚焦设计交易与商业落地 DANG·DHUB设计师平台上线

  9. 联系我们_你我想法_【有男度】UNANDU 100%进口 全球设计师品牌精汇 男装_男装搭配_时尚男装_品牌男装_男装搭配技巧_男装网站

    联系我们_你我想法_[有男度]UNANDU 100%进口 全球设计师品牌精汇 男装_男装搭配_时尚男装_品牌男装_男装搭配技巧_男装网站 联系我们 2012-02-17   国内北京公司总部  邮编 ...

随机推荐

  1. I/O模型之一:Unix的五种I/O模型

    目录: <I/O模型之一:Unix的五种I/O模型> <I/O模型之二:Linux IO模式及 select.poll.epoll详解> <I/O模型之三:两种高性能 I ...

  2. 监控c3p0的连接池

    SqlSession session = SessionFactory.getSqlSession(dbid); List<Map<String, Object>> resul ...

  3. golang命令行库cobra使用

    github地址:https://github.com/spf13/cobra Cobra功能 简单子命令cli 如  kubectl verion    kubectl get 自动识别-h,--h ...

  4. 18、cookies与session学习笔记

    本文记录学习 cookies 和 session 的一些小练习和知识点   知识点1    cookies 和 session 的由来   HTTP协议是无状态的协议,因为一旦浏览器和服务器之间的请求 ...

  5. CCF CSP 认证

    参加第八次CCF CSP认证记录 代码还不知道对不对,过两天出成绩. 成绩出来了,310分. 100+100+100+10+0: 考试13:27开始,17:30结束,提交第4题后不再答题,只是检查前四 ...

  6. dubbo线程模型

    dubbo的provider有2种线程池: IO处理线程池.(直接通过netty等来配置) 服务调用线程池. 如果事件处理的逻辑能迅速完成,并且不会发起新的 IO 请求,比如只是在内存中记个标识,则直 ...

  7. TCP/IP(五)传输层之细说TCP的三次握手和四次挥手

    前言 这一篇我将介绍的是大家面试经常被会问到的,三次握手四次挥手的过程.以前我听到这个是什么意思呀?听的我一脸蒙逼,但是学习之后就原来就那么回事! 一.运输层概述 1.1.运输层简介 这一层的功能也挺 ...

  8. robot framework 上个用例的输出作为下个用例的输入 (Set Global Variable的用法)

    变量的作用域 通常情况下,每个变量默认都是局部变量. 一个case里的变量,作用域在这个case内部: 一个userkeyword里的变量,作用域在这个userkeyword内部: 一个文件型suit ...

  9. vue脚手架安装步骤vue-cli

    1.环境搭建     安装node.js: 从node.js官网下载并安装node,安装过程很简单.  npm 版本需要大于 3.0,如果低于此版本需要升级它: # 查看版本 $ npm -v 2.3 ...

  10. 此主机支持Intel VT-x,但Intel VT-x处于禁用状态

    原因:未开启虚拟化技术 解决方法:https://www.cnblogs.com/jiefu/p/10711955.html