Search code examples
csstransparencylinear-gradients

CSS - Linear gradient transparency on both side of image


tl;dr

Is there any way to add transparency to images in CSS with -webkit-linear-gradient on left, and right side of the image?

Long Version

I have an image I want to add transparency - with pure CSS - on both side of it avoiding using any image editor like Photoshop, Gimp, etc. I have tried to use -webkit-linear-gradient but it uses rgba() function to define color stops.

So this snippet

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

does this:

enter image description here

In this example the last parameter in the rgba() defines the transparency of the color. So far so good. If I put right in the -webkit-linear-gradient the image above would show the opposite. (You don't say?!)

I want somehow to merge the two, and create a gradient that goes to transparent on both side. Only not with gradient. With an image.

I also tried to work around with box-shadow and radial-gradient but I couldn't figure it out.

Is there any possible way to add transparency on left, and right side of an image using only CSS?

EDIT:

Example: enter image description here


Solution

  • You could use a wrapper div and then use color stops:

    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>


    Resources