rgba() 和 opacity 的透明效果有什么不同?

rgba() 和 opacity 都能实现透明效果,但最大的不同是 opacity 作用于元素,以及元素内的所有内容的透明度,而 rgba() 只作用于元素的颜色或其背景色(设置 rgba 透明的元素的子元素不会继承透明效果!)。

opacity 还能够开启硬件加速。

补充:

  • opacity 的值会被后代继承,即使子元素设置 opacity: 1 也会被父元素的透明度"压制";这是因为 opacity 创建了一个 stacking context,子元素被绘制到独立的合成层后再与父层一起合成。
  • 想只让背景透明而不影响内容,用 rgba(0,0,0,0.5) 或 background: #000; opacity: 0.5 都是后者会让所有内容变透明;前者只让背景变透明。
  • 性能上 opacity 触发 GPU 合成,适合做动画;rgba 仅是颜色值,对性能影响很小,但大量使用也会引起重绘。