今天就来聊聊我捣鼓那个半透明背景的事儿。
有时候,设计稿或者自己瞎琢磨,就想让一块区域的背景能透出点后面的东西,但又不是完全透明,还得带点颜色。比如说,一个图片上面浮着一个文字介绍的框框,希望这个框框有点底色,但又能隐约看到下面的图片纹理。
我傻乎乎地就想着直接用那个 opacity
属性,觉得这不就是管透明度的嘛在样式里咔咔一顿写,给那个框框加上 opacity: 0.7;
或者差不多的值。
结果?好家伙,不光背景半透明,里面的文字、图片、按钮啥的全都跟着一起变淡,跟蒙一层雾似的,那哪儿行,文字都看不清。这显然不是我想要的效果。
我就纳闷,这该咋整?是不是得换个思路。然后我就开始琢磨,是不是能只让背景色透明,里面的内容保持原样。
后来琢磨半天,试好几种法子,才发现得用颜色值本身来控制透明度。就是那个 rgba
,或者现在有些浏览器也支持带透明度的 hex
颜色值(就是 # 号后面跟8位,两位管透明)。
我当时咋弄的:
第一步:找到目标
先找到我要加半透明背景的那个盒子,比如一个div
,给它一个类名或者 ID,方便在 CSS 里选中它。第二步:写样式
然后,就给它的background-color
或者直接用background
属性下手。第三步:用 RGBA
重点来,不用opacity
,而是用rgba()
。比如我想搞个半透明的黑色,我就这么写:background-color: rgba(0, 0, 0, 0.5);
。这里面,rgb(0, 0, 0)
就是黑色,那个0.5
就是管透明度的,0 是全透明,1 是完全不透明。你想多透就调这个数值,比如0.7
就是 70% 不透明度。第四步:或者用带透明度的 HEX(可选)
现在用带透明度的hex
也方便,比如半透明黑色也可以写成background-color: #00000080;
。两位 `80` 是十六进制,就大概是半透明的意思,换算一下差不多就是0.5
。这个写法更简洁点,但我个人还是习惯用 `rgba`,感觉更直观点。
这么一搞,还真行!
背景确实半透明,能隐约看到后面的内容,但是盒子里的文字、图标啥的,都还是清清楚楚的,完全不受影响。这效果就对嘛
以后再想做这种效果,就别傻乎乎用 `opacity` ,直接在颜色值上下功夫,用 `rgba` 就对。这方法挺实在的,做一些提示框、蒙层或者就是想让界面层次感强点的时候,都用得上。反正我后来做项目,碰到类似需求,基本都这么处理,没再踩过之前的坑。