css - transform: scaleX() 似乎改变了元素的高度
问题描述
我希望有人可以帮助我。我在 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;
}
解决方案
我认为1/3
CSS 中不可能存在完美,就您而言,您使用的是1fr
. 该fr
单元创建灵活的网格轨道。它代表网格容器中可用空间的一小部分,这会产生小数像素的问题。
小数像素 - 当元素显示在屏幕上时,大多数浏览器会自然地将位置四舍五入到最近的像素,根据您的 css onhover,您会注意到小数像素值的差异。
您可以阅读这篇文章以了解更多信息 - CSS 中的子像素问题
我个人会添加像素高度来解决问题:)
推荐阅读
- javascript - 如何在 Robo3T 的文档中使用数组更新字符串?
- node.js - 如何在 MS Bot Framework V4 中读取或访问 userState?
- python-3.x - 这两个制表符分隔的 .txt 文件之间有什么区别导致 .split("\t") 正确地将值与一个而不是另一个分开?
- docusignapi - DocuSign OAuth 令牌生成器坏了?
- python - 打字:当函数返回带有解压列表的元组时输入提示
- javascript - 如何在反应打字稿中呈现本地存储中的数据?
- c# - 如何读取实体框架中的 JSON 数据列?
- ios - 如何在 UITextView 中保存输入?
- azure - 无法通过不记名令牌生成的访问令牌连接 SQL Azure
- java - 不允许 {} 作为请求正文