深入了解 skew() 函数

2024-03-05

我真的需要了解如何skew(xdeg)函数有效所有研究似乎都没有解释 x 角度如何影响其他点并像这样扭曲它,我需要知道是否有任何数学公式或一种方法可以预期使用特定角度的结果。

附:我已经阅读了大量文档,其中最好的一个是DevDocs其中说

这种变换是一种剪切映射(横断面),会扭曲 元素内的每个点与水平方向成一定角度 垂直方向。每个点的坐标都由 与指定角度和到目标的距离成比例的值 起源;因此,一个点离原点越远,意志力就越大 是它的附加值。

但没有进一步解释给定角度将如何影响元素中的这些点。

在 SVG 书中,它通过说它按特定值推动水平线或垂直线来解释倾斜,但我不明白如何deg值被转换为偏移量一


要了解如何skew让我们将它与使用角度的另一个转换进行比较。

这是一个旋转的例子,我们将变换原点设为top left从那里我们旋转45deg:

.box {
  margin:50px;
  width:200px;
  height:200px;
  background:blue;
}
.box > div {
  height:100%;
  width:100%;
  background:rgba(255,0,0,0.5);
  transform-origin:top left;
  transform:rotate(45deg);
}
<div class="box">
  <div></div>
</div>

对于这个例子,找到角度及其工作原理在某种程度上是微不足道的:

现在我们以相同的示例为例,将旋转后的元素的高度减小到一个较小的值:

.box {
  margin:50px;
  width:200px;
  height:200px;
  background:blue;
}
.box > div {
  height:3px;
  width:100%;
  background:red;
  transform-origin:top left;
  transform:rotate(45deg);
}
<div class="box">
  <div></div>
</div>

就像我们有一条旋转的线。现在让我们用倾斜代替旋转:

.box {
  margin:50px;
  width:200px;
  height:200px;
  background:blue;
}
.box > div {
  height:3px;
  width:100%;
  background:red;
  transform-origin:top left;
  transform:skewY(45deg);
}
<div class="box">
  <div></div>
</div>

如果我们比较这两个结果,我们会注意到在这两种情况下我们都有某种旋转,但在倾斜变换时大小不同:

现在更清楚倾斜如何与角度一起工作。变换是一种失真,依赖于角度来定义这种失真。这是一个更好的说明:

蓝色是我们的初始元素,十字是变换原点,黄色是角度。如果我们进行旋转,我们将得到红线,其中宽度保持不变。如果我们进行倾斜,我们将得到橙色线,其中宽度会改变考虑到插图,它将等于W / cos(angle) Where W是我们的初始宽度(在我们之前的例子中cos(45deg) = 1 / sqrt(2)所以我们会有W * sqrt(2)).


现在我们的初始正方形怎么样,它在倾斜时会如何表现?

.box {
  margin:50px;
  width:200px;
  height:200px;
  background:blue;
}
.box > div {
  height:100%;
  width:100%;
  background:red;
  transform-origin:top left;
  transform:skewY(45deg);
}
<div class="box">
  <div></div>
</div>

它的行为与我们之前描述的完全一样逐行。如果我们在另一个方向应用倾斜,我们也会得到相同的结果:

.box {
  margin:50px;
  width:200px;
  height:200px;
  background:blue;
}
.box > div {
  height:100%;
  width:100%;
  background:red;
  transform-origin:top left;
  transform:skewX(45deg);
}
<div class="box">
  <div></div>
</div>

The same logic is applied but to vertical lines and considering the height. As a side note, skewX(V) is the same as skew(V)ref https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/skew.

现在,如果我们在两个方向上应用倾斜:

.box {
  margin:50px;
  width:200px;
  height:200px;
  background:blue;
}
.box > div {
  height:100%;
  width:100%;
  background:red;
  transform-origin:top left;
  transform:skew(45deg,10deg);
}
<div class="box">
  <div></div>
</div>

就像我们首先申请skewX扭曲垂直线然后我们应用skewY到新形状以扭曲水平线(或相反)。这是一个动画来说明神奇的结果skew(45deg,45deg):

.box {
  margin:50px;
  width:200px;
  height:200px;
  background:blue;
}
.box > div {
  height:100%;
  width:100%;
  background:red;
  transform-origin:top left;
  transform:skew(45deg,10deg);
  animation:change 5s infinite alternate linear;
}
@keyframes change {
  from {
    transform:skew(0deg,0deg);
  }
  50% {
    transform:skew(45deg,0deg);
  }
  to {
    transform:skew(45deg,45deg);
  }
}
<div class="box">
  <div></div>
</div>

