【问题标题】:CSS3 Transforms: Multiple Origins?CSS3 变换:多个来源?
【发布时间】:2012-02-15 08:30:48
【问题描述】:

是否可以在 CSS3 中指定左上角的原点 (0%, 0%) 进行缩放,并指定不同的原点 (中心) 进行旋转?如果有帮助,我只使用 webkit。

我目前正在使用转换列表(即 -webkit-transform: scale(newScale) rotate(newRotate)

但似乎不可能在两次传递之间更改原点。有没有更好的方法来看待这个?目前,如果我缩放一个对象并以默认中心的原点旋转它,元素的位置现在是关闭的,所以当你拖动元素时,光标仍然在元素的左上角,而它应该是在中心。将原点更改为中心以对其进行缩放可以解决此问题,但会出现旋转和翻转的新问题。

【问题讨论】:

    标签: css webkit css-transforms


    【解决方案1】:

    找到了解决问题的好方法...通过如下创建父/子关系:

    <div class="container">
       <img src="" />
    </div>
    

    我现在可以如下设置两个类:

    .container {
        -webkit-transform-origin: 0% 0%;
        -webkit-transform: scale(0.5);
    }
    
    .container img {
        -webkit-transform-origin: 50% 50%;
        -webkit-transform: rotate(45deg);
    }
    

    这将完全符合我的要求:以左上角的原点缩放,然后以中心的原点旋转。瞧!

    【讨论】:

    • +1 表示解决方案 -1 表示不必要的标记。这似乎是 webkit 对这些规则的设计存在问题。
    • 您的评论对任何人都没有帮助。它以当前实施的方式回答了这个问题。您还有其他建议可以贡献吗?
    • 请注意:如果父级有scale,那么子级transform-origin 的位置仍然基于原点大小(缩放前的大小)
    【解决方案2】:

    而是将原点 (0,0) 的缩放视为原点中心的缩放+平移。单独如下:

    -webkit-transform-origin: top left;
    -webkit-transform: scale(1.5);
    

    等同于:

    -webkit-transform-origin: center;
    -webkit-transform: scale(1.5) translate3d(16.66%, 16.66%, 0);
    

    理论上,旋转原点中心应该让角落伸出sqrt(1/2)-0.5,要求我们将原点向下和向右移动20.71%,但出于某种原因,webkit 变换算法会为我们向下移动(但不完全足够)并为我们缩放原点(同样不完全)。因此,我们需要向右移动 50% 并对这种奇怪的行为进行一些调整:

    -webkit-transform-origin: center;
    -webkit-transform: scale(1.5) rotate(45deg) translate3d(52.5%, 0.5%, 0);
    -webkit-transition: all 2s ease-in;
    

    注意:我最初的答案是使用 divwidth:100px;height100px;,这需要 translate3d(54px, 0, 0)

    【讨论】:

    • Brett,我熟悉平移以移动原点、缩放,然后平移回来,但这对我来说是新的。最后翻译是如何工作的? 54px 是否可以作为资产宽度/2 的示例?抱歉,正在努力解决这个问题...
    • 请注意原点 (0,0) 的缩放在对象缩放时如何移动对象的中心?那么这与在平移对象的同时使用原点 (50%,50%) 进行缩放是一样的。
    【解决方案3】:

    【讨论】:

    • 这是一个非常好的主意,但它似乎只运行两个转换中的最后一个。如果将标量提高到 2.0+,以便真正看到它,您会注意到它似乎没有按比例缩放。如果您更改顺序以使比例第二次完成,则它似乎不会旋转。我错过了什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 2012-03-29
    • 2023-03-23
    • 2013-04-26
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多