Un1*_*Un1 16 css scale css3 css-transforms
我想让这张卡在悬停时缩放(包括其中的元素),但文本在转换过程中摇摆/抖动(当你悬停卡片时)并在缩放期间和之后变得模糊(有时,某些比率比其他比例更高) ,我认为是由于子像素值四舍五入).
如何在转型过程中消除这种摇晃和模糊?
我不关心IE浏览器,我只想让它在最新的Chrome中运行.
它似乎是由transition财产造成的.
Codepen#1: https ://codepen.io/x84733/pen/yEpYxX
.scalable {
transition: 0.3s ease-in-out;
box-shadow: 0 6px 10px rgba(0,0,0,0.14);
}
.scalable:hover {
transform: scale(1.05);
box-shadow: 0 8px 40px rgba(0,0,0,0.25);
}
.card {
width: 100%;
background: white;
padding: 20px;
}
body {
width: 50%;
height: 100%;
background: #999;
padding: 20px;
}Run Code Online (Sandbox Code Playgroud)
<div class="card scalable">
<div>here's some description</div>
</div>Run Code Online (Sandbox Code Playgroud)
我刚刚发现,当你以编程方式为它设置动画时,它不会抖动/抖动:
我能以某种方式使用JS吗?
Codepen: https ://codepen.io/anon/pen/LqXwOb ?editors = 1100
.anim {
animation: scale 0.3s ease-in-out infinite alternate;
}
@keyframes scale {
to { transform: scale(1.05) }
}
.scalable {
transition: 0.3s ease-in-out;
box-shadow: 0 6px 10px rgba(0,0,0,0.14);
}
.scalable:hover {
transform: scale(1.05);
box-shadow: 0 8px 40px rgba(0,0,0,0.25);
}
.card {
width: 100%;
background: white;
padding: 20px;
}
body {
width: 50%;
height: 100%;
background: #999;
padding: 20px;
}Run Code Online (Sandbox Code Playgroud)
<div class="el anim card scalable">
<div>here's some description</div>
</div>Run Code Online (Sandbox Code Playgroud)
除了使用比例尺之外,您还可以考虑translateZ使用透视图。确保最初定义透视图,以避免在快速移动光标时产生不良影响:
.scalable{
transition: 0.3s ease-in-out;
box-shadow: 0 6px 10px rgba(0,0,0,0.14);
transform:perspective(100px);
}
.scalable:hover {
transform:perspective(100px) translateZ(5px);
box-shadow: 0 8px 40px rgba(0,0,0,0.25);
}
.card {
width: 100%;
background: white;
padding: 20px;
}
body {
width: 50%;
height: 100%;
background: #999;
padding: 20px;
}Run Code Online (Sandbox Code Playgroud)
<div class="card scalable">
<div>here's some description</div>
</div>Run Code Online (Sandbox Code Playgroud)
减少模糊效果的一种方法是从负平移开始,然后回到0:
.scalable{
transition: 0.3s ease-in-out;
box-shadow: 0 6px 10px rgba(0,0,0,0.14);
transform:perspective(100px) translateZ(-5px);
}
.scalable:hover {
transform:perspective(100px) translateZ(0px);
box-shadow: 0 8px 40px rgba(0,0,0,0.25);
}
.card {
width: 100%;
background: white;
padding: 25px;
}
body {
width: 50%;
height: 100%;
background: #999;
padding: 20px;
}Run Code Online (Sandbox Code Playgroud)
<div class="card scalable">
<div>here's some description</div>
</div>Run Code Online (Sandbox Code Playgroud)