CSS - прозрачность линейного градиента на обеих сторонах изображения
TL;DR
Можно ли добавить прозрачность к изображениям в CSS с помощью -webkit-linear-gradient
слева и правой частью изображения?
Длинная версия
У меня есть изображение, которое я хочу добавить прозрачность - с чистым 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-shadow
и radial-gradient
, но я не мог понять.
Можно ли добавить прозрачность слева и справа от изображения, используя только CSS?
EDIT:
Пример:
![enter image description here]()
Ответы
Ответ 1
Вы можете использовать обертку 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>
Ответ 2
.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>