【问题标题】:Understanding Cross Browser Transform & Origin了解跨浏览器转换和起源
【发布时间】:2016-09-12 16:33:38
【问题描述】:

我显然在这里遗漏了一些东西,希望有人可以为我填补关于跨浏览器 transformorigin 与 SVG 一起使用的空白。

所以问题的快速版本,为什么下面的示例在 Chrome 中看起来/工作正常,但 origin 在 Firefox 中搞砸了,而在 IE 中 transform 似乎根本不起作用? (红色的东西应该像在 Chrome 中一样均匀地环绕绿色椭圆,但适用于所有浏览器)。

我只是没有正确指定属性,缺少必要的前缀来转换 IE 吗?我从事桌面开发已经太久了,并且正在摆脱一些网络技能的生锈,所以我很感激你可能提供的任何谦虚的馅饼。 :)

CodePen

@keyframes rotateIT {
  0% {} 100% {
    transform: rotate(360deg);
    -webkit-transform: rotate(360deg);
    -ms-transform: rotate(360deg);
  }
}
@-webkit-keyframes rotateIT {
  0% {} 100% {
    transform: rotate(360deg);
    -webkit-transform: rotate(360deg);
    -ms-transform: rotate(360deg);
  }
}

#damnit {
  animation: rotateIT 3s ease infinite;
  transform-origin: center;
  -webkit-transform-origin: center;
}
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Yes, I left the objects off-center of canvas on purpose for this example of origin issues. -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="150px" height="150px" viewBox="0 0 150 150" enable-background="new 0 0 150 150" xml:space="preserve">
<circle fill="#00A651" cx="57.5" cy="55.5" r="25"/>
<g id="damnit">
	<path fill="#BE1E2D" d="M63,23.475c13.742,2.354,24.567,13.357,26.639,27.192h10.078C97.516,31.312,82.265,15.87,63,13.368V23.475z
		"/>
	<path fill="#BE1E2D" d="M25.361,50.667c2.105-14.059,13.247-25.2,27.306-27.306V13.283C33.088,15.51,17.51,31.088,15.283,50.667
		H25.361z"/>
	<path fill="#BE1E2D" d="M52.667,87.639C38.832,85.567,27.829,74.742,25.475,61H15.368c2.502,19.265,17.944,34.516,37.299,36.717
		V87.639z"/>
	<path fill="#BE1E2D" d="M89.525,61C87.21,74.52,76.52,85.21,63,87.525v10.106C82.042,95.159,97.159,80.042,99.632,61H89.525z"/>
</g>
</svg>

【问题讨论】:

标签: html css svg cross-browser transform


【解决方案1】:

正如@DaniP 指出的那样,caniuse.com 将成为您解决跨浏览器问题的首选资源。来自更直接的链接http://caniuse.com/#feat=transforms2d:IE

FF 在 svg 元素上遇到transform-origin 的问题。在 SO 中搜索"firefox transform-origin svg" - 有一些答案可以让人们得到它的工作(例如使用transform: rotate(deg, cx, cy))但是当我测试你的例子时这些对我不起作用。 Mozilla 有几个与此相关的错误 - 例如关闭的https://bugzilla.mozilla.org/show_bug.cgi?id=923193,最后一条评论是“这不应该被关闭”

【讨论】:

  • 鉴于 Firefox 实现了书面规范,而 Chrome 没有,因此说 Firefox 有问题是相当不准确的。
  • @RobertLongson 这很公平,我并不是要侮辱你的工作。 “你不会是第一个被 FF 在 svg 元素中处理 transform-origin 的方式绊倒的开发者”?
  • 我将在接受之前将其搁置一段时间,以防有人提出不需要 Greensock 的技巧。还有一个原因是我希望更多地采用 SMIL 支持...
  • 请注意,我还删除了关于错误 923193 的误导性最后评论。该评论导致错误被关闭为无效。鉴于 Firefox 实现了规范,要么 Chrome 需要更改,要么规范需要更改(以匹配 Chrome)。
  • @RobertLongson 如果您愿意,欢迎您编辑我的回答措辞 - 您提出的观点绝对有效
猜你喜欢
  • 1970-01-01
  • 2011-12-18
  • 2012-05-05
  • 1970-01-01
  • 2016-10-25
  • 1970-01-01
  • 2012-02-24
  • 2012-04-24
相关资源
最近更新 更多