那么起源呢?转换不会改变任何内容,只有参考会改变。换句话说,固定点会移动:

.box {
  margin:50px;
  width:200px;
  height:200px;
  background:blue;
}
.box > div {
  height:100%;
  width:100%;
  background:red;
  transform-origin:center;
  transform:skew(45deg,10deg);
  animation:change 5s infinite alternate linear;
}
@keyframes change {
  from {
    transform:skew(0deg,0deg);
  }
  50% {
    transform:skew(45deg,0deg);
  }
  to {
    transform:skew(45deg,45deg);
  }
}
<div class="box">
  <div></div>
</div>

我们还可能注意到,如果我们向一个方向倾斜,则只有一个参数transform-origin会被考虑。

So for skewX, transform-origin: X Y无论值如何,都将相同X是。这在某种程度上解释了逐行转变就像我们上网时我们只有一个维度一样。

.box {
  margin:50px;
  width:200px;
  height:200px;
  background:blue;
}
.box > div {
  height:100%;
  width:100%;
  background:red;
  transform:skewX(45deg);
  animation:change 5s infinite alternate linear;
}
@keyframes change {
  from {
    transform-origin:0 0;
  }
  50% {
    transform-origin:100% 0;/*nothing will happen between 0 and 50%*/
  }
  to {
    transform-origin:100% 100%;
  }
}
<div class="box">
  <div></div>
</div>

更深入

现在让我们考虑一下矩阵计算,以了解它的使用方式以及如何使用tan(angle)也被使用。

如果我们参考文档 https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/skew我们有:

该矩阵用于根据初始元素的坐标逐点定义变换后元素的坐标。考虑到这个定义,我们将得到这些方程

Xf = Xi + Yi * tan(ax)
Yf = Xi * tan(ay) + Yi

如果我们考虑skewY只是很清楚的是ax0 thus tan(0)0 and X不会改变,我们的第一个例子就是这种情况,我们只在 Y 轴上有扭曲(如果我们只应用 skewY,则逻辑相同)。

现在,为什么我们有Yf = Xi * tan(ay) + Yi?

让我们重新看一下前面的例子:

绿点是由下式定义的初始点Xi,Yi红点是由下式定义的变换后的点Xf,Yf。这是微不足道的Xf=Xi两点之间的距离为Yf-Yi.

考虑到这个例子,我们可以清楚地说tan(ay) = (Yf-Yi)/Xi = (Yf-Yi)/Xf因此我们将有:

Xf = Xi 
Yf = Xi * tan(ay) + Yi

