CSS   发布时间:2022-04-17  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了translateZ()vs scale()中的CSS不良渲染大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我注意到,通过这两种方式转换文本时,质量差异很大:
.text1 {
  width: 200px;
  height: 22px;
  position: absolute;
  top: 40%;
  left: 0;
  transform-origin: 50% 50%;
  transform: scale(2); /* here */
  color: red;
  text-align: center;
  font-size: 22px;
}
.text2 {
  width: 200px;
  height: 22px;
  position: absolute;
  top: 60%;
  left: 0;
  transform-origin: 50% 50%;
  transform: translateZ(400pX); /* here */
  text-align: center;
  font-size: 22px;
}
.perspective {
  width: 200px;
  height: 200px;
  perspective: 800px;
  transform-style: preserve-3d;
}
<div class="perspective">
  <div class="text1">Text</div>
  <div class="text2">Text</div>
</div>

在Z轴上移动文本时,是否有办法强化更好的渲染?

解决方法

您使用translateZ(400pX)进行转换时,文本模糊的原因是这是一个3D转换;浏览器将元素视为纹理而不是向量,以便提供硬件3d加速.
因此,当尺寸增加时,基本上分辨率会降低.

另一方面,随着规模的转变是二维转型,
浏览器将元素视为向量,并且不会发生模糊.

看看一旦我们踢入3d就会发生什么变化,没有实际设置任何translateZ值:

.text1 {
    width: 200px;
    height: 22px;
    position: absolute;
    top: 40%;
    left: 0;
    transform-origin: 50% 50%;
    transform: scale(2);
    /* here */
    color: red;
    text-align: center;
    font-size: 22px;
}
.text1a {
    width: 200px;
    height: 22px;
    position: absolute;
    top: 40%;
    left: 50%;
    transform-origin: 50% 50%;
    transform: translateZ(0) scale(2);
    /* here */
    color: blue;
    text-align: center;
    font-size: 22px;
}
.text2 {
    width: 200px;
    height: 22px;
    position: absolute;
    top: 60%;
    left: 0;
    transform-origin: 50% 50%;
    transform: translateZ(400pX);
    /* here */
    text-align: center;
    font-size: 22px;
}
.perspective {
    width: 200px;
    height: 200px;
    perspective: 800px;
    transform-style: preserve-3d;
}
<div class="perspective">
    <div class="text1">Text</div>
    <div class="text1a">Text</div>
    <div class="text2">Text</div>
</div>

目前唯一的解决方法是通过JS检查样式表,并用transform:scale覆盖translateZ

var styles = document.styleSheets;

//patterns
var perspPat = /perspective\s*?:\s*?(\d+)/;
var transZPat = /translateZ\(\s*?(\d+)/;

var perspective;
var translateZ = [];
[].slice.call(styles).forEach(function (X) {
    [].slice.call(x.rules).forEach(function (rulE) {
        if (perspPat.test(rule.cssText)) {
            perspective = perspPat.exec(rule.cssText)[1]
        };
        if (transZPat.test(rule.cssText)) {
            translateZ.push([
            rule.SELEctorText,transZPat.exec(rule.cssText)[1]]);
        }


    });

})


translateZ.forEach(function (X) {
    document.querySELEctor(x[0]).style.transform = 'scale(' + perspective / x[1] + ')';

})

fiddle

正如你所看到的,即使它的工作,需要很多的优化.(我不会认为它的生产在当前状态下准备就绪).

大佬总结

以上是大佬教程为你收集整理的translateZ()vs scale()中的CSS不良渲染全部内容,希望文章能够帮你解决translateZ()vs scale()中的CSS不良渲染所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。