opacity only applies to entire elements, so you cannot apply an alpha channel to a color using the opacity property. You can only do that with the rgba() (or hsla()) function.
So rgba()/hsla() is better in all aspects because that's the only way to do it.