当前位置: 首页 > 面试题库 >

使用翻译模拟转换原点

狄旭
2023-03-14
问题内容

我想模拟在CSS 中transform-origin使用的属性transform: translate

根据MDN,这很有可能:

通过首先使用属性的取反值转换元素,然后应用元素的变换,然后通过属性值进行转换,来应用此属性。

但是,当我尝试时,会得到不正确的结果。这两个矩形显然不相同:

.origin {

  transform-origin: 100px 100px;

  transform: translate(100px, 0px) scale(2) rotate(45deg);

}



.translate {

  transform: translate(-100px, -100px) translate(100px, 0px) scale(2) rotate(45deg) translate(100px, 100px);

}



.box {

  background-color: red;

  width: 100px;

  height: 100px;

}



.container {

  float: left;

  margin: 100px;

  width: 250px;

  height: 250px;

  background-color: rgba(0, 0, 0, 0.1);

}


<div class="container">

  <div class="box origin">

  </div>

</div>



<div class="container">

  <div class="box translate">

  </div>

</div>

我已经尝试了很长时间没有运气寻找答案了,在我看来,这应该是相对简单的,我只是想不通。


问题答案:

您几乎不错,但是有两个错误。您需要反转翻译,并且需要更改transform-origin第二个翻译的翻译。

如果您查看文档,你会看到,参考使用翻译的原点是左上角的元素的角落和改造的默认值起源center。因此,我们需要为两者提供相同的参考。

.origin {

  transform-origin: 50px 50px;

  transform:  rotate(45deg) scale(2);

}

.translate {

  transform-origin:0 0;

  transform:translate(50px, 50px) rotate(45deg) scale(2) translate(-50px, -50px);

}

.box {

  background-color: red;

  width: 50px;

  height: 50px;

}

.container {

  display: inline-block;

  margin: 30px;

  width: 150px;

  height: 150px;

  background-color: rgba(0,0,0,0.1);

}


<div class="container">

  <div class="box origin">

  </div>

</div>

<div class="container">

  <div class="box translate">

  </div>

</div>

这是从规范:

转换矩阵是根据 transformtransform-origin 属性计算的,如下所示:

  1. 从身份矩阵开始。

  2. 通过计算的变换原点的X和Y进行翻译

  3. **从左到右 分别 乘以* 变换属性中的每个变换函数 *

  4. 通过 求反 的转换原点的X和Y值进行转换

您需要注意措辞!您可能会发现MDN与规范矛盾,但事实并非如此,这仅仅是因为平移 元素 (如MDN中所述)与平移 元素原点
或局部坐标(如规范中所述)之间存在差异)。

例如,将元素平移-50px等效于将其局部坐标(原点)平移+ 50px。

您还需要注意 “从左到右相乘”, 因为这可能会造成混乱。如果我们在示例3中引用相同的规范,则我们具有:

div {
  height: 100px; width: 100px;
  transform: translate(80px, 80px) scale(1.5, 1.5) rotate(45deg);
}

此转换会在X和Y方向上将 本地坐标 系统 平移 80个像素,然后应用150%的比例,然后绕Z轴顺时针旋转45°。
可以通过反向应用这些变换来解释对元素渲染的影响 :先旋转元素,然后缩放,然后平移元素。

因此,从左向右相乘并不意味着从左向右相乘,这在某种程度上解释了反转您用于模拟的翻译的必要性transform-origin



 类似资料:
  • 问题内容: 当使用英雄图像或全屏显示时,我通常会看到带有以下CSS的文本或图像: 有人可以向我解释此代码的实际作用吗? 问题答案: 之所以需要这样做,是因为您希望 元素 的中心与父 元素 的中心对齐。简单来说,可以归结为,这意味着: 沿x轴向左移动我宽度的50%,并且 沿y轴将我向上移动我身高的50% 这有效地将元素的中心移动到其原始的左上角。请记住,而不是在元素上进行设置时,您要将其左上角移至其

  • 我有一个工作实体,它有一个字段(类型为ArrayCollection),该字段与doctrine映射到一个类型为array的列。 现在我需要这个字段是可翻译的(条令行为),但在获取未翻译的区域设置时,我得到一个无法将数据库值“”转换为条令类型的数组ConversionException。 如何保持数组的功能并使其可翻译? 转换异常 无法将数据库值“”转换为条令类型数组 异常堆栈跟踪:pastebi

  • 实际上,我试图增加PDPage对象的cropbox。好吧,没有挑战。但页面内容仍保留在CropBox的左下角。我要它集中在新的cropbox空间。 我知道所有的内容是绝对定位在PDF。所以我的问题是:有没有一种方法使用PDFBox来翻译我的PDPage的原点(x,y)或者内容元素? 问候 汉斯

  • 您可使用 Google Translate™ 应用程式翻译词组: 按下侧边电源按钮打开应用程式菜单,找到并轻触Translate(翻译)。 您将看到翻译源语言与目标语言这两种语言。您可通过轻触某一语言的名称来更改语言。 轻触“麦克风”图标并说出您想翻译的词组。 译文将显示在屏幕上。

  • 一段时间以来,我一直在尝试如何翻转pdf,但还没有找到答案。我只找到了如何使用Graphics2D翻转图像: 你能帮我用PDFbox拿一下吗? 谢谢

  • 我不是在问AffineTransform是如何工作的,而是如何使用它的翻译方法。 我多次阅读API,但仍然不明白它是如何工作的。 公共空转换(双tx,双ty) 将此转换与翻译转换连接起来。这相当于调用concatenate(T),其中T是由以下矩阵表示的AffineTransform: 问题: