在背景图上加一层渐变层

svg

Posted by ddxg on February 10, 2018

在背景图上加一层渐变层

有时需要在背景图片上结一层渐变的效果,是的背景看起来更加好看。 可以使用两张图片重叠在一起的方式实现,但是感觉有点麻烦。也可以使用background-image 添加两张背景图片。感觉第二种方法比较简洁一些。

背景图中,可以通过background-position 来对多个背景进行定位。 写法如下:

background:url("haoroomsCSS1_s.jpg") 0 0 no-repeat,
                     url("haoroomsCSS2_s.jpg") 200px 0 no-repeat,
                     url("haorooms.jpg") 400px 201px no-repeat;

或者:

background-image:url("1.jpg"),url("2.jpg"),url("3.jpg");
background-repeat: no-repeat, no-repeat, no-repeat;  
background-position: 0 0, 200px 0, 400px 201px;  

如果背景重叠,只会显示第一种背景,要达到蒙层的效果,显示在上面的图片必须要设置透明度,不然后面的背景是看不到的。

要实现的效果: 外层div的背景是里面的图片,背景上面加一些渐变的效果

<div class="tt">
    <img src="http://file.ihuayue.cn/group1/M00/0E/1E/Chtgd1onVniAdIERAAFh1V-5AnM171_120x160.jpg">
</div>


.tt { 
    display: flex;
    align-items: center;
    justify-content: center;
    width: 300px;
    height: 450px;
    background-image: 
    linear-gradient(to bottom, rgba(255,225,255,0) 70%, #fbfbfb 100%), 
    linear-gradient(135deg, rgba(84,225,255,0.8) 0%, rgba(170,136,151,0.65) 50%, rgba(255,47,47,0.5) 100%), 
    url(http://file.ihuayue.cn/group1/M00/0E/1E/Chtgd1onVniAdIERAAFh1V-5AnM171_120x160.jpg);
} 

这里写图片描述

背景上面的渐变效果如果比较复,通过css实现有点难度的话,也可以使用svg实现,有svg的编辑器,可以画出图像之后直接导出svg的代码,挺方便的。

// html
<div class="box">
    <img src="http://file.ihuayue.cn/group1/M00/0E/1E/Chtgd1onVniAdIERAAFh1V-5AnM171_120x160.jpg">
</div>

// css
.box {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 300px;
    height: 450px;
    background: url(./svg/avg.svg),
                url(http://file.ihuayue.cn/group1/M00/0E/1E/Chtgd1onVniAdIERAAFh1V-5AnM171_120x160.jpg);
    background-size: 100% 100%;
}

// svg
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" style="width: 100%;height: 100%;">
  <defs>
    <linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="100%">
      <stop offset="0%" style="stop-color:rgb(84,225,255);stop-opacity:0.8"></stop>
	    <stop offset="50%" style="stop-color:rgb(170,136,151);stop-opacity:0.65"></stop>
      <stop offset="100%" style="stop-color:rgb(255,47,47);stop-opacity:0.5"></stop>
    </linearGradient>
    <linearGradient id="grad2" x1="0%" y1="0%" x2="0%" y2="100%">
      <stop offset="70%" style="stop-color:rgb(255,225,255);stop-opacity:0"></stop>
      <stop offset="100%" style="stop-color:#fbfbfb;"></stop>
    </linearGradient>
  </defs>
  <rect x="0%" y="0%" width="100%" height="100%" fill="url(#grad1)"></rect>
  <rect x="0%" y="00%" width="100%" height="100%" fill="url(#grad2)"></rect>
</svg>

这里写图片描述

平时很少使用SVG 和 canvas,网上可以找到很多使用svg或者canvas制作的炫酷的特效图,用途还是挺多的,希望以后能够有意识的使用。

参考: 菜鸟教程中的svg教程

参考的例子

css3实现一个div设置多张背景图片及background-image属性

用一个DIV画图通过background-image叠加实现