SVG Wave Generator
Amplitude45px
Waves2
Smoothness20
Layers3
Height220px
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1440 220" width="100%" height="100%" preserveAspectRatio="none">
  <path fill="#06b6d4" fill-opacity="0.4" d="M 0 94.7 C 12 99.1, 48 114, 72 121.2 C 96 128.3, 120 134.8, 144 137.5 C 168 140.2, 192 140.2, 216 137.5 C 240 134.8, 264 128.3, 288 121.2 C 312 114, 336 103.5, 360 94.7 C 384 85.9, 408 75.4, 432 68.3 C 456 61.1, 480 54.6, 504 51.9 C 528 49.2, 552 49.2, 576 51.9 C 600 54.6, 624 61.1, 648 68.3 C 672 75.4, 696 85.9, 720 94.7 C 744 103.5, 768 114, 792 121.2 C 816 128.3, 840 134.8, 864 137.5 C 888 140.2, 912 140.2, 936 137.5 C 960 134.8, 984 128.3, 1008 121.2 C 1032 114, 1056 103.5, 1080 94.7 C 1104 85.9, 1128 75.4, 1152 68.3 C 1176 61.1, 1200 54.6, 1224 51.9 C 1248 49.2, 1272 49.2, 1296 51.9 C 1320 54.6, 1344 61.1, 1368 68.3 C 1392 75.4, 1428 90.3, 1440 94.7 L 1440 220 L 0 220 Z"/>
  <path fill="#06b6d4" fill-opacity="0.7" d="M 0 161.6 C 12 163.2, 48 170.6, 72 171.3 C 96 172, 120 169.9, 144 165.9 C 168 161.9, 192 154.6, 216 147.5 C 240 140.4, 264 130.7, 288 123.2 C 312 115.6, 336 107.2, 360 102.1 C 384 97, 408 93.1, 432 92.4 C 456 91.7, 480 93.8, 504 97.8 C 528 101.8, 552 109.1, 576 116.2 C 600 123.3, 624 133, 648 140.6 C 672 148.1, 696 156.5, 720 161.6 C 744 166.7, 768 170.6, 792 171.3 C 816 172, 840 169.9, 864 165.9 C 888 161.9, 912 154.6, 936 147.5 C 960 140.4, 984 130.7, 1008 123.2 C 1032 115.6, 1056 107.2, 1080 102.1 C 1104 97, 1128 93.1, 1152 92.4 C 1176 91.7, 1200 93.8, 1224 97.8 C 1248 101.8, 1272 109.1, 1296 116.2 C 1320 123.3, 1344 133, 1368 140.6 C 1392 148.1, 1428 158.1, 1440 161.6 L 1440 220 L 0 220 Z"/>
  <path fill="#06b6d4" fill-opacity="1" d="M 0 202.9 C 12 201.4, 48 198.5, 72 193.8 C 96 189.2, 120 181.9, 144 175.3 C 168 168.7, 192 160.4, 216 154.3 C 240 148.3, 264 142.2, 288 139 C 312 135.8, 336 134.2, 360 135.1 C 384 135.9, 408 139.5, 432 144.2 C 456 148.8, 480 156.1, 504 162.7 C 528 169.3, 552 177.6, 576 183.7 C 600 189.7, 624 195.8, 648 199 C 672 202.2, 696 203.8, 720 202.9 C 744 202.1, 768 198.5, 792 193.8 C 816 189.2, 840 181.9, 864 175.3 C 888 168.7, 912 160.4, 936 154.3 C 960 148.3, 984 142.2, 1008 139 C 1032 135.8, 1056 134.2, 1080 135.1 C 1104 135.9, 1128 139.5, 1152 144.2 C 1176 148.8, 1200 156.1, 1224 162.7 C 1248 169.3, 1272 177.6, 1296 183.7 C 1320 189.7, 1344 195.8, 1368 199 C 1392 202.2, 1428 202.3, 1440 202.9 L 1440 220 L 0 220 Z"/>
</svg>

SVG Wave Generator Online — Layered Wave Dividers for Section Backgrounds

Updated June 16, 2026
Share & Support

What's included

Features

