CSS 图像透明/不透明

透明度能让图片、色块与背景自然融合,做出水印、悬停高亮、层叠文字等效果。CSS 中用 opacity 控制元素的整体透明度,配合 hover 就能做出生动的交互。讲师带你看懂 opacity 的用法与陷阱。

opacity 基础用法

opacity 取值 0~1:0 完全透明,1 完全不透明(默认):

img { opacity: 0.5; }   /* 半透明图片 */
<img src="logo.png" style="opacity: 0.3;" alt="半透明logo">

运行效果:图片看起来像蒙了一层纱,背后的背景隐约透出,适合做水印或占位图。

悬停时改变透明度

常见的交互:默认半透明,鼠标移入立刻变清晰:

img {
  opacity: 0.4;
  transition: opacity 0.3s;  /* 平滑变化 */
}
img:hover {
  opacity: 1.0;              /* 悬停时完全不透明 */
}
/* 反过来:平时不透明,悬停时半透明 */
img:hover { opacity: 0.7; }

运行效果:图片以 0.3 秒从半透明平滑变为清晰(或反之),比瞬间切换柔和得多。

透明度的陷阱:子元素一起透明

opacity 作用于"整个元素及其所有后代":如果父容器设了 opacity:0.5,里面的文字和图片都会一起变透明,且无法单独"救回":

.box { opacity: 0.5; }   /* 里面的文字也会变淡 */
.box-text { opacity: 1; }/* 无效:父级已经叠了透明度 */

解决办法:背景透明用 rgba 颜色,文字保持不透明:

.box {
  background: rgba(0, 0, 0, 0.5);  /* 只让背景半透明 */
  color: #fff;
}

运行效果:深色半透明背景压在图片上,白字依然清晰,这正是图片上叠加文字的推荐做法。

半透明遮罩上的文字

给图片容器叠一层半透明遮罩,是"图片配文字"的经典设计:

.photo { position: relative; width: 400px; }
.photo .mask {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0, 0, 0, 0.4);  /* 黑色遮罩,40% 不透明 */
  color: #fff;
  display: flex;
  align-items: center;      /* 文字水平居中 */
  justify-content: center;  /* 文字垂直居中 */
}
<div class="photo">
  <img src="scenery.jpg" width="400" alt="风景">
  <div class="mask">远山如黛</div>
</div>

运行效果:图片上蒙了一层淡淡的黑色,白色文字浮在正中央,可读性很好——透明度让两层内容各司其职。

小结

opacity 以 0~1 控制整个元素(含子元素)的透明度,适合整图淡入淡出与 hover 反馈;只希望背景透明时请改用 rgba。想让文字稳稳压在图片上,半透明遮罩层是最实用的一招。

笔记加载中…