【发布时间】:2019-01-07 08:28:54
【问题描述】:
我希望有人可以帮助我。我在 CSS 网格中有一个 div,我想在悬停时沿 x 轴整齐地展开。为此,我使用了 transform: scaleX() ,但我注意到一些非常烦人的事情:动画播放完毕后,在某些视口高度上,展开的元素要么增长要么缩小 1 个像素。如果我给 div 一个像 200px 这样的静态高度,则不会出现此问题,但我不想这样做。有谁知道为什么会发生这种情况,以及如何最好地解决它?我必须完全放弃转换,而是做一些类似 transition:width 的事情吗?
<body>
<div></div>
<div></div>
<div></div>
<div></div>
<div class="green"></div>
<div></div>
<div></div>
<div></div>
<div></div>
</body>
body {
margin: 0;
height: 100vh;
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, 1fr);
grid-gap: 1px;
}
body > div {
background-color: lightblue;
overflow: hidden;
}
.green {
background-color: #090;
transform-origin: left;
transition: transform 250ms ease-in-out;
}
.green:hover {
transform: scaleX(2);
transition: transform 250ms ease-in-out;
}
【问题讨论】:
-
这是因为
grid-gap: 1px而发生的,因为它会在 div 结束后立即开始缩放,但是在 2 个网格框之间有 1px 的间隙,因此悬停的元素会保持较短1px 覆盖两个网格框。输入grid-gap:0px,看看这是不是你想要的。 -
唉,不。我摆脱了网格间隙,它仍然设法缩小了 1 个像素,露出下面的黑色背景。
标签: css scale css-transforms css-grid