CSS - 图像两侧的线性渐变透明度
CSS - Linear gradient transparency on both side of image
tl;博士
有什么方法可以为 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));
这样做:
在此示例中,rgba() 中的最后一个参数定义了颜色的透明度。到目前为止,一切都很好。如果我将 right
放在 -webkit-linear-gradient
中,上图将显示相反的结果。 (你不说?!)
我想以某种方式合并两者,并创建一个在两侧都透明的渐变。只是不带渐变。有图。
我也尝试过使用 box-shadow
和 radial-gradient
,但我想不通。
有没有可能只使用 CSS 在图像的左侧和右侧添加透明度的方法?
编辑:
示例:
您可以使用包装器 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>
资源
.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>
我发现的一种方法是使用伪 类 并将它们堆叠在一起。确保图像容器相对定位并且它应该适合您(参见示例)。
使用 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通道,非透明部分可以使用任何你想要的颜色。
迟到的答案,但其他人可以利用它。你可以只用一行在两边放一个透明的渐变:
background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(255, 0, 0, 1), rgba(0, 0, 0, 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>
tl;博士
有什么方法可以为 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));
这样做:
在此示例中,rgba() 中的最后一个参数定义了颜色的透明度。到目前为止,一切都很好。如果我将 right
放在 -webkit-linear-gradient
中,上图将显示相反的结果。 (你不说?!)
我想以某种方式合并两者,并创建一个在两侧都透明的渐变。只是不带渐变。有图。
我也尝试过使用 box-shadow
和 radial-gradient
,但我想不通。
有没有可能只使用 CSS 在图像的左侧和右侧添加透明度的方法?
编辑:
示例:
您可以使用包装器 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>
资源
.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>
我发现的一种方法是使用伪 类 并将它们堆叠在一起。确保图像容器相对定位并且它应该适合您(参见示例)。
使用 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通道,非透明部分可以使用任何你想要的颜色。
迟到的答案,但其他人可以利用它。你可以只用一行在两边放一个透明的渐变:
background: linear-gradient(to right, rgba(0, 0, 0, 0), rgba(255, 0, 0, 1), rgba(0, 0, 0, 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>