CSS - 图像两侧的线性渐变透明度

时间:2015-02-09 12:06:52

标签: css css3 transparency linear-gradients

TL;博士

有没有办法在图片的左侧和右侧-webkit-linear-gradient为CSS中的图像添加透明度?

长版

我有一个图像我想添加透明度 - 使用纯CSS - 避免使用任何图像编辑器,如Photoshop,Gimp等。我试图使用-webkit-linear-gradient但它使用rgba()功能定义颜色停止。

所以这个片段

height: 200px;
background: -webkit-linear-gradient(left, rgba(255,0,0,0), rgba(255,0,0,1));

这样做:

enter image description here

在此示例中,rgba()中的最后一个参数定义颜色的透明度。到现在为止还挺好。如果我将right放在-webkit-linear-gradient上面,则上图中会显示相反的情况。 (你不说?!)

我想以某种方式将两者合并,并创建一个在两侧都变为透明的渐变。只有不用渐变。带图像。

我还尝试使用box-shadowradial-gradient,但我无法理解。

是否有可能只使用CSS在图像的左侧和右侧添加透明度?

编辑:

实施例: enter image description here

5 个答案:

答案 0 :(得分:18)

您可以使用包装器div然后使用颜色停止:

div {
  position: relative;
  display: inline-block;
}
div:before {
  content: "";
  top: 0;
  left: 0;
  position: absolute;
  height: 100%;
  width: 100%;
  background: -moz-linear-gradient(left, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 49%, rgba(255, 255, 255, 1) 100%);
  /* FF3.6+ */
  background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 1)), color-stop(49%, rgba(255, 255, 255, 0)), color-stop(100%, rgba(255, 255, 255, 1)));
  /* Chrome,Safari4+ */
  background: -webkit-linear-gradient(left, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 49%, rgba(255, 255, 255, 1) 100%);
  /* Chrome10+,Safari5.1+ */
  background: -o-linear-gradient(left, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 49%, rgba(255, 255, 255, 1) 100%);
  /* Opera 11.10+ */
  background: -ms-linear-gradient(left, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 49%, rgba(255, 255, 255, 1) 100%);
  /* IE10+ */
  background: linear-gradient(to right, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 49%, rgba(255, 255, 255, 1) 100%);
  /* W3C */
  filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#ffffff', GradientType=1);
  /* IE6-9 */
}
<div>
  <img src="http://placekitten.com/g/300/300" alt="" />
</div>


<强>资源


答案 1 :(得分:0)

.image {
  position: relative;
}

.image::after {
    position: absolute;
    top:0;
    left: 0;
    right: 0;
    bottom: 0;
    content: '';
    display: block;
    background-image: linear-gradient(to right, currentColor 5%, transparent 30%);
  }

.image::before {
    position: absolute;
    top:0;
    left: 0;
    right: 0;
    bottom: 0;
    content: '';
    display: block;
    background-image: linear-gradient(to left, currentColor 5%, transparent 30%);
  }
<div class="image">
  <img src="http://placekitten.com/800/400"/>
</div>

我发现做到这一点的一种方法是使用伪类并将它们堆叠在一起。确保图像容器相对放置,并且可以为您工作(请参见示例)。

答案 2 :(得分:0)

使用mask-image-webkit-mask-image属性,而不使用background

img
{
  mask-image: /*same as -webkit-mask-image*/
  -webkit-mask-image: linear-gradient(to right, transparent 0%, black 10%, black 90%, transparent 100%);
}

上面的代码将色标停在0%,10%,90%和100%的位置,而任何img标签的每一面的10%都是半透明的。 mask-image属性仅使用Alpha通道,您可以为不透明的部分使用任何所需的颜色。

答案 3 :(得分:0)

最新答案,但其他人可以使用。您可以只用一条线在两面都放一个透明的渐变:

background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(255, 0, 0, 1), rgba(0, 0, 0, 0))

答案 4 :(得分:-1)

.image {
  position: relative;
}

.image::after {
    position: absolute;
    top:0;
    left: 0;
    right: 0;
    bottom: 0;
    content: '';
    display: block;
    background-image: linear-gradient(to right, currentColor 5%, transparent 30%);
  }

.image::before {
    position: absolute;
    top:0;
    left: 0;
    right: 0;
    bottom: 0;
    content: '';
    display: block;
    background-image: linear-gradient(to left, currentColor 5%, transparent 30%);
  }
<div class="image">
  <img src="http://placekitten.com/800/400"/>
</div>