当前位置: 首页 > 面试题库 >

用RGBBA背景色覆盖背景图片

姜凯风
2023-03-14
问题内容

我有div一个background-imagergba(0,0,0,0.1)当用户悬停div时,我想用rgba颜色()覆盖背景图像。

我想知道是否有一个一格解决方案(即没有多个div,一个用于图像,一个用于颜色,等等)。

我尝试了多种方法:

<div class="the-div" id="test-1"></div>
<div class="the-div" id="test-2"></div>
<div class="the-div" id="test-3"></div>

而这个CSS:

.the-div {
    background-image: url('the-image');
    margin: 10px;
    width: 200px;
    height: 80px;
}

#test-1:hover {
    background-color: rgba(0,0,0,0.1);
}

#test-2:hover {
    background: url('the-image'), rgba(0,0,0,0.1);
}

#test-3:hover {
    background: rgba(0,0,0,0.1);
}

我看到的唯一选择是制作另一个具有覆盖层的图像,使用JavaScript预加载然后使用.the-div:hover { background: url('the-new-image'); }。但是,我想要一个仅CSS的解决方案(更整洁;更少的HTTP请求;更少的硬盘)。有没有?


问题答案:

PeterVR的解决方案的缺点是,额外的颜色会显示在整个HTML块的顶部,这意味着它还会显示在div内容的顶部,而不仅仅是背景图像的顶部。如果div为空,这很好,但是如果不使用线性渐变,则可能是一个更好的解决方案:

<div class="the-div">Red text</div>

<style type="text/css">
  .the-div
  {
    background-image: url("the-image.png");
    color: #f00;
    margin: 10px;
    width: 200px;
    height: 80px;
  }
  .the-div:hover
  {
    background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1)), url("the-image.png");
    background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1)), url("the-image.png");
    background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1)), url("the-image.png");
    background-image: -ms-linear-gradient(top, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1)), url("the-image.png");
    background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.1)), to(rgba(0, 0, 0, 0.1))), url("the-image.png");
    background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1)), url("the-image.png");
  }
</style>

以上代码应可在任何具有明显市场份额的浏览器中使用-MSIE 9.0及更低版本除外。

编辑 (2017年3月):到目前为止,网络的状态已经变得越来越混乱。因此linear-gradient(受Firefox和Internet
Explorer -webkit-linear-gradient支持)和(受Chrome,Opera和Safari支持)行就足够了,不再需要其他带前缀的版本。



 类似资料:
  • 问题内容: 如果选择了该面板(单击该面板),则该面板的颜色为蓝色。另外,我在该面板上添加了一个小标志(图像),它表示所选面板之前已被选中。 因此,如果用户看到例如10个面板,其中有4个带有这个小标记,则他知道自己之前已经单击了这些面板。到目前为止,这项工作还不错。现在的问题是我无法显示小标志并使面板同时变为蓝色。 我使用css将面板设置为蓝色,使用设置背景图像。但是背景色似乎在图像上方,因此您看不

  • 我正在构建一个聊天应用程序,当我向用户发送一个图像时,图像并没有覆盖我给出的背景,而是给出了顶部和底部的有线填充。如何解决这个问题。我给出的填充是每边7dp,这里是我的代码

  • 问题内容: 假设我要在CSS中渲染箭头,箭头应具有头部,尾部和灵活的宽度,以便可以包含文本。我当然可以创建多个div来获得所需的内容,但是如何在CSS3中完成呢? 我可以使用多个背景图片: 的HTML: 这给了我一个带有箭头和尾巴的透明中间部分。似乎不可能在中间部分指定颜色。 仅使用一张背景图像,您可以执行以下操作: 我知道这在很多方面都是可行的,但是背景颜色属性是否真的从速记定义中丢失了? 问题

  • 我想知道这一点,经过一点挖掘,找到了这个资源,链接在这个答案中。 该资源指出: 背景与背景色 比较18个色板在页面上呈现100次为小矩形,一次带有背景,一次带有背景颜色。 现在,我可以想象要快得多,因为资源也认为: 我认为当浏览器看到

  • 在多个浏览器中最兼容的最佳做法是什么: 或 还是最好同时使用这两种方法来涵盖更多内容:

  • 问题内容: 有人可以解释一下设置图形的面色时为什么下面的代码不起作用吗? 当我使用 这些命令指定图形的高度和宽度时,这些命令将被拾取。但是,没有选择Facecolor设置。为什么? 谢谢你的帮助。 问题答案: 这是因为覆盖图形背景的面色。 (实际上,这是有意的。假设是您可能希望使用kwarg来控制保存的图形的背景色。不过,这是一个令人困惑且不一致的默认值!) 最简单的解决方法是做(我在这里指定ed