【问题标题】:CSS3 transform rotate without overriding transform translate [duplicate]CSS3变换旋转而不覆盖变换翻译[重复]
【发布时间】:2015-06-09 08:41:01
【问题描述】:

假设我有一个元素已经应用了翻译:

<div class="elem"></div>

.elem { transform: translate(50%,0); }

现在我想使用一个额外的类来旋转同一个元素。所以现在 HTML 和 CSS 看起来像这样:

<div class="elem rotate"></div>

.elem { transform: translate(50%,0); }
.rotate { transform: rotateZ(20deg); }

当旋转没有添加到现有的翻译中,而是覆盖和否定它时,就会出现问题。

如何保留原始翻译,而不必像下面那样膨胀我的代码:

.elem { transform: translate(50%,0); }
.rotate { transform: translate(50%,0) rotateZ(20deg); }

这是一个小提琴: https://jsfiddle.net/timothyzhu/vm84vsj7/

谢谢大家。

【问题讨论】:

  • 从上面看来,很明显“腹胀”会更快
  • 为什么你更喜欢 HTML/类膨胀而不是 CSS 膨胀?真的有区别吗? transform 属性没有默认值,因此您必须详细说明要转换的内容或最终覆盖声明。
  • 这很糟糕。我希望使用一系列进行各种翻译的类,并将它们与另一系列进行各种旋转的类结合起来。但由于压倒一切的影响,我想我必须做一些黑客才能让它工作。

标签: css transform


【解决方案1】:

在元素上设置transform 属性将覆盖之前在同一元素上设置的任何其他transform 属性。

在这种情况下,一种常见的模式是使用 JS 存储值,然后在考虑到先前的转换属性的情况下应用转换(也因为转换的顺序很重要!!)。

在您的场景中,一种解决方法可能是创建一个仅用于旋转的包装 div(here's a complicated example 使用开发工具查看它),

fiddle

【讨论】:

  • 您的解决方法有效。我希望保持我的 HTML 干净。
  • 我知道没有干净的方法
  • 小提琴 404'd 在我身上
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-30
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
  • 2014-06-22
  • 1970-01-01
相关资源
最近更新 更多