当前位置: 首页 > 面试题库 >

为什么在2D缩放转换期间文本变得模糊不清和摇摆不定

郏景澄
2023-03-14
问题内容

我想让这张卡在悬停时缩放(包括其中的元素),但是在转换过程中(当您将卡悬停时)文本会摇摆/抖动,并且在缩放时和缩放后会变得模糊(有时,某些比率比其他比率更大)
,我认为这是由于亚像素值舍入而引起的)。

在转换过程中如何消除抖动和模糊?

  • 我不在乎IE浏览器,我只希望它在最新的Chrome中运行。

  • 似乎是由transition财产引起的。

Codepen#1:

.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;

}


<div class="card scalable">

  <div>here's some description</div>

</div>

更新:

我只是发现,当您以编程方式为其设置动画时,它不会摆动/抖动:

我可以将它用于JS吗?

Codepen:

.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;

}


<div class="el anim card scalable">

  <div>here's some description</div>

</div>

问题答案:

除了使用比例尺之外,您还可以考虑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;

}


<div class="card scalable">

  <div>here's some description</div>

</div>

减少模糊效果的一种方法是从负平移开始,然后回到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;

}


<div class="card scalable">

  <div>here's some description</div>

</div>


 类似资料:
  • 问题内容: 我看到一个问题,其中Chrome和其他WebKit浏览器使任何同时应用了transform3d的css缩放内容严重模糊。 有任何已知的解决方法吗?在上面的简单示例中,我得到了答案,我可以简单地使用translate而不是translate3d-这里的重点是将代码剥离为基本要素。 问题答案: Webkit将3d变换后的元素视为纹理而不是矢量,以提供硬件3d加速。唯一的解决方案是增加文本的

  • 问题内容: 通过梳理后SVG规范和指南,如这个和这个,我仍然在努力理解究竟是如何链接转换工作。 精选相关报价 当将transform属性应用于SVG元素时,该元素将获得使用中的当前用户坐标系的“副本”。 和: 当转换链接在一起时,最重要的是要意识到,就像HTML元素转换一样,每个转换都将在坐标系被先前的转换转换后应用于坐标系。 和: 例如,如果要对元素应用旋转,然后进行平移,则平移将根据新的坐标系

  • 我正在尝试在我的Android应用程序中使用矢量绘图。从…起http://developer.android.com/training/material/drawables.html(我的重点): 在Android 5.0(API Level 21)及以上版本中,您可以定义矢量绘图,而不会丢失定义。 使用此绘图: 这个图像视图: 当试图以400dp的速度显示图标时(在大约2015年运行Lollip

  • 缩放变换scale() 缩放变换scale(sx,sy)传入两个参数,分别是水平方向和垂直方向上对象的缩放倍数。例如context.scale(2,2)就是对图像放大两倍。其实,看上去简单,实际用起来还是有一些问题的。我们来看一段代码。 <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>缩放变

  • 点模型Points、线模型Line、网格网格模型Mesh等模型对象的基类都是Object3D,如果想对这些模型进行旋转、缩放、平移等操作,如何实现,可以查询Threejs文档Object3D对相关属性和方法的介绍。 缩放 网格模型Mesh的属性.scale表示模型对象的缩放比例,默认值是THREE.Vector3(1.0,1.0,1.0),.scale的属性值是一个三维向量对象Vector3,查看

  • 我试图抛出一个目标。但是在运行时,对象类仍然是一个派生类。 那么为什么类属性没有改变呢?