关于CSS3:CSS-图像两侧的线性渐变透明度

CSS - Linear gradient transparency on both side of image

tl; dr

有什么方法可以在图像的左右两侧添加-webkit-linear-gradient的CSS图像中添加透明度?

长版

我有一个图像,我想在其两面都添加透明性-使用纯CSS-避免使用任何图像编辑器(例如Photoshop,Gimp等)。我尝试使用-webkit-linear-gradient,但它使用rgba()函数定义色标。

所以这个片段

1
2
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


您可以使用包装器div,然后使用色标:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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 */
}
1
  <img src="http://placekitten.com/g/300/300" alt="" />

资源资源

  • 1 *梯度生成器


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
.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%);
  }
1
  <img src="http://placekitten.com/800/400"/>

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