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

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

HTML code:

<nav>
<ul>
<li>Home</li>
</ul>
</nav>

CSS code:

/* 子元素垂直、水平居中 */
body {
margin:;
padding:;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background-color: black;
}
:root {
--time-slot-length: 0.1s;
--t1x: var(--time-slot-length);
--t2x: calc(var(--time-slot-length) * 2);
--t3x: calc(var(--time-slot-length) * 3);
--t4x: calc(var(--time-slot-length) * 4);
--color: dodgerblue;
}
nav ul {
padding:;
}
nav ul li {
color: white;
list-style-type: none;
font-family: sans-serif;
text-transform: uppercase;
width: 8em;
height: 3em;
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 0.1em;
text-align: center;
line-height: 3em;
letter-spacing: 0.1em;
position: relative;
transition: var(--t4x); /* duration 4x */
margin: 1em;
} nav ul li:hover {
color: var(--color);
/* 在描边结束后,在按钮四周增加一个脉冲动画,加强动感 */
animation: pulse ease-out 1s var(--t4x); /* delay 4x */
}
/* 用 before 伪元素定义上边框和右边框,其中边框颜色因会多次被用到,所以采用变量:
类似地,用 after 伪元素定义右边框和下边框 */
nav ul li::before,
nav ul li::after {
content: '';
position: absolute;;
width:;
height:;
border-radius: 0.1em;
visibility: hidden;
} nav ul li::before {
top:;
left:;
border-top: 1px solid var(--color);
border-right: 1px solid var(--color);
transition:
/* 属性 速度曲线 所花时间 开始时间 */
height linear var(--t1x) var(--t2x), /* delay 2x */
width linear var(--t1x) var(--t3x), /* delay 3x */
visibility 0s var(--t4x); /* delay 4x */
} nav ul li::after {
bottom:;
right:;
border-bottom: 1px solid var(--color);
border-left: 1px solid var(--color);
transition:
height linear var(--t1x),
width linear var(--t1x) var(--t1x), /* delay 1x */
visibility 0s var(--t2x); /* delay 2x */
} nav ul li:hover::before,
nav ul li:hover::after {
width: 100%;
height: 100%;
visibility: visible;
} nav ul li:hover::before {
transition:
visibility 0s,
width linear var(--t1x),
height linear var(--t1x) var(--t1x); /* delay 1x */
} nav ul li:hover::after {
transition:
visibility 0s var(--t2x), /* delay 2x */
width linear var(--t1x) var(--t2x), /* delay 2x */
height linear var(--t1x) var(--t3x); /* delay 3x */
} @keyframes pulse {
from {
/* rgb(30, 144, 255) = dodgerblue */
box-shadow: 0 0 rgba(30, 144, 255, 0.5);
} to {
box-shadow: 0 0 0 1em rgba(30, 144, 255, 0);
}
}

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找不到动态链接库 .so文件的解决方法

    linux找不到动态链接库 .so文件的解决方法 如果使用自己手动生成的动态链接库.so文件,但是这个.so文件,没有加入库文件搜索路劲中,程序运行时可能会出现找不到动态链接库的情形. 可以通过ldd ...

  2. git .gitignore文件

    .gitignore ! /*   忽略所有的文件 !/pages/  添加根目录下的所有文件被跟踪

  3. pytest.6.Parametrize Fixture

    From: http://www.testclass.net/pytest/parametrizing_fixture/ 背景 @pytest.mark.parametrize 装饰器可以让我们每次参 ...

  4. Android开发之五大布局篇

    一.Android中常用的5大布局方式有以下几种: 线性布局(LinearLayout):按照垂直或者水平方向布局的组件. 相对布局(RelativeLayout):相对其它组件的布局方式. 绝对布局 ...

  5. mac下面 ,启动2个桌面版appium的方法

    分别打开2个终端,分别输入 appium 就可以分别起2个appium桌面版,然后设置端口 即可 参考: https://blog.csdn.net/qq_15283475/article/detai ...

  6. 微服务之分布式跟踪系统(springboot+pinpoint)

    这篇文章介绍一下在微服务(springboot开发)的项目中使用pintpoint监控的过程及效果展示. 背景 随着项目微服务的进行,微服务数量逐渐增加,服务间的调用也越来越复杂,我们急切需要一个AP ...

  7. Java-Runoob-高级教程-实例-数组:11. Java 实例 – 删除数组元素

    ylbtech-Java-Runoob-高级教程-实例-数组:11. Java 实例 – 删除数组元素 1.返回顶部 1. Java 实例 - 删除数组元素  Java 实例 以下实例演示了如何使用 ...

  8. 学习笔记之深度学习(Deep Learning)

    深度学习 - 维基百科,自由的百科全书 https://zh.wikipedia.org/wiki/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0 深度学习(deep lea ...

  9. CDN上的缓存刷新、缓存预热是怎样的使用场景?

    缓存刷新 源站内容更新后,希望用户可以获取到最新资源,CDN租户可以通过提交刷新请求将CDN节点上指定的缓存内容强制过期.当用户再次访问时,CDN节点将回源获取已更新内容返回给用户并在节点缓存最新资源 ...

  10. [UE4]事件驱动的UI更新:事件调度器

    事件调度器就是一个“事件中介”,可以被调用和被关注.