Skip to main content
CSS Tip

A fancy frame with wavy borders

Place your image inside a fancy frame! Wavy borders on all the sides 🤩

CSS-only images with wavy borders on all the sides

img {
--s: 40px; /* control the size of the wave */
--w: 250px; /* preferred image width */
--c:#CD8C52;

width: round(var(--w),2*var(--s));
aspect-ratio: 1;
object-fit: cover;
padding: var(--s);
border-radius: calc(1.5*var(--s));
--R:calc(var(--s)/sqrt(2)) at;
--g:radial-gradient(var(--R) 50%,var(--c) calc(100% - 1px),#0000)
0 0/calc(2*var(--s)) calc(2*var(--s));
--_c:#0000 100%,var(--c) calc(100% + 1px);
--_b:calc(2*var(--s)) calc(51% - var(--s)/2) repeat-x;
background: var(--g),
radial-gradient(var(--R) 50% calc(100% + var(--s)/2),var(--_c))
var(--s) calc(100% - var(--s)/2)/var(--_b),
radial-gradient(var(--R) 50% calc( var(--s)/-2),var(--_c))
var(--s) calc( var(--s)/2)/var(--_b);
--_m:var(--s)/calc(51% - var(--s)/2) calc(2*var(--s)) repeat-y;
mask: var(--g),
radial-gradient(var(--R) calc(100% + var(--s)/2) 50%,var(--_c))
calc(100% - var(--s)/2) var(--_m),
radial-gradient(var(--R) calc( var(--s)/-2) 50%,var(--_c))
calc( var(--s)/2) var(--_m);
}

See the Pen CSS-only wavy edges by Temani Afif (@t_afif) on CodePen.