Last updated
What Does the Wave Generator Create?
The Wave Generator creates SVG wave shapes for use as section dividers, background elements, and decorative components in web design. Waves are resolution-independent, scale to any screen size, and can be colored with CSS. The generator outputs ready-to-use SVG code with configurable amplitude, frequency, phase, and color.
Basic Wave SVG Output
<!-- Simple wave divider between two sections -->
<div style="background: #3b82f6; padding: 4rem 0;">
<h1 style="color: white; text-align: center;">Hero Section</h1>
</div>
<!-- Wave divider (color matches section below) -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1440 120"
style="display:block; margin-top:-1px;">
<path fill="#ffffff" fill-opacity="1"
d="M0,64L48,69.3C96,75,192,85,288,80C384,75,480,53,576,48C672,43,768,53,864,64C960,75,1056,85,1152,80C1248,75,1344,53,1392,42.7L1440,32L1440,120L1392,120C1344,120,1248,120,1152,120C1056,120,960,120,864,120C768,120,672,120,576,120C480,120,384,120,288,120C192,120,96,120,48,120L0,120Z">
</path>
</svg>
<p>Content section below the wave</p>
</div>
Wave Parameters
Amplitude (wave height):
Low (20px): ~~~~~~~~~~~~~~~~~~~~ gentle, subtle
Medium (60px): ∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿∿ balanced
High (120px): ⌣⌣⌣⌣⌣⌣⌣⌣⌣⌣⌣⌣⌣⌣⌣⌣ dramatic
Frequency (number of waves):
1 wave: one large sweeping curve across the full width
2 waves: two medium curves
3 waves: three smaller curves (most common)
5 waves: many small ripples
Phase (horizontal offset):
0°: wave starts at center (flat)
90°: wave starts at peak
180°: wave starts at trough
270°: wave starts at valley
Multi-Layer Wave Effect
<!-- Three stacked waves for depth effect -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1440 200">
<!-- Back layer (most transparent) -->
<path fill="#3b82f6" fill-opacity="0.2"
d="M0,96L60,112C120,128,240,160,360,160C480,160,600,128,720,112C840,96,960,96,1080,112C1200,128,1320,160,1380,176L1440,192L1440,200L0,200Z">
</path>
<!-- Middle layer -->
<path fill="#3b82f6" fill-opacity="0.5"
d="M0,128L60,117.3C120,107,240,85,360,90.7C480,96,600,128,720,133.3C840,139,960,117,1080,106.7C1200,96,1320,96,1380,96L1440,96L1440,200L0,200Z">
</path>
<!-- Front layer (most opaque) -->
<path fill="#3b82f6" fill-opacity="1"
d="M0,160L60,149.3C120,139,240,117,360,112C480,107,600,117,720,128C840,139,960,149,1080,144C1200,139,1320,117,1380,106.7L1440,96L1440,200L0,200Z">
</path>
</svg>
Animated Wave
<!-- Animated flowing wave -->
<style>
.wave-animation {
animation: wave-move 8s linear infinite;
}
@keyframes wave-move {
0% { transform: translateX(0); }
100% { transform: translateX(-50%); }
}
</style>
<div style="overflow: hidden; height: 120px;">
<svg class="wave-animation"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 2880 120"
style="width: 200%; height: 100%;">
<!-- Doubled path for seamless loop -->
<path fill="#3b82f6"
d="M0,64L48,69.3C96,75,192,85,288,80C384,75,480,53,576,48C672,43,768,53,864,64C960,75,1056,85,1152,80C1248,75,1344,53,1392,42.7L1440,32
L1440,64L1488,69.3C1536,75,1632,85,1728,80C1824,75,1920,53,2016,48C2112,43,2208,53,2304,64C2400,75,2496,85,2592,80C2688,75,2784,53,2832,42.7L2880,32
L2880,120L0,120Z">
</path>
</svg>
</div>
Wave as CSS Background
/* Use SVG wave as CSS background-image */
.wave-section {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 120'%3E%3Cpath fill='%233b82f6' d='M0,64L48,69.3C96,75,192,85,288,80C384,75,480,53,576,48C672,43,768,53,864,64C960,75,1056,85,1152,80C1248,75,1344,53,1392,42.7L1440,32L1440,120L0,120Z'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: bottom;
background-size: cover;
padding-bottom: 120px;
}
Wave Orientations
Top wave (divides sections, wave at top):
<svg style="transform: rotate(180deg)">...</svg>
Bottom wave (wave at bottom, most common):
<svg>...</svg>
Left wave (vertical divider):
<svg style="transform: rotate(90deg)">...</svg>
Inverted wave (concave instead of convex):
<svg style="transform: scaleY(-1)">...</svg>
Gradient Wave
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1440 120">
<defs>
<linearGradient id="waveGradient" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:#3b82f6;stop-opacity:1" />
<stop offset="100%" style="stop-color:#8b5cf6;stop-opacity:1" />
</linearGradient>
</defs>
<path fill="url(#waveGradient)"
d="M0,64L48,69.3C96,75,192,85,288,80C384,75,480,53,576,48C672,43,768,53,864,64C960,75,1056,85,1152,80C1248,75,1344,53,1392,42.7L1440,32L1440,120L0,120Z">
</path>
</svg>
React Component
// WaveDivider.tsx
interface WaveDividerProps {
color?: string;
flip?: boolean;
}
export function WaveDivider({ color = '#3b82f6', flip = false }: WaveDividerProps) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 1440 120"
style={{ display: 'block', transform: flip ? 'scaleY(-1)' : 'none' }}
>
<path
fill={color}
d="M0,64L48,69.3C96,75,192,85,288,80C384,75,480,53,576,48C672,43,768,53,864,64C960,75,1056,85,1152,80C1248,75,1344,53,1392,42.7L1440,32L1440,120L0,120Z"
/>
</svg>
);
}
// Usage
<WaveDivider color="#1e40af" />
<WaveDivider color="#ffffff" flip />
Common Use Cases
- Section dividers between hero and content areas
- Smooth color transitions between page sections
- Decorative footer backgrounds
- Animated background elements for landing pages
- Visual separators in marketing and SaaS websites