惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
云风的 BLOG
云风的 BLOG
IT之家
IT之家
The Register - Security
The Register - Security
博客园_首页
博客园 - 聂微东
MongoDB | Blog
MongoDB | Blog
Blog — PlanetScale
Blog — PlanetScale
The GitHub Blog
The GitHub Blog
博客园 - 【当耐特】
腾讯CDC
F
Full Disclosure
F
Fortinet All Blogs
T
The Blog of Author Tim Ferriss
Google DeepMind News
Google DeepMind News
Recorded Future
Recorded Future
MyScale Blog
MyScale Blog
T
Tailwind CSS Blog
Jina AI
Jina AI
月光博客
月光博客
A
About on SuperTechFans
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Help Net Security
博客园 - Franky
Vercel News
Vercel News
美团技术团队
C
CERT Recently Published Vulnerability Notes
Security Latest
Security Latest
Scott Helme
Scott Helme
P
Proofpoint News Feed
博客园 - 三生石上(FineUI控件)
www.infosecurity-magazine.com
www.infosecurity-magazine.com
SecWiki News
SecWiki News
The Last Watchdog
The Last Watchdog
U
Unit 42
The Cloudflare Blog
N
News and Events Feed by Topic
T
Threat Research - Cisco Blogs
TaoSecurity Blog
TaoSecurity Blog
T
Tenable Blog
V
Vulnerabilities – Threatpost
GbyAI
GbyAI
B
Blog
Webroot Blog
Webroot Blog
A
Arctic Wolf
S
SegmentFault 最新的问题
aimingoo的专栏
aimingoo的专栏
AWS News Blog
AWS News Blog
I
Intezer
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

博客园 - 进军的蜗牛

浏览器音频入门:录音生成 PCM、单声道/立体声、采样率、转 MP3 Web 语音场景下多路麦克风采集与音量异常:成因与两种工程取舍 从一次权限错误,彻底搞懂Mac权限管理那些事 js实现svga编辑器 Chrome浏览器普通模式访问页面报错 ERR_CONNECTION_REFUSED 问题排查 Web语音聊天室中录音无声问题分析与解决方案 蓝湖SVG上传Iconfont阿里图标库部分元素缺失问题分析与解决方案 前端测试新体验:Cypress让UI测试变得如此简单 iOS H5页面高度闪烁问题与100vh兼容性详解 为什么录音生成的音频文件有时长但没声音?—— 一次音频采集问题的排查与解决 前端实现采集图片某个区域的颜色色值 浏览器多Tab间通信方法全面总结:从WebView需求出发的技术方案 pcm文件转为mp3并播放 github https方式 push无法提交代码的处理方法 前端如何计算js代码执行时长 基于swiper和animate.css的全屏H5动效和花瓣飘落效果 混合开发H5页面的数字字体在IOS 安卓上显示不一样 node基于自签名证书搭建https服务 ios系统上h5页面点击播放audio标签声音有延迟问题处理 基于svelte webpack开发umd格式的npm包
CSS运动路径offset-path之path的语法解析
进军的蜗牛 · 2024-01-08 · via 博客园 - 进军的蜗牛

原文链接:https://www.cnblogs.com/yalong/p/17932883.html

CSS运动路径offset-path之path的语法解析

CSS运动路径是干啥的?

CSS运动路径 英文全名是 CSS Motion Path;
用这个属性,我们可以控制元素按照特定的路径进行位置变换的动画, 并且,这个路径可以是非常复杂的一条路径。
由于是css动画,所以动画的性能也比较高,动画流畅,画面不卡, 在实现控制物体按照制定路径运动效果的时候,这个是首选。

CSS运动路径的属性有哪些,都是什么意思?

  • offset-path:接收一个 SVG 路径(其实就是SVG中的Path),以此来确定运动路径
  • offset-distance:控制当前元素基于 offset-path 运动的距离, 0%就是开始位置, 100%就是走到路径的终点
  • offset-position:指定 offset-path 的初始位置
  • offset-anchor:定义沿 offset-path 定位的元素的锚点。 这个也算好理解,运动的元素可能不是一个点,那么就需要指定元素中的哪个点附着在路径上进行运动
  • offset-rotate:定义沿 offset-path 定位时元素的方向,说人话就是运动过程中元素的角度朝向

