一、背景
有时候我们需要处理一些图片预览的情况,然后在一个图片列表中展示图片缩略图会遇到,如果图片是png格式的,背景透明但是图案是白色的,看不清怎么办呢?
二、实现
这里主要利用了
css
中的 background-image、background-position 、background-size属性实现的。
1.background-image
background-image 属性可以设置一个或者多个背景图,由逗号分隔的多个值来指定多个背景图像。
2.linear-gradient
我们通过 linear-gradient 来创建一个表示两种或多种颜色线性渐变的图片:
/*以上两个属性demo*/
.bg-img{
background-image:
linear-gradient(to bottom, rgba(255,255,0,0.5), rgba(0,0,255,0.5)),
url('https://mdn.mozillademos.org/files/7693/catfront.png');
}
引用mdn中的说明示例,让我们对
linear-gradient
属性有个概念,具体参考mdn文档 linear-gradient :
/* 渐变轴为45度,从蓝色渐变到红色 */
linear-gradient(45deg, blue, red);
/* 从右下到左上、从蓝色渐变到红色 */
linear-gradient(to left top, blue, red);
/* 从下到上,从蓝色开始渐变、到高度40%位置是绿色渐变开始、最后以红色结束 */
linear-gradient(0deg, blue, green 40%, red);
三、实现效果图
在前面熟悉了 background-image 和 linear-gradient 属性的基础上呢,我们就可以进行实现了。
1. 首先我们要利用
linear-gradient
创建两个图片
/*第一层:从45度开始灰色渐变到25%的位置,透明从0开始,到75%的位置,灰色从0开始到结束,这样有清晰的间隔线*/
linear-gradient(45deg, #eee 25%, transparent 0, transparent 75%, #eee 0, #eee)
/*第二层 这里为了举例看的清楚用的红色red,实际改成白色#fff*/
linear-gradient(45deg, #eee 25%, red 0, red 75%, #eee 0, #eee)
2. 接下来叠加在一起看效果:
background-image:
linear-gradient(45deg, #eee 25%, transparent 0, transparent 75%, #eee 0, #eee),
linear-gradient(45deg, #eee 25%, red 0, red 75%, #eee 0, #eee);
3. 设置
background-size
把上图的图片设置成
20px * 20px
的大小,铺满整个区域
background-size: 20px 20px;
4. 设置background-position
为每一个图片设置初始位置,因为每个图片大小是20px,位置偏移是图片大小的一半,是10px
background-position: 0 0, 10px 10px;
注意:
这里会发现background-position用逗号隔开了两个值,这里其实代表的是对于上面我们设置的 background-image 的两张图分别对应的初始位置。
如下图所看到的:
- 把第一层透明的区域从透明改成
,这样可以看到两图叠加的效果。第一层图片位移 rgba(0,0,0,.5)
。background-position: 0 0
- 第二层红色的图位移
叠加以后的效果。background-position: 5px 5px;
5.红色替换为白色,最终效果:
background-size: 20px 20px;
background-position: 0 0, 10px 10px;
background-image:
linear-gradient(45deg,#eee 25%,transparent 0,transparent 75%,#eee 0,#eee),
linear-gradient(45deg, #eee 25%, #fff 0, #fff 75%, #eee 0, #eee);