Six one-click style presets — Calm, Smooth, Wavy, Peaks, Choppy, and Bold — to set amplitude and wave count instantly
Smooth sine-based waves rendered with Catmull-Rom bezier paths so curves stay flowing, never jagged
Five live sliders: amplitude, wave count, smoothness, layers, and height, all reflected in the preview in real time
Stack up to 5 translucent layers for a modern depth effect without exporting multiple images
Top or bottom edge placement so the same wave works beneath a hero or above a footer
Solid color or two-stop vertical linear gradient fill — pair it with a backdrop from our Mesh Gradient Generator
Randomize button shuffles phase, amplitude, and frequency for instant organic variations
Export to SVG markup, a CSS data-URI background, or a React component; convert raster art to vectors with our Image to SVG tool

About this tool

Generate Smooth, Layered SVG Wave Dividers — Adjust the Sliders, Copy the Code

Runs in your browser
No install or signup
Free forever

You want that soft curved transition between two page sections instead of a hard horizontal line — the kind of flowing wave divider you see beneath hero sections and above footers on modern landing pages. Hand-writing the SVG <path> bezier coordinates for a smooth wave is tedious and error-prone. This generator builds the path for you: drag the sliders, watch the live preview, and copy clean SVG, CSS, or React code.

Under the hood, each wave is generated by sampling a sine function across the full 1440-unit width and then converting those sample points into a smooth path using a Catmull-Rom to cubic-bezier conversion. That is why every shape stays flowing and continuous rather than jagged — the control points for each bezier segment are derived from the neighbouring sample points, so the curve passes smoothly through every peak and trough. The Amplitude slider scales the sine output, the Waves slider sets the sine frequency (how many full cycles fit across the width), and Smoothness changes how many points are sampled.

The layered effect stacks several wave paths of the same color at slightly offset baselines and phases, each drawn with a higher fill-opacity than the last. Because semi-transparent shapes overlap, you get a rich, tonal ribbon without exporting multiple images. Switch the edge between top and bottom, choose a solid fill or a two-stop linear gradient, and the path automatically closes to the correct side so the shape fills cleanly as a divider.

Exports cover the three ways people actually drop waves into a project: raw <svg> markup for pasting into HTML, a CSS `background-image` data-URI that needs no separate file, and a React component with attributes already converted to JSX camelCase (fillOpacity, stopColor). Everything runs in your browser — nothing is uploaded, and the tool keeps working offline once loaded.

Placing the wave on your page is straightforward. Give the parent section position: relative, then drop the exported SVG in as the last child with position: absolute; left: 0; bottom: 0; width: 100%. Because the markup uses preserveAspectRatio="none", the wave stretches edge to edge and stays flush against the section boundary at every breakpoint — no media queries needed. Use the Bottom edge for a wave that flows down out of a hero, and the Top edge for one that sits on top of the footer below. To animate it, export a wave wider than its container and run a CSS keyframe from translateX(0) to translateX(-50%) on an infinite linear loop so the crests roll sideways; give each layer a different duration for a parallax water effect — see our CSS Animation Generator for the keyframes. Vector paths animate on the GPU and stay sharp at any resolution, so a few hundred bytes of SVG replaces a heavy animated GIF or a stack of PNG exports.

Step by step

How to Use

  1. 1
    Start from a style presetPick one of the six presets — Calm, Smooth, Wavy, Peaks, Choppy, or Bold — to set a sensible amplitude and wave count in one click. The live preview updates instantly so you can see the shape of the divider before tweaking anything.
  2. 2
    Choose the edgeClick Bottom or Top to decide which way the wave faces. Bottom places the wave at the lower edge of the colored band — ideal beneath a hero section — while Top puts it at the upper edge, which works well sitting on top of a footer.
  3. 3
    Shape the wave with slidersDrag Amplitude to make the crests taller or flatter, Waves to set how many crests span the width, and Smoothness to control how rounded the curve is. Adjust Height to change the overall thickness of the divider band, and Layers to stack multiple translucent waves for a depth effect.
  4. 4
    Pick a color or gradientUse the color picker to set the wave fill. Tick "Use gradient fill" to reveal a second color picker and blend the wave from one color at the top to another at the bottom with a vertical linear gradient — match it to a palette from our Color Palette Generator.
  5. 5
    Randomize for variationsClick Randomize to shuffle the phase, amplitude, and wave count for a fresh organic shape. Keep clicking until you find a curve you like — every result stays a clean, smooth wave because the path is generated mathematically, not from random noise.
  6. 6
    Export your formatSwitch between the SVG, CSS, and React tabs. SVG gives raw markup to paste into HTML, CSS gives a background-image data-URI rule, and React gives a ready-to-use component with JSX attributes. Click Copy to grab the code.

