我注意到,通过这两种方式转换文本时,质量差异很大:
.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] + ')'; })
正如你所看到的,即使它的工作,需要很多的优化.(我不会认为它的生产在当前状态下准备就绪).
原文地址:https://www.jb51.cc/css/214330.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。