原文地址:https://segmentfault.com/a/1190000015089396

拓展地址:https://scrimba.com/c/cWqNNnC2

HTML code:

  1. <nav>
  2. <ul>
  3. <li>Home</li>
  4. </ul>
  5. </nav>

CSS code:

  1. /* 子元素垂直、水平居中 */
  2. body {
  3. margin:;
  4. padding:;
  5. height: 100vh;
  6. display: flex;
  7. align-items: center;
  8. justify-content: center;
  9. background-color: black;
  10. }
  11. :root {
  12. --time-slot-length: 0.1s;
  13. --t1x: var(--time-slot-length);
  14. --t2x: calc(var(--time-slot-length) * 2);
  15. --t3x: calc(var(--time-slot-length) * 3);
  16. --t4x: calc(var(--time-slot-length) * 4);
  17. --color: dodgerblue;
  18. }
  19. nav ul {
  20. padding:;
  21. }
  22. nav ul li {
  23. color: white;
  24. list-style-type: none;
  25. font-family: sans-serif;
  26. text-transform: uppercase;
  27. width: 8em;
  28. height: 3em;
  29. border: 1px solid rgba(255, 255, 255, 0.2);
  30. border-radius: 0.1em;
  31. text-align: center;
  32. line-height: 3em;
  33. letter-spacing: 0.1em;
  34. position: relative;
  35. transition: var(--t4x); /* duration 4x */
  36. margin: 1em;
  37. }
  38.  
  39. nav ul li:hover {
  40. color: var(--color);
  41. /* 在描边结束后,在按钮四周增加一个脉冲动画,加强动感 */
  42. animation: pulse ease-out 1s var(--t4x); /* delay 4x */
  43. }
  44. /* 用 before 伪元素定义上边框和右边框,其中边框颜色因会多次被用到,所以采用变量:
  45. 类似地,用 after 伪元素定义右边框和下边框 */
  46. nav ul li::before,
  47. nav ul li::after {
  48. content: '';
  49. position: absolute;;
  50. width:;
  51. height:;
  52. border-radius: 0.1em;
  53. visibility: hidden;
  54. }
  55.  
  56. nav ul li::before {
  57. top:;
  58. left:;
  59. border-top: 1px solid var(--color);
  60. border-right: 1px solid var(--color);
  61. transition:
  62. /* 属性 速度曲线 所花时间 开始时间 */
  63. height linear var(--t1x) var(--t2x), /* delay 2x */
  64. width linear var(--t1x) var(--t3x), /* delay 3x */
  65. visibility 0s var(--t4x); /* delay 4x */
  66. }
  67.  
  68. nav ul li::after {
  69. bottom:;
  70. right:;
  71. border-bottom: 1px solid var(--color);
  72. border-left: 1px solid var(--color);
  73. transition:
  74. height linear var(--t1x),
  75. width linear var(--t1x) var(--t1x), /* delay 1x */
  76. visibility 0s var(--t2x); /* delay 2x */
  77. }
  78.  
  79. nav ul li:hover::before,
  80. nav ul li:hover::after {
  81. width: 100%;
  82. height: 100%;
  83. visibility: visible;
  84. }
  85.  
  86. nav ul li:hover::before {
  87. transition:
  88. visibility 0s,
  89. width linear var(--t1x),
  90. height linear var(--t1x) var(--t1x); /* delay 1x */
  91. }
  92.  
  93. nav ul li:hover::after {
  94. transition:
  95. visibility 0s var(--t2x), /* delay 2x */
  96. width linear var(--t1x) var(--t2x), /* delay 2x */
  97. height linear var(--t1x) var(--t3x); /* delay 3x */
  98. }
  99.  
  100. @keyframes pulse {
  101. from {
  102. /* rgb(30, 144, 255) = dodgerblue */
  103. box-shadow: 0 0 rgba(30, 144, 255, 0.5);
  104. }
  105.  
  106. to {
  107. box-shadow: 0 0 0 1em rgba(30, 144, 255, 0);
  108. }
  109. }

