CSS3之渐变,转换,过渡,动画

1. 渐变

1.1 线性渐变

linear-gradient()函数

<!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>
    div {
      display: inline-block;
      width: 100px;
      height: 100px;
    }

    /* 线性渐变(默认)(上下) */
    #simple-linear {
      background: linear-gradient(blue, red);
    }

    /*线性渐变(左右) */
    #horizontal-gradient {
      background: linear-gradient(to right, blue, red);
    }

    /*线性渐变(对角线) */
    #diagonal-gradient {
      background: linear-gradient(to right bottom, blue, red);
    }

    /* 线性渐变(角度) */
    #angled-gradient {
      background: linear-gradient(90deg, blue, red);
    }

    /* 线性渐变(多种颜色+颜色终止位置) */
    #auto-spaced-linear-gradient {
      background: linear-gradient(purple 10%, red 30%, yellow 50%, green 70%, blue);
    }

    /* 颜色之间使用实线过渡(两个颜色终止点设为同一个值) */
    .striped {
      background: linear-gradient(to bottom right, cyan 50%, orangered 50%);
    }

    /* 修改渐变颜色中心点 */
    .color-hint {
      background: linear-gradient(blue, 30%, red);
    }

    /* 未修改的渐变颜色参考 */
    .simple-linear {
      background: linear-gradient(blue, red);
    }

    /* 创建渐变条纹 */
    .multiposition-stops {
      background: linear-gradient(to left,
          lime 20%, red 30%, red 45%, cyan 55%, cyan 70%, yellow 80%);
      background: linear-gradient(to left,
          lime 20%, red 30% 45%, cyan 55% 70%, yellow 80%);
    }

    /* 创建不渐变条纹 */
    .multiposition-stop2 {
      background: linear-gradient(to left,
          lime 25%, red 25%, red 50%, cyan 50%, cyan 75%, yellow 75%);
      background: linear-gradient(to left,
          lime 25%, red 25% 50%, cyan 50% 75%, yellow 75%);
    }
  </style>
</head>

<body>
  <div id="simple-linear">
  </div>
  <div id="horizontal-gradient">
  </div>
  <div id="diagonal-gradient">
  </div>
  <div id="angled-gradient">
  </div>
  <div id="auto-spaced-linear-gradient">
  </div>
  <div class="striped">
  </div>
  <div class="color-hint">
  </div>
  <div class="simple-linear">
  </div>
  <div class="multiposition-stops"></div>
  <div class="multiposition-stop2"></div>
</body>

</html>

1.2 径向渐变

radial-gradient()函数

1.3 圆锥渐变

repeating-linear-gradient()函数

2. 转换

2.1 2D转换

<!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>
    div {
      font-size: 12px;
      width: 100px;
      height: 100px;
      border: 1px solid;
      display: inline-block;
      background-color: tomato;
    }

    section {
      background-color: turquoise;
      margin: 10px;
      height: 200px;
    }

    span {
      position: absolute;
    }

    .translate div {
      background-color: blue;
    }

    /* 平移元素(x轴(右),y轴(下)) */
    #translate {
      transform: translate(50px, 50px);
    }

    #translateX {
      transform: translateX(50px);
    }

    #translateY {
      transform: translateY(50px);
    }

    .scale div {
      margin: 50px 100px 0 0;
      background-color: red;
    }

    /* 缩放元素(宽的倍数,高的倍数) */
    #scale {
      transform: scale(2, 2);
    }

    /* 缩放元素(宽的倍数) */
    #scaleX {
      transform: scaleX(2);
    }

    /* 缩放元素(高的倍数) */
    #scaleY {
      left: 200px;
      transform: scaleY(2);
    }

    .skew div {
      margin: 20px 0px 0 0;
      background-color: violet;
    }

    /* 旋转元素 */
    #rotate {
      transform: rotate(45deg);
    }

    .rotate div {
      margin: 20px -106px 0 0;
      background-color: green;
    }

    /* 倾斜元素 */
    #skew {
      transform: skew(0.1turn, 0.1turn);
    }

    /* 倾斜元素(X) */
    #skewX {
      transform: skewX(0.1turn);
    }

    /* 倾斜元素(Y) */
    #skewY {
      transform: skewY(0.1turn);
    }

    .matrix div {
      margin: 20px 0px 0 0;
    }

    #matrix {
      transform: matrix(1, 0.7, 0.7, 1, 100, 10);
    }
  </style>
</head>

