<html>
<head>
<meta charset="utf8">
<style>
:root {
--border-anim-size: 10em
--border-anim-width: calc(var(--border-anim-size) / 20)
--border-anim-width-double: calc(var(--border-anim-width)*2)
--border-anim-duration: 5s
--border-anim-border-color: gray
--border-anim-hover-color: LightCoral
}
body {
display: flex
}
.border-anim {
width: var(--border-anim-size)
height: var(--border-anim-size)
position: relative
border: 1px solid var(--border-anim-border-color)
}
.border-anim::before, .border-anim::after {
content: ''
position: absolute
border: var(--border-anim-width) solid var(--border-anim-border-color)
/* 让边框在内容区域内绘制 */
box-sizing: border-box
transition: background-color 1s
}
.border-anim::before {
animation: anim-border-run calc(var(--border-anim-duration) * 2) linear infinite
}
.border-anim::after {
animation: anim-border-run calc(var(--border-anim-duration) * 2) calc(var(--border-anim-duration) / -1) linear infinite
}
.border-anim:hover::before, .border-anim:hover::after {
background-color: var(--border-anim-hover-color)
}
.border-anim-content {
width: calc(100% - var(--border-anim-width-double))
height: calc(100% - var(--border-anim-width-double))
margin: var(--border-anim-width)
border: 1px solid var(--border-anim-border-color)
}
@keyframes anim-border-run {
/* 这里将动画分成了4步;也可以改为2步,这时before和after用的就要是两套keyframes了 */
from, to {
width: var(--border-anim-width-double)
height: 100%
top: 0
left: 0
}
25% {
width: 100%
height: var(--border-anim-width-double)
top: calc(100% - var(--border-anim-width-double))
left: 0
}
50% {
width: var(--border-anim-width-double)
height: 100%
top: 0
left: calc(100% - var(--border-anim-width-double))
}
75% {
width: 100%
height: var(--border-anim-width-double)
top: 0%
left: 0%
}
/* 需要设置临界效果,否则会渐变 */
from, to, 24.9% {
border-left-color: var(--border-anim-border-color)
border-top-color: transparent
border-right-color: transparent
border-bottom-color: var(--border-anim-border-color)
}
25%, 49.9% {
border-left-color: transparent
border-top-color: transparent
border-right-color: var(--border-anim-border-color)
border-bottom-color: var(--border-anim-border-color)
}
50%, 74.9% {
border-left-color: transparent
border-top-color: var(--border-anim-border-color)
border-right-color: var(--border-anim-border-color)
border-bottom-color: transparent
}
75%, 99.9% {
border-left-color: var(--border-anim-border-color)
border-top-color: var(--border-anim-border-color)
border-right-color: transparent
border-bottom-color: transparent
}
}
</style>
<style>
.border-anim2 {
width: var(--border-anim-size)
height: var(--border-anim-size)
position: relative
border: 1px solid var(--border-anim-border-color)
}
.border-anim2-edge {
position: absolute
/* 必须把其他边框置0,否则有默认值存在 */
border: 0px solid var(--border-anim-border-color)
box-sizing: border-box
}
/*
注意:CSS中不能前向选择,而只能后向选择!
因为如果CSS支持了父选择器,那就必须要页面所有子元素加载完毕才能渲染HTML文档,
因为所谓“父选择器”,就是后代元素影响祖先元素,如果后代元素还没加载处理,如何影响祖先元素的样式?
于是,网页渲染呈现速度就会大大减慢,浏览器会出现长时间的白板。
*/
/* 波浪号和加号都是选择其后的元素,区别是加号只取一个,波浪取所有
.border-anim-content:hover ~ .border-anim2-edge { */
.border-anim2:hover >.border-anim2-edge {
background-color: var(--border-anim-hover-color)
}
.border-anim2-left {
width: var(--border-anim-width-double)
height: 100%
left: 0
border-left-width: var(--border-anim-width)
animation: anim2-border-run-left var(--border-anim-duration) calc(var(--border-anim-duration) / -2) linear infinite
}
.border-anim2-top {
height: var(--border-anim-width-double)
width: 100%
top: 0
border-top-width: var(--border-anim-width)
animation: anim2-border-run-top var(--border-anim-duration) linear infinite
}
.border-anim2-right {
width: var(--border-anim-width-double)
height: 100%
right: 0
border-right-width: var(--border-anim-width)
animation: anim2-border-run-right var(--border-anim-duration) calc(var(--border-anim-duration) / -2) linear infinite
}
.border-anim2-bottom {
height: var(--border-anim-width-double)
width: 100%
bottom: 0
border-bottom-width: var(--border-anim-width)
animation: anim2-border-run-bottom var(--border-anim-duration) linear infinite
}
@keyframes anim2-border-run-left {
from, to {
height: 0
}
50% {
height: 100%
}
from, to, 49.9% {
top: 0
bottom: auto
}
50%, 99.9% {
top: auto
bottom: 0
}
}
@keyframes anim2-border-run-top {
from, to {
width: 0
}
50% {
width: 100%
}
from, to, 49.9% {
left: auto
right: 0
}
50%, 99.9% {
left: 0
right: auto
}
}
@keyframes anim2-border-run-right {
from, to {
height: 0
}
50% {
height: 100%
}
from, to, 49.9% {
top: auto
bottom: 0
}
50%, 99.9% {
top: 0
bottom: auto
}
}
@keyframes anim2-border-run-bottom {
from, to {
width: 0
}
50% {
width: 100%
}
from, to, 49.9% {
left: 0
right: auto
}
50%, 99.9% {
left: auto
right: 0
}
}
</style>
<style>
.border-anim3 {
width: var(--border-anim-size)
height: var(--border-anim-size)
position: relative
border: 1px solid var(--border-anim-border-color)
box-sizing: border-box
}
.border-anim3::before, .border-anim3::after {
content: ''
position: absolute
width: 100%
height: 100%
top: 0
left: 0
}
.border-anim3::before {
box-shadow: 0 0 0 var(--border-anim-width) var(--border-anim-border-color) inset
animation: anim3-border-run calc(var(--border-anim-duration) * 2) calc(var(--border-anim-duration) / -1) linear infinite
}
.border-anim3::after {
box-shadow: 0 0 0 var(--border-anim-width) var(--border-anim-border-color) inset
animation: anim3-border-run calc(var(--border-anim-duration) * 2) linear infinite
}
.border-anim3:hover::before, .border-anim3:hover::after {
/* 如果只在hover的时候设置transition,那么进入有效,但是退出无效(即退出时不会有缓动) */
transition: background-color 1s
background-color: var(--border-anim-hover-color)
}
@keyframes anim3-border-run {
/*
clip通过对元素进行剪切来控制元素的可显示区域(clip的区域显示,其他隐藏)
clip属性只能在元素设置了“position:absolute”或者“position:fixed”属性起作用
shape函数声明:rect(top right bottom left)
rect()和<top>和<bottom>指定偏移量是从元素盒子顶部边缘算起;<left>和<right>指定的偏移量是从元素盒子左边边缘算起(包括边框)。
如果<right>和<bottom>设置为auto时,他们就相当于元素的宽度(这个宽度包括元素的border、padding和width),或者简单的理解为100%
注意:1.值不能设置为百分比。 2.在动画设置过程里不能使用auto,使用auto没有动画效果(因此建议使用SCSS或者LESS之类的预处理器)
*/
/*
clip动画有3种方案,但是都有点小瑕疵(在线条粗的时候明显,线条细的情况下完全看不出来)
(1)使用如下的1和9作为边界,当拐弯的时候,尾部多余的边界会跟着动
(2)将下面的1和9替换为0和10,当拐弯的时候,线条宽度会变为0
(3)在每个状态后面一步立即重置它,但是会出现抖动
*/
from, to {
clip: rect(0, 1em, 10em, 0)
}
1% {
clip: rect(1em, 1em, 10em, 0)
}
25% {
clip: rect(9em, 10em, 10em, 0)
}
25.1% {
clip: rect(9em, 10em, 10em, 1em)
}
50% {
clip: rect(0, 10em, 10em, 9em)
}
50.1% {
clip: rect(0, 10em, 9em, 9em)
}
75% {
clip: rect(0, 10em, 1em, 0)
}
75.1% {
clip: rect(0, 9em, 1em, 0)
}
}
</style>
</head>
<body>
<section>
<h1>(1)通过两矩形的移动来制作动画</h1>
<div class="border-anim">
<div class="border-anim-content"></div>
</div>
</section>
<section>
<h1>(2)通过四个边框的长度来控制动画</h1>
<div class="border-anim2">
<div class="border-anim-content"></div>
<div class="border-anim2-edge border-anim2-left"></div>
<div class="border-anim2-edge border-anim2-top"></div>
<div class="border-anim2-edge border-anim2-right"></div>
<div class="border-anim2-edge border-anim2-bottom"></div>
</div>
</section>
<section>
<h1>(3)通过clip的裁剪来显示动画</h1>
<div class="border-anim3">
<div class="border-anim-content"></div>
</div>
<section>
</body>
</html>
对web开发技术感兴趣的同学,欢迎私信我加群,不管你是小白还是大牛我都欢迎,还有大牛整理的一套高效率学习路线和教程与您免费分享,同时每天更新视频资料。
最后,祝大家早日学有所成,拿到满意offer,快速升职加薪,走上人生巅峰
由于王者荣耀是一款手机游戏,邮件内容中不可使用大量的图片和动态效果,容易影响收件人的网络体验。此外,由于许多手机端邮件客户端对 HTML 语言的支持较少,开发者将无法自由地使用 HTML 语言创建复杂的交互功能,如 JavaScript、CSS、Flash 等,如果违反了这些有限的语法,可能会导致发送的邮件显示异常。一般的大型游戏开发不是单一用某一种软件语言的问题。一个大型游戏的开发需要非常大的团队用各种各样的语言和工具来完成。总结一下主要有C/C++,汇编语言,着色器语言,脚本语言,高效的开发语言C#或Java。首先一般的游戏开发架构(Windows平台)从底到顶一般是Direct X™——游戏引擎——游戏。大型游戏开发的大部分工作其实都是在编写游戏脚本,脚本是大型游戏得以如此高速开发和发布的主要原因。脚本化的开发让游戏开发摆脱了硬编码的种种弊端,让游戏内容可以轻易的修改和调试。比如比较流行的语言。,然后编写脚本将其组织成一个游戏,不需要什么底层的编程语言。Windows平台比较流行的方法是使用最新版本的Visual Studio,显卡厂商如NVIDIA也会为VS开发一些插件来简化显卡编程和调试。扩展资料:汇编语言为了克服机器语言难读、难编、难记和易出错的缺点,人们就用与代码指令实际含义相近的英文缩写词、字母和数字等符号来取代指令代码(如用ADD表示运算符号“+”的机器代码),于是就产生了汇编语言。所以说,汇编语言是一种用助记符表示的仍然面向机器的计算机语言。汇编语言亦称符号语言。汇编语言由于是采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。汇编语言的特点是用符号代替了机器指令代码。而且助记符与指令代码一一对应,基本保留了机器语言的灵活性。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。汇编语言中由于使用了助记符号,用汇编语言编制的程序送入计算机,计算机不能象用机器语言编写的程序一样直接识别和执行,必须通过预先放入计算机的 “汇编程序“的加工和翻译,才能变成能够被计算机识别和处理的二进制代码程序。用汇编语言等非机器语言书写好的符号程序称源程序,运行时汇编程序要将源程序翻译成目标程序。目标程序是机器语言程序,它一经被安置在内存的预定位置上,就能被计算机的CPU处理和执行。汇编语言像机器指令一样,是硬件操作的控制信息,因而仍然是面向机器的语言,使用起来还是比较繁琐费时,通用性也差。汇编语言是低级语言。但是,汇编语言用来编制系统软件和过程控制软件,其目标程序占用内存空间少,运行速度快,有着高级语言不可替代的用途。高级语言不论是机器语言还是汇编语言都是面向硬件的具体操作的,语言对机器的过分依赖,要求使用者必须对硬件结构及其工作原理都十分熟悉,这对非计算机专业人员是难以做到的,对于计算机的推广应用是不利的。计算机事业的发展,促使人们去寻求一些与人类自然语言相接近且能为计算机所接受的语意确定、规则明确、自然直观和通用易学的计算机语言。这种与自然语言相近并为计算机所接受和执行的计算机语言称高级语言。高级语言是面向用户的语言。无论何种机型的计算机,只要配备上相应的高级语言的编译或解释程序,则用该高级语言编写的程序就可以通用。如今被广泛使用的高级语言有BASIC、PASCAL、C、COBOL、FORTRAN、LOGO以及VC、VB等。这些语言都是属于系统软件。计算机并不能直接地接受和执行用高级语言编写的源程序,源程序在输入计算机时,通过“翻译程序”翻译成机器语言形式的目标程序,计算机才能识别和执行。这种“翻译”通常有两种方式,即编译方式和解释方式。编译方式是:事先编好一个称为编译程序的机器语言程序,作为系统软件存放在计算机内,当用户由高级语言编写的源程序输入计算机后,编译程序便把源程序整个地翻译成用机器语言表示的与之等价的目标程序,然后计算机再执行该目标程序,以完成源程序要处理的运算并取得结果。解释方式是:源程序进入计算机时,解释程序边扫描边解释作逐句输入逐句翻译,计算机一句句执行,并不产生目标程序。PASCAL、 FORTRAN、COBOL等高级语言执行编译方式;BASIC语言则以执行解释方式为主;而PASCAL、C语言是能书写编译程序的高级程序设计语言。每一种高级(程序设计)语言,都有自己人为规定的专用符号、英文单词、语法规则和语句结构(书写格式)。高级语言与自然语言(英语)更接近,而与硬件功能相分离(彻底脱离了具体的指令系统),便于广大用户掌握和使用。高级语言的通用性强,兼容性好,便于移植