如果我们向另一个方向倾斜,我们将应用相同的逻辑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深入了解 skew() 函数 的相关文章

  • 如何在jqplot中显示饼图之外的标签?

    Jqplot 有如下图表 jqplot 图表 http www jqplot com tests pie donut charts php 我的问题是如何在 a 之外显示标签jqplot chart像下面这样high chart 高图表可以
  • 根据变量值将 LESS 编译为多个 CSS 文件

    有一个指定颜色的变量variables less文件 例如 themeColor B30F55 和一个 json构成实体列表的文件 其中每个键是一个实体 ID 键的值是该实体的颜色 例如 8ab834f32 B30F55 3cc734f31
  • CSS:水平滚动时背景不存在

    好的 我的背景设置如下 HTML div div CONTENT HERE div div CSS container background url image gif content width 800px margin auto 因此
  • 如何隐藏 URL 中的锚标记

    如何隐藏地址栏中以下链接 href 的哈希值 a href index php dev name 所以它会将我重定向到index php dev name 但我希望地址栏只显示index php 您可以使用 Javascript oncli
  • CSS设置默认滚动位置

    有没有办法将滚动位置设置为默认值 我知道如何在 javascript 中做到这一点 例如使用 jquery div divWithScroll attr scrollTop 200 但我只想用CSS来做 我不知道是否可行 不 CSS 中没有
  • 使用 jQuery 清除 IMG

    我正在尝试从 a 中删除加载的图像 img 元素 但清除或删除 src 不会执行此操作 该怎么办 HTML img src https www google com images srpr logo3w png JQUERY img att
  • 如何将udp发送到udp node.js服务器?

    我对此很陌生 所以我真的不知道我在做什么 但我已经设置了一个 node js udp 服务器 我想从客户端 来自网站 向它发送一个数据包 但我不知道如何在 javascript 中做到这一点 或者是否可能 我不是在研究如何从 Node js
  • Textmate“注释”命令对于 css 代码无法正常工作

    当我在 TextMate 中切换 CSS 源代码的注释时遇到一些问题 Using the shortcut CMD I activate the Comment Line Selection command from the source
  • 来自 JSON 的 Angular 8 动态表单

    我正在尝试从 JSON 模式递归生成动态表单 但我正在努力解决找不到表单控件的问题 这是代码示例 我收到这个错误 错误错误 找不到名称为 createdAt 的控件 我尝试了不同的方法 但仍然存在问题 我知道我错过了一些东西 所以请帮忙 任
  • VBA / HTML / jQuery 选择自动完成 - 在列表中选择

    我正在尝试使用 Excel 中的 VBA 在网站的列表中选择一个值 这不是一个 正常列表 该网站使用 jQuery 选择自动完成 如下所示 example http davidwalsh name demo jquery chosen ph
  • jquery 验证错误位置

    这看起来很简单 但我无法弄清楚 我正在使用 jquery 验证插件 我验证所有文件 但我想要的是在输入文本行中显示验证消息警报 例如在电子邮件输入中 请填写电子邮件地址 但现在它出现在所有字段下 在我的html中
  • 动画进度元素值

    我有一个progress元素 该元素如下所示 div class container div div div
  • 如何为背景图像添加边距?

    我想向背景图像添加边距 以便将其与屏幕中间保持距离 但将其添加到该类中会为整个主体添加边距 body poppage background url Imagenes tip3 png 50 200px no repeat E2E4E9 我怎
  • 按百分比设置 bootstrap 模态身高

    我正在尝试制作一个带有主体的模态 当内容变得太大时 该主体会滚动 但是 我希望模式能够响应屏幕尺寸 当我将最大高度设置为 40 时 它没有任何效果 但是 如果我将最大高度设置为 400px 它会按预期工作 但不会响应 我确信我只是错过了一些
  • 如何更改 Bootstrap 3 div 列顺序

    正在做我的第一个响应式设计 在 Bootstrap 3 中可能会出现类似的情况 在 lg 上更改此设置 a b c sm 上的这个 a c b 您可以使用两个 div 一个用于第一类型的布置 另一个用于第二类型的布置 第一个仅在 lg 中显
  • 我可以停止 :hover 应用于元素吗?

    假设我有一些 CSS button hover font weight bold 我怎样才能防止 hover随意应用样式 我的目标用例是当元素被禁用时 例如 使用这个 HTML
  • Twitter 嵌入时间轴小部件

    我继续下载http platform twitter com widgets js http platform twitter com widgets js And the http platform twitter com embed t
  • 为什么“tbody”不设置表格的背景颜色?

    我在用 tbody 作为 CSS 选择器来设置background color在一个表中 我这样做是因为我有多个 tbody 表内的部分 它们具有不同的背景颜色 我的问题是 当使用border radius在细胞上 细胞不尊重backgro
  • 防止文本区域出现新行

    我正在开发聊天功能 使用 Vue 并使用文本区域作为输入 以便溢出换行 并且对于编写较长消息的用户来说更具可读性 不幸的是 当用户按下 Enter 键并提交时 光标会在提交之前移动到新行 从而使用户体验感觉不佳 关于如何使用普通 Javas
  • 闪亮井板宽度

    library shiny library shinydashboard ui lt dashboardPage dashboardHeader dashboardSidebar dashboardBody wellPanel tags d

