gpt4 book ai didi

CSS 不透明度与 rgba : which one is better?

转载 作者:技术小花猫 更新时间:2023-10-29 10:08:32 24 4
gpt4 key购买 nike

假设您要将 CSS 不透明度应用于纯色。就内存和性能而言,使用 rgba 值或颜色+不透明度更好吗?

最佳答案

正如其他人所说,rgba()opacity 的工作方式不同:

  • rgba() 影响单个属性,如 colorbackground-colorborder-color, CSS 定位的元素和仅这些元素
  • opacity 影响目标元素及其所有 DOM 树子元素的所有属性(整个外观)

尽管如此,使用其中任何一种都可以实现许多效果,并且性能/兼容性确实有所不同,因此这个问题并非毫无意义。

根据我的经验,使用 opacity 属性并特别设置动画是导致 webkit 浏览器(尤其是 Safari,Hovering over CSS transition in Safari lightens certain font color)中著名的文本抗锯齿故障的最简单方法。这是因为 opacity 影响的不是一个元素,而是整个元素层次结构,浏览器有时无法正确区分哪些元素被重绘。使用 rgba() 时不会出现此类问题。

此外,Opera 的许多版本,包括几乎最新的 v12.11,在一些 opacity 的使用场景中会产生严重的图形故障。将不透明度与文本、图像背景和文本阴影混合,然后滚动页面或 div 是重现问题的最简单方法。我在 iOS 版本的 Safari 上也遇到了类似的问题。同样,rgba() 没有此类问题。

这些事情的发生是有原因的。从渲染的 Angular 来看,当对color/background-color/border-color使用rgba()时,我们明确地告诉浏览器哪些 DOM 元素和元素的哪些图形层受到影响。这使得浏览器更容易确定何时需要重绘。此外,缩小影响区域是性能提升的保证,我已经通过尝试这两个选项并注意到该网站使用 rgba() 代替 opacity 来确认这一点感觉明显更流畅,尤其是在 Safari 和 Opera 上。

当然,使用rgba() 无法实现像褪色图像这样的事情(mask-image 没有得到足够的支持),但是对于像简单的透明文本或背景这样的任务, rgba() 似乎是更好的选择。如果与 CSS3 动画混合,则更是如此。

哦,记得在使用 rgba() 时始终包含回退:

.el {
color: rgb(0, 0, 0);
color: rgba(0, 0, 0, 0.5);
}

关于CSS 不透明度与 rgba : which one is better?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13385492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com