<body>
  <section class="translate">
    <span>translate</span>
    <div id="translate">
      <span>translate(50px, 50px)</span>
    </div>
    <div id="translateX">
      <span>translateX(50px)</span>
    </div>
    <div id="translateY">
      <span>translateY(50px)</span>
    </div>
  </section>
  <section class="scale">
    <span>scale</span>
    <div id="none">
      <span>none</span>
    </div>
    <div id="scale">
      <span>scale(2, 2)</span>
    </div>
    <div id="scaleX">
      <span>scaleX(2)</span>
    </div>
    <div id="scaleY">
      <span>scaleY(2)</span>
    </div>
  </section>

  <section class="rotate">
    <span>rotate</span>
    <div id="none">
      <span>none</span>
    </div>
    <div id="rotate">
      <span>rotate(45deg)</span>
    </div>
  </section>
  <section class="skew">
    <span>skew</span>
    <div id="none">
      <span>none</span>
    </div>
    <div id="skew">
      <span>skew</span>
    </div>
    <div id="skewX">
      <span>skewX</span>
    </div>
    <div id="skewY">
      <span>skewY</span>
    </div>
  </section>
  <section class="matrix">
    <span>matrix</span>
    <div id="none">
      <span>none</span>
    </div>
    <div id="matrix">
      <span>matrix</span>
    </div>
  </section>

</body>

</html>

2.2 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>
    section {
      width: 300px;
      height: 300px;
      background-color: cyan;
      /* 在父元素设置透视 */
      perspective: 800px;
      /* perspective的消失点 */
      perspective-origin: left top;
      /* 设置元素的子元素是位于 3D 空间中还是平面中 */
      transform-style: preserve-3d;
    }

    .box {
      margin: auto;
      position: absolute;
      top: 0;
      bottom: 0;
      left: 0;
      right: 0;
      width: 100px;
      height: 100px;
      background-color: red;
    }

    .box:hover {
      transform: translateZ(100px);
    }
  </style>
</head>

<body>
  <section>
    <div class="box"></div>
  </section>
</body>

</html>

3. 过渡

3.0如何实现一个过渡

过渡是将某个属性从一个值变为另一个值的过程。触发过渡需要一个事件。

  1. 过渡前的样式
  2. 过渡后的样式
  3. 在默认样式中添加过渡

3.1 transition-property属性

transition-property表示需要过渡的CSS属性。

transition-property:none;/*没有任何属性过渡*/
transition-property:all;/*所有属性过渡*/
transition-property:width;/*width属性过渡*/
transition-property:width height;/*width属性过渡*/

3.2 transition-duration属性

transition-duration 属性以秒或毫秒为单位指定过渡动画所需的时间。默认值为 0s ,表示不出现过渡动画。

transition-duration: 6s;
transition-duration: 120ms;
transition-duration: 1s, 15s;
transition-duration: 10s, 30s, 230ms;

3.3 transition-timing-function属性

transition-timing-function

transition-timing-function:linear	/*规定以相同速度开始至结束的过渡效果(等于 cubic-bezier(0,0,1,1))。*/
transition-timing-function:ease	/*规定慢速开始,然后变快,然后慢速结束的过渡效果(cubic-bezier(0.25,0.1,0.25,1))。*/
transition-timing-function:ease-in	/*规定以慢速开始的过渡效果(等于 cubic-bezier(0.42,0,1,1))。*/
transition-timing-function:ease-out	/*规定以慢速结束的过渡效果(等于 cubic-bezier(0,0,0.58,1))。*/
transition-timing-function:ease-in-out	/*规定以慢速开始和结束的过渡效果(等于 cubic-bezier(0.42,0,0.58,1))。*/
transition-timing-function:cubic-bezier(n,n,n,n)	/*在 cubic-bezier 函数中定义自己的值。可能的值是 0 至 1 之间的数值。*/

3.4 transition-delay属性

transition-delay:在过渡效果开始作用之前需要等待的时间。

transition-delay: 3s; /*3s后开始过渡*/
transition-delay: 2s, 4ms;/*2s 4ms 后开始过渡*/

3.5 transition属性

transition CSS 属性是 transition-property,transition-duration,transition-timing-function 和 transition-delay 的一个简写属性。

/* property name | duration | timing function | delay */
transition: margin-right 4s ease-in-out 1s;
transition: all 0.5s ease-out;

一个过渡的例子

<!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>
    div {
      width: 100px;
      height: 100px;
      background-color: cyan;
      display: inline-block;
    }

    .content {
      transition-property: width, height;
      transition-duration: 2s, 1s;
      transition-timing-function: ease, ease;
      transition-delay: 100ms, 100ms;
    }

    .content:hover {
      width: 200px;
      height: 200px;
    }

    .box {
      background-color: blue;
      transition-property: background-color;
      transition-duration: 2s;
      transition-timing-function: linear;
      transition-delay: 0ms;
    }

    .box:hover {
      background-color: orange;
    }

    .container {
      width: 200px;
      height: 200px;
      background-color: orange;
      transition: all 2s linear 1s;
    }

    /*鼠标一直放在元素上*/
    .container:hover {
      margin-left: 500px;
    }

    .input {
      transition: all 1s linear 100ms;
    }

    .input:focus {
      background-color: orangered;
    }

    /*过渡前的状态*/
    .bg-blue {
      background-color: blue;
    }

    /*过渡后的状态*/
    .bg-red {
      background-color: red;
    }

    h1 {
      /*添加过渡*/
      transition: all 500ms linear 0ms;
    }
  </style>
