【问题标题】:Chrome : Text blurry when skew back : skew(-10deg) -> skew(10deg)Chrome:向后倾斜时文本模糊:倾斜(-10度)->倾斜(10度)
【发布时间】:2023-03-23 15:18:01
【问题描述】:

我只想倾斜父级并将其向后倾斜在子级上。

示例:HTML

<div class="parent"> <!-- skew(-10deg) -->
    <div class="child">Hello</div> <!-- skew(10deg) (skew back) -->
</div>

示例:CSS

.parent {
    transform: skew(-10deg);
}
.child {
    transform: skew(10deg);
}

里面的文字在 Firefox、Safari 上似乎没问题。但不是 ChromeOpera 有点模糊

我必须使用 -webkit-backface-visibility: hidden; 来减少 Chrome 中像素化的框

火狐:

铬:

Firefox 与 Chrome:

或通过 Photoshop 放大

现场示例: http://jsfiddle.net/1tpj1kka/

有什么想法吗?


注意!!! : web-tiki 的回答是另一种解决问题的方法。但是,如果有人回答了解决这个歪斜问题的真正解决方案(真正的解决方案),我会接受这个答案。

【问题讨论】:

  • 为什么不使用pseudo-element 呢?它有更好的浏览器支持,而不是transform
  • @Vucko 没关系? jsfiddle.net/uy061t79/2
  • @l2aelba I ment like this
  • @Vucko 谢谢,但我必须像我在我的案例中编码的那样做。
  • 视觉上很好的问题。您是如何制作动画 gif 的?

标签: css google-chrome css-transforms skew


【解决方案1】:

使用 webkit 浏览器进行 2d 或 3d 转换后的“模糊文本”为 discused many times。但是在您的情况下,您只能将转换应用于伪元素,以便您的文本不受 skew 属性的影响。

它还允许您在标记中只使用一个标签:

@import url(https://fonts.googleapis.com/css?family=Oswald);
body{color:#fff;font-weight: bold;font-size:50px;font-family:'Oswald',sans-serif;}

.parent {
    width: 300px;
    overflow: hidden;
    padding-left: 5%;
    position:relative;
}

.parent::before {
    content :'';
    position:absolute;
    top:0;left:0;
    width:100%; height:100%;
    background: rgba(90,190,230,0.9);
    transform-origin:0 0;
    transform:skew(-10deg);
    z-index:-1;
}
<div class="parent">
    Hello
</div>

【讨论】:

  • +向上。好主意。谢谢
  • 我的场景有点不同(我需要修复一个倾斜的 div 中的模糊图像),但这个技巧对我有帮助。 +1 向上
【解决方案2】:

在像下面这样的转换之前添加“translateZ(0)”会强制 gpu 重新渲染文本并消除 Chrome 上的模糊性。

这个:

transform:  translateZ(0) skew(-10deg);

不是这个:

transform: skew(-10deg);

【讨论】:

  • 不幸的是,它不再适用于当前的 Chrome 版本 72
【解决方案3】:

您可以尝试text-rendering: geometricPrecision CSS 属性。这将强制您的文本不进行抗锯齿处理,从而降低模糊度的重要性。

inp.onchange = function(){
   document.querySelector('.child').classList.toggle('geo');
  }
@import url(https://fonts.googleapis.com/css?family=Oswald);body{color:#fff;font-weight:bold;font-size:50px;font-family:'Oswald',sans-serif;}

.geo{
    text-rendering: geometricPrecision;
  }
.parent {

  transform: skew(-10deg);
  -webkit-backface-visibility: hidden;  
  width:300px;padding-left:15%;margin-left:-15%;overflow:hidden;
}

.child {
  transform: skew(10deg);  
  width:300px;background: rgba(90, 190, 230, 0.9);padding-left: 5%;padding-right: 15%;
}
<div class="parent"> <!-- skew(-10deg) -->
    <div class="child geo">Hello</div> <!-- skew(10deg) (skew back) -->
</div>
<input type="checkbox" id="inp" checked="true"/> geometricPrecision

【讨论】:

  • 谢谢,更好!但是当我通过 Photshop 进行缩放时,我得到了相同的结果。 (Mac 上的 Chrome)i.imgur.com/ksgKKPV.png
  • 是的,它并不完美,我添加了一个切换开关,因此您可以看到它仍然可以改进。
  • 是的,它更好:D
猜你喜欢
  • 2016-02-03
  • 2019-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-21
  • 2020-02-22
  • 2018-08-13
  • 1970-01-01
相关资源
最近更新 更多