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

标签 css

假设您要将 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/

相关文章:

javascript - 添加::-moz-focus-inner 使用镭

javascript - 获取表格行的高度

html - 如何仅使用 CSS 创建三 Angular 形动画

css - 如何使用 flexbox 制作水平滚动的轮播?

javascript - D3.js:添加名称基于数据的类

javascript - 为什么我的 firebase 网站无法显示图像 block ?

javascript - 页面刷新时轨道 slider 未加载?

css - CSS 中的顶部与底部的过渡效果不起作用

css - 将连续缩略图列表 Bootstrap 到网格中

javascript - 我怎样才能重用功能而不是不断重复它?