网上用css路径实现的各种效果案例很多, 这里就不多叙述了,需要的可以自行网上查阅;

这里面最重要的就是 offset-path, 而 offset-path 其实就是一个SVG路径

那么path的语法,其实就是svg路径的语法

简单语法类型

  • M x,y 移动到绝对坐标x,y
  • m x,y 向右移动x,向下移动y(如果为负值,则向左和向上移动)
  • L x,y 画一条到绝对坐标(x,y)的直线
  • l x,y 画一条直线到一个点,这个点相对于右x和下y(如果是负值,则向左和向上)
  • H x 画一条水平线 到精确的坐标x上
  • h x 相对于右x水平画一条线(如果为负值则向左)
  • V y 画一条垂直于坐标y的直线
  • v y 垂直向下画一条相对位置的线(如果是负值,则向上)
  • Z (or z) 画一条直线回到路径的起点
  • C x1,y1 x2,y2, x3,y3 贝斯曲线(绝对位置)
  • c x1,y1 x2,y2, x3,y3 贝斯曲线(相对位置)

复杂语法类型

  • C cX1,cY1 cX2,cY2 eX,eY 基于两个贝塞尔控制点画一个贝斯曲线,并在指定坐标处结束
  • c 跟C一样,不过所有的相对值都是一样的
  • S cX2,cY2 eX,eY 基本上是一个C命令,它假定第一个贝塞尔控制点是前一个S或C命令中使用的最后一个贝塞尔点的反射
  • s 跟S一样,不过位置都是相对位置
  • Q cX,cY eX,eY 基于单个贝塞尔控制点绘制的贝塞尔曲线,并在指定坐标处结束
  • q 跟大写的一样,不过都是相对位置
  • T eX,eY 基本上是一个Q命令,它假定第一个贝塞尔控制点是前一个Q或T命令中使用的最后一个贝塞尔点的反射
  • t 跟大写的一样,不过都是相对位置
  • A rX,rY rotation, arc, sweep, eX,eY 画一个基于椭圆曲线的弧。首先定义椭圆的宽度和高度。然后是椭圆的旋转。加上终点,这就形成了两个可能的椭圆。所以弧度和扫描值要么为0,要么为1,这决定了它将走哪个椭圆和哪条路径。
  • a eX和eY的相对值也是一样

总的来说,大写的都是绝对位置,小写的都是相对位置

可以用下面几个路径练习,熟悉下对相关的语法

M2 1 h1 v1 h1 v1 h-1 v1 h-1 v-1 h-1 v-1 h1 z

M10,80 q100,120 120,20 q140,-50 160,0

这里有个在线的svg路径编辑器,可以在上面验证这些语法 SVG在线编辑器

下面这些就不截图了,可以自己复制到编辑器试试

<svg viewBox="0 0 10 10" class="svg-1">
  <path d="M2,2 L8,8" />
</svg>

<svg viewBox="0 0 10 10" class="svg-2">
  <path d="M2,8 L5,2 L8,8" />
</svg>

<svg viewBox="0 0 10 10" class="svg-3">
  <path d="M2,2 Q8,2 8,8" />
</svg>

<svg viewBox="0 0 10 10" class="svg-4">
  <path d="M2,5 C2,8 8,8 8,5" />
</svg>

<svg viewBox="0 0 10 10" class="svg-5">
  <path d="M2,2 L8,2 L2,5 L8,5 L2,8 L8,8" />
</svg>

<svg viewBox="0 0 10 10" class="svg-6">
  <path d="M2,5 A 5 25 0 0 1 8 8" />
</svg>

<svg viewBox="0 0 10 10" class="svg-7">
  <path d="M2,5 S2,-2 4,5 S7,8 8,4" />
</svg>

<svg viewBox="0 0 10 10" class="svg-8">
  <path d="M5,2 Q 2,5 5,8" />
</svg>

<svg viewBox="0 0 10 10" class="svg-9">
  <path d="M2,2 Q5,2 5,5 T8,8" />
</svg>

浏览器兼容性也可以:

参考:
https://css-tricks.com/svg-path-syntax-illustrated-guide/?source=post_page-----7c86994139f--------------------------------
https://juejin.cn/post/6956030985251061791
https://yqnn.github.io/svg-path-editor/