css3中translate(-50%,-50%)对 transform-origin的奇葩影响?

新手上路,请多包涵
        <style>
        #test{
            width: 100px;
            height: 100px;
            background-color: red;
            transition: all 1s;
            position: absolute;
            left: 50%;
            top: 50%;
            margin-left: -50px;
            /*transform:translate(-50%,-50%);*/
            transform-origin: 50% 50%;
        }
        #test:hover{
            transform: scale(1.2, 1.2);
        }
    </style>
</head>
<body>
    <div id="test"></div>
</body>

当我使用 margin-left为负值的方法来居中对齐,然后鼠标hover的时候放大,中心点就是transform-origin设置的上下居中,没有任何问题:
图片描述

可是当我使用 transform:translate(-50%,-50%)的居中对齐时:

    <style>
        #test{
            width: 100px;
            height: 100px;
            background-color: red;
            transition: all 1s;
            position: absolute;
            left: 50%;
            top: 50%;
            /*margin-left: -50px;*/
            transform:translate(-50%,-50%);
            transform-origin: 50% 50%;
        }
        #test:hover{
            transform: scale(1.2, 1.2);
        }
    </style>
</head>
<body>
    <div id="test"></div>
</body>

图片描述

鼠标hover上去,放大的中心点貌似就跑到了 左上角,即使我设置了 transform-orgin,但是仍然不起作用,
clipboard.png

从控制台来看,transform-origin 属性是起了作用的。本人非常困惑为什么会这样,请个人大佬指点迷津

阅读 9k
1 个回答

很明显的错误,hover 的时候把原有的 translate 覆盖掉了

正确写法如下

#test:hover{
  transform: scale(1.2, 1.2) translate(-50%,-50%);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题