Real-world uses

Common Use Cases

🌊
Add a flowing wave divider beneath your hero section
Drop the bottom-edge SVG at the foot of a colored hero band so it melts into the next section instead of ending on a hard line — the single most common landing-page use for wave dividers.
🎨
Create a layered, depth-rich section background
Stack 3–5 translucent layers in a brand color to build the tonal ribbon look seen on SaaS marketing pages. Combine it with a clipped shape from our CSS Clip-path Generator.
🦶
Sit a wave on top of your site footer
Switch to the top edge and place the wave above a dark footer so the page content flows down into it with a soft curved seam rather than a flat border.
🌈
Blend a gradient wave that matches your palette
Turn on gradient fill and pick two brand colors for a wave that transitions vertically — ideal for hero overlays. Generate a matching scheme with our Gradient Generator.
⚛️
Drop a reusable wave component into a React app
Copy the React export to get a self-contained component with JSX-safe attributes — render it at any section boundary in Next.js, Vite, or CRA and recolor it through props or wrapper styles.
💾
Embed a wave as a CSS background with zero extra requests
Use the CSS data-URI export to add a decorative wave entirely inside your stylesheet — no image hosting, no extra HTTP call. Shrink your final CSS with our CSS Minifier & Beautifier.

Got questions?

Frequently Asked Questions

An SVG wave divider is a vector shape placed between two page sections to replace a flat horizontal edge with a flowing curved transition. Because it is SVG it stays crisp at any size, scales to any width without pixelation, and weighs only a few hundred bytes. It is most often used beneath hero sections, between alternating content bands, and above footers.

Either paste the <svg> markup directly into your HTML at the bottom of a section and position it absolutely against the edge, or use the CSS export, which embeds the wave as a data-URI background-image on a div with a set height. The SVG approach keeps the cleanest DOM and lets you animate the path; the CSS approach keeps your markup tidy for purely decorative dividers.

Amplitude is the height of each crest and trough — higher amplitude means taller, more dramatic waves and low amplitude means a gentle ripple. Wave count is how many complete crests fit across the full width — more waves give a busier, choppier edge and fewer waves give long sweeping curves. Smoothness controls how rounded versus angular the curve appears.

Increasing the Layers slider stacks multiple wave paths of the same color at slightly different vertical offsets and phases, each drawn with a higher fill-opacity. The overlap of semi-transparent shapes creates a tonal, depth-rich ribbon effect popular on modern landing pages — without needing a separate image for each band.

Yes. The CSS tab produces a ready-to-paste rule that embeds the wave as a URL-encoded data-URI in background-image with background-size: cover so it fills its container. This keeps the wave inside your stylesheet with no extra HTTP request and no separate asset to host.

Select the React tab. The tool returns a complete function component with all attributes converted to JSX camelCase — fill-opacity becomes fillOpacity and stop-color becomes stopColor — so it compiles without warnings. Drop it in at any section boundary and recolor or resize it through props or wrapper styles. The same markup works in Next.js, Vite, and CRA.

Give the section position: relative, then add the wave as its last child with position: absolute, left: 0, bottom: 0, width: 100%. The exported SVG uses preserveAspectRatio="none" and width="100%", so it stretches edge to edge and the wave stays flush at any screen size. To overlap the next section, set a fixed SVG height and nudge it with a negative margin or translateY. For a wave that sits on top of the section below, export with the Top edge selected instead.

The export is static, but the SVG animates easily with CSS. The classic effect is a horizontal drift: export a wave wider than its container (or duplicate the path), then add a keyframe that runs transform: translateX(0) to translateX(-50%) on an infinite linear loop so the crests roll sideways. Because each layer is a separate path, give the front and back layers different durations for a parallax water look. You can also animate fill or opacity. Vector paths animate on the GPU and stay crisp at any size — no GIF needed.

An SVG wave is a few hundred bytes of text, scales infinitely without blur, and can be recolored by editing one attribute or animated with CSS. A PNG is many kilobytes, looks soft on high-DPI screens unless you ship a 2x version, and cannot be recolored without re-exporting. For a flat decorative divider, SVG wins on both performance and flexibility.

Yes — it is completely free with no sign-up, watermark, or limit, and all generation happens in your browser, so nothing is uploaded to a server. The tool keeps working offline once loaded, and the SVG you copy is yours to use in personal and commercial projects.