我有一个带有图像背景的div:
<div class="image-cover" style={{ backgroundImage: 'url(' + item.image + ')' }}>
<div className="name">{item.name}</div>
</div>
(是React代码,但基本上上面的div将图像应用为背景。)
我想使图像变暗,可能是渐变,只有底部是暗的,并且渐渐变为正常。我搜索的几乎每个地方都提到在CSS中添加图像作为参考。但是,就我而言,图像URL仅在运行时才知道,并应用于html。
我怎样才能让我的div变暗?
答案 0 :(得分:5)
您可以简单地组合图像和渐变,就像这样
div {
height: 200px;
width: 500px;
background-image:
linear-gradient(black,
transparent 20%,
transparent 80%,
black),
url(http://lorempixel.com/500/200/nature/1/);
}
&#13;
<div></div>
&#13;
或者使用伪元素,比如
div {
height: 200px;
width: 500px;
background: url(http://lorempixel.com/500/200/nature/1/);
}
div::after {
content: '';
display: block;
height: 200px;
width: 500px;
background: linear-gradient(transparent, black);
}
&#13;
<div></div>
&#13;
答案 1 :(得分:4)
我能够通过在linear-gradient
的{{1}}伪元素上使用div
背景来实现这一效果。我们的想法是用::before
伪元素(或另一个div
覆盖::before
,但伪元素不添加任何额外元素),然后应用渐变背景到伪elemetn:
div
这是一个JSFiddle来展示它的实际效果。
答案 2 :(得分:1)
优势:代码纤薄,无需额外的伪元素
缺点:当前w3标准的框阴影尺寸和偏移值可以仅限绝对(非百分比),因此动态/各种尺寸如果没有JavaScript计算元素维度,则无法解决阴影元素的问题。
有更好的答案,所以我只是把它作为一个额外选项(更糟糕)。
div {
display: inline-block;
background:url(http://unsplash.it/200/200);
width:200px;
height:200px;
}
.darkened{
box-shadow: inset 0 -200px 200px -100px rgba(0,0,0,.9);
}
&#13;
<div></div>
<div class="darkened"></div>
&#13;
答案 3 :(得分:0)
元素可以有多个背景,你想从代码中设置它吗?
let imageURL = "https://i.stack.imgur.com/QqkeF.png"; // an example image
let cssURL = "url( " + imageURL + ")"; // convert to CSS url declaration
let gradient = "linear-gradient(to top, rgba(0, 0, 0, 1), rgba(255, 0, 0, 0))";
divElement.style.backgroundImage = gradient + "," + cssURL;
&#13;
<div id="divElement" style="height:128px; width: 256px;">
#divElement
</div>
&#13;
基本上将运行时已知的图像URL转换为CSS url声明,创建您选择的CSS渐变模式,并将它们作为逗号分隔列表添加到元素样式的backgroundImage
属性中属性。
我使用全局变量divElement
进行测试 - 根据需要使用document.getElementById
。
编辑:查看你的代码,将背景图片列表放在模板中应该相当容易:编写上面的独立代码以检查它是否有效:-)