这是一款基于SVG的图片模糊水波纹特效。该特效使用SVG作为滤镜,为图片添加水波纹效果,在鼠标悬停在图片上面时,图片回复正常显示,效果非常炫酷。
使用方法
HTML代码
<div class="container"> <div class="grid-container"> <div class="grid-item photo1"> <img class="filter-image" src="./img/1.jpg"> </div> <div class="grid-item photo2"> <img class="filter-image" src="./img/2.jpg"> </div> <div class="grid-item photo3"> <img class="filter-image" src="./img/3.jpg"> </div> </div> </div> <svg> <defs> <filter id="crumple-effect-1"> <feTurbulence id="turbulence" type="fractalNoise" baseFrequency="0.1" numOctaves="5" result="turbulence"> <animate attributeName="baseFrequency" values="0.1;0.3;0.6;1.0" keyTimes="0;0.5;0.75;1" dur="15s" repeatCount="indefinite" /> </feTurbulence> <feDisplacementMap in2="turbulence" in="SourceGraphic" scale="0"> <animate attributeName="scale" values="0;20;50;100" keyTimes="0;0.5;0.75;1" dur="60s" repeatCount="indefinite" /> </feDisplacementMap> </filter> <filter id="crumple-effect-2"> <feTurbulence id="turbulence" type="fractalNoise" baseFrequency="0.02" numOctaves="5" result="turbulence"> <animate attributeName="baseFrequency" values="0.1;0.2" keyTimes="0;1" dur="10s" repeatCount="indefinite" /> </feTurbulence> <feDisplacementMap in2="turbulence" in="SourceGraphic" scale="0"> <animate attributeName="scale" values="30;60" keyTimes="0;1" dur="10s" repeatCount="indefinite" /> </feDisplacementMap> </filter> <filter id="crumple-effect-3"> <feTurbulence id="turbulence" type="fractalNoise" baseFrequency="0.02" numOctaves="5" result="turbulence"> <animate attributeName="baseFrequency" values="0.6;0.3;0.2;0.1" keyTimes="0;0.5;0.75;1" dur="15s" repeatCount="indefinite" /> </feTurbulence> <feDisplacementMap in2="turbulence" in="SourceGraphic" scale="0"> <animate attributeName="scale" values="0;50;75;100" keyTimes="0;0.5;0.75;1" dur="60s" repeatCount="indefinite" /> </feDisplacementMap> </filter> </defs> </svg>
CSS代码
.container { height: 80vh; margin: 0; place-items: center; background-color: aliceblue; } .grid-container { display: grid; gap: 20px 20px; grid-template-columns: auto auto auto; } .grid-item { padding: 20px; } .filter-image { text-align: center; width: 30vw; height: 60vh; object-fit: cover; background: white; padding: 10px 10px 35px; text-align: center; text-decoration: none; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3); transition: all 0.15s linear; z-index: 0; position: relative; transform: rotate(4deg); } .photo1, photo2 { padding: 1rem; filter: drop-shadow(0 2px 1px darkgrey); display: inline-block; } .photo1 { filter: url(#crumple-effect-1); } .photo2 { filter: url(#crumple-effect-2); } .photo3 { filter: url(#crumple-effect-3); } .photo1:hover, .photo2:hover, .photo3:hover { filter: sepia(50%); transform: rotate(-6deg); }
codepen网址:https://codepen.io/tommyho/pen/mdYJyvB