笔记 01 CSS 8种让人眼前一亮的hover效果 发送效果

参考原文
MDN CSS3
MDN align-items
MDN justify-content
MDN length
vw
vh
MDN flex
MDN border-radius
MDN text-transform
MDN font-weight
MDN vertical-align
MDN display-legacy
MDN animation
MDN @keyframes
MDN animation-timing-function
MDN timing-function
MDN transform
MDN translateX

发送效果

css hover 触发 animation + transform

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>发送效果</title>
    </head>
  <style>
    #send-btn{
      /* flex 属性是flex-grow, flex-shrink 和 flex-basis 属性的简写。 */
      /*  可以作为弹性长度被引用在CSS Grid(栅格)布局中。 */
      /*
        随着inline-flex的使用,它将使它适用的元素成为一个flex container(伸缩容器),
        而这个元素的每个子元素将成为 flex item(伸缩项目)。
        伸缩项目将参与到flex布局中,
        所有由CSS Flexible Box Layout Module(CSS伸缩盒布局模型)
        定义的属性都能被它们使用。
      */
      display: flex;
      /* CSS align-items属性
        将所有直接子节点上的align-self值设置为一个组。
        align-self属性设置项目在其包含块中在交叉轴方向上的对齐方式。
      */
      align-items: center;
      /* CSS justify-content 属性
        定义了浏览器之间,如何分配顺着弹性容器主轴(或者网格行轴)
        的元素之间及其周围的空间。
      */
      justify-content: center;
      /* 定义了相对视口长度单位:vw,vh,vmax 和 vmin */
      /* vw : 相对于视口的宽度。视口被均分为100单位的vw */
      /* vh : 相对于视口的高度。视口被均分为100单位的vh */
      /* vmin : 相对于视口的宽度或高度中较小的那个。其中最小的那个被均分为100单位的vmin */
      /* vmax : 相对于视口的宽度或高度中较大的那个。其中最大的那个被均分为100单位的vmax */
      height: 100vh;
    }

    button {
      background: #5f55af;
      border: 0;
      /* 设置元素的外边框圆角 */
      border-radius: 5px;
      padding: 10px 30px 10px 20px;
      color: white;
      /*
        text-transform CSS属性指定如何将元素的文本大写。
        它可以用于使文本显示为全大写或全小写,
        也可单独对每一个单词进行操作。
      */
      text-transform: uppercase;
      /*
        font-weight CSS 属性指定了字体的粗细程度。
        一些字体只提供 normal 和 bold 两种值。
      */
      font-weight: bold;
    }

    button svg {
      /*
        元素会产生一个块元素盒子,
        并且像内联盒子一样(表现得更像一个被替换的元素),
        可以融入到周围内容中。
      */
      display: inline-block;
      /*
        CSS 的属性 vertical-align 用来指定行内元素(inline)
        或表格单元格(table-cell)元素的垂直对齐方式。
      */
      vertical-align: middle;
      padding-right: 5px;
    }

    button:hover svg {
      /*
        CSS animation 属性是
        animation-name,animation-duration, animation-timing-function,
        animation-delay,animation-iteration-count,animation-direction,
        animation-fill-mode 和 animation-play-state
        属性的一个简写属性形式。
      */
      /*
        CSS 支持两种定时函数:
          1 立方贝塞尔曲线的子集 cubic-bezier()
          2 阶梯函数
        这些函数中最有用的是一个关键字,可以很容易地引用它们。

        cubic-bezier() 定义了一条
        立方贝塞尔曲线(cubic Bézier curve)。
        这些曲线是连续的,一般用于动画的平滑变换,
        也被称为缓动函数(easing functions)。
      */
      /*
        ease 此关键字表示定时函数 cubic-bezier(0.25, 0.1, 0.25, 1.0)。
        这个函数类似于 ease-in-out,
        尽管它在开始时加速地更快,
        但在接近中间中,加速已经开始变慢了。
      */
      animation: fly 2s ease 1;
    }

    /*
        关键帧 @keyframes
        at-rule 规则通过在动画序列中定义关键帧
        (或waypoints)的样式来控制CSS动画序列中的中间步骤。
        和 转换 transition 相比,
        关键帧 keyframes 可以控制动画序列的中间步骤。
    */
    /*
        CSStransform属性允许你
        旋转,缩放,倾斜或平移给定元素。
        这是通过修改CSS视觉格式化模型的坐标空间来实现的。

        translateX()函数表示在二维平面上水平方向移动元素。
        其结果的数据类型是<transform-function>。
    */
    @keyframes fly {
      0% {
        transform: translateX(0%);
      }

      50% {
        transform: translateX(300%);
      }

      100% {
        transform: translateX(0);
      }
    }
  </style>
    <body>
    <div id="send-btn">
      <button>
        <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
        <svg t="1599231419440" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4155" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32">
          <defs>
            <style type="text/css"></style>
          </defs>
            <path d="M899.6 117c9.9 7.1 13.8 16.7 12 28.5L797.3 831.2c-1.5 8.6-6.3 15.3-14.3 20.1-4.1 2.3-8.8 3.6-13.8 3.6-3.3 0-6.9-0.8-10.7-2.3L556.3 770 448.2 901.8c-5.4 6.9-12.7 10.2-21.9 10.2-3.8 0-7.1-0.6-9.9-1.8-5.6-2.1-10.2-5.5-13.6-10.5-3.4-4.9-5.2-10.3-5.2-16.3V727.7l385.7-472.8-477.2 413-176.3-72.3c-11-4.1-17-12.3-17.8-24.6-0.6-11.9 4.1-20.7 14.3-26.4L869.1 116c4.5-2.7 9.2-4 14.3-4 6 0 11.4 1.7 16.2 5z" fill="#d4237a" p-id="4156"></path>
          </svg>
          Send
      </button>
    </div>
    </body>
</html>