伊江南 發表於 2026-5-3 22:16:52

CSS实现背景图片透明文字不透明效果的两种方法

<p>网页设计中经常要在背景图上放一些文字介绍,这就需要背景图片能有透明效果以便突出显示文字信息,经多方查阅,终于找到了2种有趣的方法。</p>
<h3>1.在文字层添加rgba样式实现半透明效果</h3>
<p><strong>方法:</strong></p>
<ul><li>背景图片层添加样式:<code>background-size: cover;</code>&nbsp;和&nbsp;<code>position: relative;</code></li><li>在文字层添加样式&nbsp;<code>background:rgba(255,255,255,0.3)</code>&nbsp;(白底透明,一般文字颜色用黑色系)或者&nbsp;<code>background:rgba(0,0,0,0.3)</code>&nbsp;(黑底透明,一般文字颜色用白色系)</li></ul>
<p><strong>代码:</strong></p>
<div class="jb51code"><pre class="brush:css;">&lt;style&gt;
    .div-bg {
      background: url(https://www.hollowman.cn/usr/themes/hy/images/backgroundimages/pub_5.jpg) no-repeat;
      background-size: cover;
      position: relative;
      width: 500px;
      height: 200px;
      opacity:0.5;
    }
    .div-bg-white {
      background: rgba(255, 255, 255, 0.5);
    }
    .div-bg-dark {
      background: rgba(0, 0, 0, 0.5);
    }
&lt;/style&gt;
&lt;div class="div-bg"&gt;
    &lt;div class="div-bg-white"&gt;在底层div添加样式 background:rgba(255,255,255,0.5) 效果(白底透明,一般文字颜色用黑色系)&lt;/div&gt;
    &lt;br&gt;
    &lt;div class="div-bg-dark" style="color:white"&gt;在底层div添加样式 background:rgba(0,0,0,0.5) 效果(黑底透明,一般文字颜色用白色系)&lt;/div&gt;
&lt;/div&gt;</pre></div>
<p><strong>效果:</strong></p>
<p style="text-align:center"><img alt="在这里插入图片描述" src="https://img.jbzj.com/file_images/article/202309/2023091817024434.png" /></p>
<p><strong>说明:</strong></p>
<blockquote><p>为什么不在背景图片层上设置&nbsp;<code>opacity:0.5</code>(不透明度)?因为使用 opacity 设置元素的透明度是一个整体的透明度,会作用于所有后代元素,当你设置&nbsp;<code>opacity:0.5</code>&nbsp;的时候,背景图、背景色、文字都会变成半透明属性,所以想实现字体不透明是不行的。<br />而如果直接在文字层设置&nbsp;<code>rgba(0,0,255,0.5)</code>,前三个属性是 RGB 颜色,最后一个属性表示的是透明度,用&nbsp;<code>rgba(0,0,255,0.5)</code>&nbsp;就可以实现背景透明字体不透明,rgba 不会影响内部的透明度。</p></blockquote>
<h3>2.利用滤镜实现半透明效果</h3>
<p><strong>方法:</strong></p>
<ul><li>背景图片层添加样式:相对定位&nbsp;<code>position: relative;</code></li><li>背景图片层利用<strong>伪元素</strong>,添加样式:绝对定位<code>position: absolute;</code>,滤镜不透明度&nbsp;<code>filter: opacity(50%);</code>,<code>content: &#39;&#39;;</code>(空内容),&nbsp;<code>z-index:-1</code>(避免遮盖其他元素)。</li></ul>
<p><strong>代码:</strong></p>
<div class="jb51code"><pre class="brush:xhtml;">&lt;div class="filter-bg"&gt;
      &lt;p&gt;背景图片层利用伪元素样式实现透明&lt;/p&gt;
&lt;/div&gt;
&lt;style&gt;
    .filter-bg {
      width: 500px;
      height: 200px;
      /* 主层必须为相对定位,否则伪元素的图片将不符合预期 */
      position: relative;
    }
    .filter-bg:before {
      /* 下面4行代码确保背景图覆盖主层 */
      background: url(https://www.hollowman.cn/usr/themes/hy/images/backgroundimages/pub_5.jpg);
      background-size: cover;
      width: 100%;
      height: 100%;
      /* 插入空内容,必须要的样式 */
      content: '';
      /* 绝对定位,确保背景图起点在主层的0,0位置 */
      position: absolute;
      left: 0;
      top: 0;
      /*避免遮盖其他元素*/
      z-index: -1;
      /* 滤镜效果 */
      -webkit-filter: opacity(50%);
      filter: opacity(50%);
    }
&lt;/style&gt;</pre></div>
<p><strong>效果:</strong></p>
<p style="text-align:center"><img alt="在这里插入图片描述" src="https://img.jbzj.com/file_images/article/202309/2023091817024435.png" /></p>
<p><strong>说明:</strong></p>
<p>这里利用伪元素,将滤镜设置的背景半透明度设置在伪元素上而不是主层上,因此其效果不会影响父元素上的文字。</p>
<p>关于滤镜&nbsp;<code>filter</code>&nbsp;还有更多其他的特效可以学习,下面是一些常用filter函数:</p>
<table><tbody><tr><th>滤镜效果</th><th>函数</th><th>补充说明</th></tr><tr><td>无</td><td>none</td><td>默认值,表示没有效果</td></tr><tr><td>模糊</td><td>blur(px)</td><td>为图像设置高斯模糊,默认值为 0,单位为像素,值较大越模糊</td></tr><tr><td>调整亮度</td><td>brightness(number)</td><td>number越大图像越亮,number不能取负值,可以是整数也可以是百分比</td></tr><tr><td>调整灰度</td><td>grayscale(%)</td><td>将图像转换为灰度图像,默认值为 0%,表示原始图像;100% 表示将图像完全变成灰度图像(即黑白图像),不允许为负值</td></tr><tr><td>调整对比度</td><td>contrast(%)</td><td>默认值为 100%,代表原始图像;0% 将使图像完全变黑;当值超过 100% 时图像将获得更高的对比度</td></tr><tr><td>阴影</td><td>drop-shadow(h-shadow v-shadow blur spread color)</td><td>为图像添加阴影效果,参数说明如下:<br /><strong>h-shadow:</strong>&nbsp;必填值,指定水平方向阴影的像素值,若值为负,则阴影会出现在图像的左侧;<br /><strong>v-shadow:</strong>&nbsp;必填值,指定垂直方向阴影的像素值,若值为负,则阴影会出现在图像的上方;<br /><strong>blur:</strong>&nbsp;可选值,为阴影添加模糊效果,默认值为 0,单位为像素,值越大创建的模糊就越多(阴影会变得更大更亮),不允许使用负值;<br /><strong>spread:</strong>&nbsp;可选值,默认值为 0,单位为像素。若值为正,则阴影将会扩展并增大;若值为负,则阴影会缩小;<br /><strong>color:</strong>&nbsp;可选值,为阴影添加颜色,如未指定,则由浏览器来绝对,通常为黑色。<br /><strong>注意:</strong>&nbsp;Chrome、Safari 和 Opera 等浏览器不支持第 4 个参数,如果添加,则不会有任何效果</td></tr><tr><td>反转图像</td><td>invert(%)</td><td>默认值为 0%,表示原始图像;100% 则表示完全反转,不允许使用负值</td></tr><tr><td>不透明度</td><td>opacity(%)</td><td>默认值为 100%,表示原始图像;0% 表示完全透明,不允许使用负值</td></tr><tr><td>图像转为棕褐色</td><td>sepia(%)</td><td>默认值为 0%,表示原始图像;100% 表示图像完全变成棕褐色,不允许使用负值</td></tr><tr><td>调整饱和度</td><td>saturate(%)</td><td>默认值为 100%,表示原始图像;0% 表示图像完全不饱和,不允许使用负值</td></tr><tr><td>图像色相旋转</td><td>hue-rotate(deg)</td><td>该值用来定义色环的度数,默认值为 0deg,代表原始图像,最大值为 360deg</td></tr></tbody></table>
頁: [1]
查看完整版本: CSS实现背景图片透明文字不透明效果的两种方法