</head>

<body>
  <div class="box">
    <span>鼠标放在上面</span>
  </div>
  <div class="content">
    <span>鼠标放在上面</span>
  </div>
  <div class="container">
    <span>鼠标跟着移动</span>
  </div>
  <input class="input" type="text" value="鼠标点击获取焦点">
  <h1 class="bg-blue">利用JS实现过渡(点我)</h1>
  <script>
    var h1 = document.querySelector('h1')
    /*实现点击标签完成蓝-红或者红-蓝的背景色切换*/
    h1.addEventListener('click', function () {
      if (this.className === "bg-blue") {
        this.className = "bg-red"
      } else {
        this.className = "bg-blue"
      }

    })
  </script>
</body>

</html>

4. 动画

4.1animation-name属性

动画名称

4.2animation-duration属性

一个动画周期的时长

4.3animation-timing-function属性

定义CSS动画在每一动画周期中执行的节奏

animation-timing-function:linear | ease | ease-in | ease-out | ease=in-out | cubic-bezier(n,n,n,n)

4.4animation-delay属性

动画何时开始

4.5animation-iteration-count属性

动画执行次数

animation-iteration-count: infinite;/*无限循环*/
animation-iteration-count: 3;/*动画播放3次结束*/

4.6animation-direction属性

动画是否反向播放

animation-direction: normal/*动画默认方向*/
animation-direction: reverse/*反方向执行*/
animation-direction: alternate/*动画交替执行*/
animation-direction: alternate-reverse /*从反方向开始,动画交替执行*/

4.7animation-fill-mode属性

animation-fill-mode: none | backwards | forwords | both;
  1. none
    当动画未执行时,动画将不会将任何样式应用于目标,而是已经赋予给该元素的 CSS 规则来显示该元素。这是默认值。
  2. backwords
    动画将在应用于目标时立即应用第一个关键帧中定义的值,并在animation-delay期间保留此值。
  3. forwords
    目标将保留由执行期间遇到的最后一个关键帧计算值。 最后一个关键帧取决于animation-direction和animation-iteration-count的值:
  4. both
    动画将遵循forwards和backwards的规则,从而在两个方向上扩展动画属性。

4.8animation-play-state属性

定义一个动画是否运行或者暂停

animation-play-state: running;/*动画正在运行*/
animation-play-state: paused;/*动画停止*/

4.9animation属性

animation: name duration timing-function delay iteration-count direction fill-mode play-state;

一个动画例子

<!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>
    html,
    body {
      margin: 0;
    }

    div {
      width: 10em;
      height: 10em;
      background-color: orangered;
      display: inline-block;
      animation-duration: 1.5s;
      animation-timing-function: linear;
      animation-delay: 1s;
      animation-iteration-count: 3;
      /*动画正反交替执行*/
      animation-direction: alternate;
    }

    .box1 {
      animation-name: anime1;
      /*动画delay是应用初值,动画结束后应用第一个关键帧的样式*/
      animation-fill-mode: backwards;
    }

    .box2 {
      animation-name: anime1;
      /*动画delay是应用初值,动画结束后应用最后一个关键帧的样式*/
      animation-fill-mode: both;
    }

    .box3 {
      animation-name: anime2;
      /*动画结束后应用最后一个关键帧的样式(不会应用0%的样式)*/
      animation-fill-mode: forwards;
    }

    @keyframes anime1 {
      from {
        width: 5em;
        height: 5em;
      }

      to {
        height: 20em;
        width: 20em;
        background-color: orchid;
      }
    }

    @keyframes anime2 {
      from {
        width: 5em;
        height: 5em;
      }

      to {
        height: 20em;
        width: 20em;
        background-color: orchid;
      }
    }

    @keyframes anime3 {
      0% {
        width: 5em;
        height: 5em;
      }

      50% {
        width: 15em;
        height: 15em;
      }

      100% {
        width: 20em;
        height: 20em;
        background-color: orchid;
      }
    }
    div:hover {
      animation-play-state: paused;
    }
  </style>
</head>

<body>
  <section>
    <div class="box1">backwords</div>
    <div class="box2">both</div>
    <div class="box3">forwards</div>
  </section>

</body>

</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值