随机推荐

  • @ResourceMapping 接受来自 Ajax 请求的 JSON

    我正在搜索如何解释 Spring Portlet MVC 中 ResourceMapping 中的 JSON 参数 当我添加 RequestBody时 我收到消息 不支持 RequestBody 真的卡在这个上了 我有这个 查看侧面
  • 为什么在回调中调用 ViewModel 时会发生重组?

    我完全混淆了撰写概念 我有一个代码 Composable fun HomeScreen viewModel HomeViewModel getViewModel Scaffold val isTimeEnable by viewModel
  • MERN Stack - Express 和 React 在同一端口上?

    我正在开发一个使用 MERN MongoDB Express React Node 堆栈的项目 在将数据从 React 组件内的表单发布到 Node js 中定义的 API 端点时遇到问题 当我提交表单时 浏览器仅显示 无法发布 错误 我非
  • Hibernate 说该表不存在,但它确实存在

    我遇到 Hibernate 抛出以下错误的问题 com mysql jdbc exceptions jdbc4 MySQLSyntaxErrorException Table Library book doesn t exist 我的依赖设
  • 如何将 iOS 应用程序限制为仅适用于 4 英寸屏幕设备?

    Xcode 中是否有一个设置可以让我声明我的应用程序仅支持 4 英寸屏幕设备 iPhone 5 和最新的 iPod Touch Nope 由于 iOS 7 支持 3 5 英寸屏幕的设备 因此您不能使用 only support iOS x
  • PyTorch 无法检测 CUDA

    我在 PyTorch 上运行 CNN torch cuda is available 函数返回 false 并且未检测到 GPU 不过 我可以使用 GPU 运行 Keras 模型 这是我的系统信息 操作系统 Ubuntu 18 04 3 P
  • 为什么双向 ManyToOne 会导致 Hibernate 中的循环依赖?

    我的项目中有实体 基于Spring Boot Hibernate Entity Table name user account public class UserAccount Id GeneratedValue strategy Gene
  • Angularjs 在控制器之间共享方法

    我有一个应用程序 它在一个页面 主页 上显示新闻提要 在另一个页面上仅显示用户的提要 用户个人资料页面 两个页面的外观和行为方式相同 内容的变化是由于调用了不同的URL 在AngularJS中如何解决这个问题 我有一个家庭控制器 它具有用于
  • 为什么使用 redux 来实现不可变状态

    我正在学习 redux 并且正在努力理解为什么状态必须是不可变的 您能否为我提供一个示例 最好是代码 其中打破不可变合约会导致不那么明显的副作用 Redux 最初是为了演示 时间旅行调试 的理念而发明的 能够在分派操作的历史记录中来回查看
  • Eclipse:如何刷新整个工作区? F5 不行

    我有一个包含一堆 java 项目的工作区 如果我去File gt Refresh 它并没有真正刷新任何内容 可能是当前选择的项目 如何让 eclipse 刷新all的项目 It will indeed only refresh the cu
  • Java8的Collection.parallelStream如何工作?

    Collection类带有一个新方法 parallelStream 在 Java SDK 8 中 显然 这种新方法提供了一种并行消费集合的机制 但是 我想知道Java是如何实现这种并行性的 其根本机制是什么 它只是多线程执行吗 或者 for
  • 为什么 WCF 有时会在生成的代理类型末尾添加“Field”?

    基本上 我有一个带有成员 X 和 Y 的服务器端类型 Foo 每当我使用 Visual Studio 的 添加服务器引用 时 我都会看到 WSDL 和生成的代理都将单词 Field 附加到所有成员并更改第一个字母的大小写 IE 中 X 和
  • 多处理 - 使用管理器命名空间来节省内存

    我有几个进程 每个进程都完成需要单个大 numpy 数组的任务 这只是被读取 线程正在搜索适当的值 如果每个进程都加载数据 我会收到内存错误 因此 我试图通过使用管理器在进程之间共享相同的数组来最小化内存使用量 但是我仍然收到内存错误 我可
  • 在 Python 中替换 XML 元素

    我试图用一组新的坐标替换 bbox 内部的元素 我的代码 import element tree import xml etree ElementTree as ET import xml file tree ET parse C high
  • 如何使用 argparse 为参数创建可选值?

    我正在创建一个 python 脚本 我想要一个参数来控制作为输出获得的搜索结果数量 我目前已命名该参数 head 这是我希望它具有的功能 When head未在命令行中传递我希望它默认为一个值 在这种情况下 一个相当大的 比如 80 Whe
  • 通过 FFmpeg 将过滤器添加到 Instagram 或 Snapchat 等视频

    我在用FFmpeg在我的 Android 应用程序中 我已经在视频上成功实现了以下滤镜 效果 反转颜色 黑与白 Sepia Vignette 伽玛效应 我关注了 FFmpeg 视频过滤器文档 还有类似的问题 https stackoverf
  • Azure AD B2C 在用户中导入

    我需要创建一个 B2C 目录并使用该图从旧的基于 NET 会员资格的应用程序导入成员 所以我遵循了这个教程https learn microsoft com en us azure active directory b2c active d
  • 高速高效更新 QTableView

    我使用带有 QItemDelegate 子类的 QTableView 来控制表视图单元格的外观和感觉 每个单元格显示外部连接设备的名称和状态 一次最多可以连接 100 个设备 每个设备的名称和类型本质上是静态的 很少更新 可能每小时一次 但
  • mongodb num_rows 相当于 php

    我怎样才能得到结果的数量 相当于num rows mysqli 在mongodb 如果我有 db gt dbName gt find array email gt newemail password gt newpass 检查符合此条件的结
  • 深入了解 skew() 函数

    我真的需要了解如何skew xdeg 函数有效所有研究似乎都没有解释 x 角度如何影响其他点并像这样扭曲它 我需要知道是否有任何数学公式或一种方法可以预期使用特定角度的结果 附 我已经阅读了大量文档 其中最好的一个是DevDocs其中说 这