37.如何把握好 transition 和 animation 的时序,创作描边按钮特效的更多相关文章

  1. 前端每日实战:37# 视频演示如何把握好 transition 和 animation 的时序,创作描边按钮特效

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/mKdzZM 可交互视频教程 此视频 ...

  2. 如何把握好 transition 和 animation 的时序,创作描边按钮特效

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/mKdzZM 可交互视频教 ...

  3. 终于不再对transition和animation,傻傻分不清楚了 --vue中使用transition和animation

    以前写页面注重在功能上,对于transition和animation是只闻其声,不见其人,对于页面动画效果心理一直痒痒的.最近做活动页面,要求页面比较酷炫,终于有机会认真了解了. transition ...

  4. 弄清 CSS3 的 transition 和 animation

    弄清 CSS3 的 transition 和 animation transition transition 属性是 transition-property, transition-duration, ...

  5. css3实践之图片轮播(Transform,Transition和Animation)

    楼主喜欢追求视觉上的享受,虽常以牺牲性能无法兼容为代价却也乐此不疲.本文就通过一个个的demo演示来简单了解下css3下的Transform,Transition和Animation. 本文需要实现效 ...

  6. css010 css的transform transition和animation

    css010 css的transform transition和animation 看着没有一个能想起他们是干什么的.. 1.         Transform    Transform(变形) r ...

  7. transition和animation动画简介

    本文介绍CSS动画的两大组成部分:transition和animation.我不打算给出每一条属性的详尽介绍,那样可以写一本书.这篇文章只是一个简介,帮助初学者了解全貌,同时又是一个快速指南,当你想不 ...

  8. CSS3中动画属性transform、transition 和 animation

    CSS3中和动画有关的属性有三个 transform.transition 和 animation.下面来一一说明:        transform   从字面来看transform的释义为改变,使 ...

  9. transition与animation

    以前,一直都知道,transition是animation的一个简化版,甚至不算是动画,而是一种过渡. transition的用法 早两天用transition写了一个按钮滑动的效果,类似于IOS的设 ...

随机推荐

  1. linux 查看系统磁盘、内存大小

    1.磁盘 df -h cat /proc/partitions 2.内存 cat /proc/meminfo cat /proc/meminfo

  2. WIN10 网速问题,边下载 边逛论坛 电脑 有点卡

    引用:https://www.chiphell.com/forum.php?mod=viewthread&tid=1961836&extra=page%3D1&mobile=2 ...

  3. SoapUI 5.2.1 调试工具

    SoapUI 5.2.1 调试工具 1.打开soapUI. 2.新建一个项目,实例如下: 点击ok后在soapUI界面左侧会显示出此项目,如图: 2.创建测试用例: a.新建用例组,选择此项目右键,新 ...

  4. NetBeans IDE 多行标签设置方法

  5. console call的fallback console 兼容

    (function() { var noop = function noop() {}; var methods = [ 'assert', 'clear', 'count', 'debug', 'd ...

  6. BlockingQueue队列

    1.BlockingQueue定义的常用方法如下     抛出异常 特殊值 阻塞 超时 插入 add(e) offer(e) put(e) offer(e,time,unit) 移除 remove() ...

  7. 日志框架学习(log4j2+slf4j)

    现在比较吊的就是这个log4j2这个日志框架了,功能强悍.slf4j是个日志框架的统一接口,方便扩展,切换框架啥的. 配置SSM+log4J2+SL4J https://blog.csdn.net/c ...

  8. [蓝桥杯]ALGO-79.算法训练_删除数组零元素

    从键盘读入n个整数放入数组中,编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动.注意,CompactIntegers函数需要接受数组及其元素个数作为参数,函数 ...

  9. PyQt—QTableWidget实现翻页功能

    主要使用QTableWidget中的三个函数实现: verticalScrollBar().setSliderPosition() 设置当前滑动条的位置 verticalScrollBar().max ...

  10. 【IIS错误】未能加载文件或程序集“AAAAA”或它的某一个依赖项。试图加载格式不正确的程序。

    未能加载文件或程序集“AAAAA”或它的某一个依赖项.试图加载格式不正确的程序. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的 ...