14 CSS Wave Section Dividers

14 hand-coded CSS wave section dividers — inline SVG paths, clip-path: polygon() without SVG, mask-image data-URI, gradient masks, stacked multi-color layers, inverted curves, asymmetrical organic shapes, dark-mode light-dark() variants, animated sine transitions, and a vertical seam for split-screen layouts. The drop-in replacement for Elementor / Divi / WPBakery shape dividers — no plugin, no JavaScript, no CLS. Scoped under .wsd-NN for no-collision pasting, prefers-reduced-motion guarded, framework-agnostic.

12 pure CSS2 light JSPublished

Related20 CSS Diagonal Sections26 CSS Dividers22 CSS Split Screen Layouts31 CSS Hero Sections25 CSS Footer Designs

CSS SVG wave section divider pure CSS — preview
01 / 14Pure CSS

CSS SVG wave section divider pure CSS

The baseline everyone actually needs: a smooth, dependency-free wave that breaks the straight line between two coloured sections. One inline SVG path, one CSS rule, no plugin, no JavaScript, no layout shift — the drop-in replacement for a page-builder shape divider.

Published

Animated CSS wave section divider for landing page — preview
02 / 14Pure CSS

Animated CSS wave section divider for landing page

Continuous liquid motion for SaaS and agency hero sections: two identical wave tiles slide sideways forever so the crest never appears to end, creating a calm ocean-drift that keeps a landing page alive without a canvas, a library or a single frame of JavaScript.

Published

Responsive CSS SVG wave divider bottom of hero section — preview
03 / 14Pure CSS

Responsive CSS SVG wave divider bottom of hero section

A dark-mode hero whose wave sits perfectly on its bottom edge and scales fluidly from a 320px phone to a 2560px display — with the wave height driven by clamp() so the curve never flattens into a smear on desktop or eat half the screen on mobile.

Published

Stacked multi color SVG wave section divider CSS — preview
04 / 14Pure CSS

Stacked multi color SVG wave section divider CSS

Two to three offset waves in tinted layers, so the transition between background colours reads as depth rather than a line. The staple move for SaaS pricing pages and agency sites that need a rich section change without an image.

Published

CSS wave section divider footer transition — preview
05 / 14Pure CSS

CSS wave section divider footer transition

The seamless hand-off into a dark footer: a curved cutout at the top of the footer scoops the page content into it, so the footer feels like the bottom of a single continuous surface instead of a bolted-on slab.

Published

Pure CSS clip path wave divider without SVG — preview
06 / 14Pure CSS

Pure CSS clip path wave divider without SVG

For engineers who refuse to ship inline SVG in their markup: three CSS-only ways to cut a wave — modern clip-path: path(), a repeating radial-gradient mask, and an ellipse curve — all with no extra DOM node and nothing for the HTML payload to carry.

Published

Inverted curve SVG wave divider CSS — preview
07 / 14Pure CSS

Inverted curve SVG wave divider CSS

Concave dips that pull the eye downward into a CTA. Instead of the wave bulging outward, the edge scoops inward — a shape that visually funnels attention toward whatever sits at the pinch point, which is why conversion-focused pages use it around signup banners.

Published

CSS wave divider full width responsive mobile fix — preview
08 / 14CSS + JS

CSS wave divider full width responsive mobile fix

The bug-fix demo: side-by-side broken and fixed dividers so you can see exactly what causes the white gap, the hairline seam and the horizontally smeared curve on narrow screens — plus a live viewport squeeze slider that reproduces the failure without resizing your browser.

Published

CSS gradient wave section divider background mask — preview
09 / 14Pure CSS

CSS gradient wave section divider background mask

A mesh-gradient section whose edge is cut into a wave by a mask, so the gradient itself is the divider. This is the 2027 look: no flat fills, no visible seam, just a coloured field that ends in a curve — and it works with animated gradients too.

Published

Asymmetrical organic SVG section wave CSS — preview
10 / 14Pure CSS

Asymmetrical organic SVG section wave CSS

Non-repeating, hand-drawn-feeling curves for editorial and brand-showcase sites. Symmetry reads as template; asymmetry reads as art direction — these paths deliberately break the mirror so each section edge looks authored rather than generated.

Published

Dark mode CSS wave divider color match — preview
11 / 14CSS + JS

Dark mode CSS wave divider color match

Three ways to make a wave follow your theme automatically — a working light/dark toggle with a currentColor wave, a prefers-color-scheme version with no JavaScript at all, and the modern light-dark() one-liner. Never hard-code a wave fill again.

Published

CSS animated sine wave section divider transition — preview
12 / 14Pure CSS

CSS animated sine wave section divider transition

A mathematically correct sine wave — sampled from y = A·sin(x) rather than eyeballed with bezier handles — animated as a travelling waveform. The geometric, signal-processing look that tech, audio and web3 landing pages keep asking for.

Published

CSS wave section divider with overlay background image — preview
13 / 14Pure CSS

CSS wave section divider with overlay background image

A crisp wave sitting over a full-bleed photo or video hero, with the contrast scrim, focal-point cropping and text legibility handled properly — the combination that usually goes wrong when a divider is dropped on top of imagery.

Published

Vertical wave CSS divider side navigation — preview
14 / 14Pure CSS

Vertical wave CSS divider side navigation

The wave rotated 90°: a curved vertical seam between a sidebar and the content column, for split-screen layouts and creative sidebars. Includes the container-query-driven collapse so the vertical wave becomes a horizontal one when the layout stacks on mobile.

Published

FAQ

Frequently asked questions

How do I add a CSS wave section divider without any JavaScript or plugin?
Use an inline SVG absolutely positioned on the seam between two sections. The SVG carries a single <path> filled with the colour of the section it flows into, stretched with width: 100% and preserveAspectRatio="none" so it fluidly adapts to any viewport instead of cropping. The whole divider costs zero requests, zero hydration, and produces zero CLS — unlike Elementor / Divi / WPBakery shape dividers which inject a script and measure the DOM at runtime. Set display: block on the SVG (otherwise the inline baseline leaves a 4-5px hairline gap on some browsers), and use pointer-events: none so the wave never steals clicks from buttons beneath it. Every demo in this collection follows this baseline pattern in Demo 01.
How do I make a CSS wave divider without SVG using clip-path only?
Use clip-path: polygon(...) on the container itself — no SVG element needed. The polygon() function accepts a list of percentage points that trace the wave shape; browsers rasterise it composited on the GPU, so scrolling and resize are jank-free. The trade-off vs SVG: polygon() is a discrete list of straight-line points, so a smooth curve requires ~40-60 vertices to look organic (SVG's <path> uses Bézier curves so 4-6 control points produce the same smoothness). Demo 06 in this collection shows three clip-path polygon variants at 40, 60, and 100 points so you can pick the vertex count that balances smoothness vs stylesheet weight for your project. Browser support: clip-path: polygon() is universal since 2018 (Chrome 55+, Safari 11+, Firefox 54+); the path() function inside clip-path which lets you use full SVG path syntax is Chrome 88+, Safari 13.1+, Firefox 97+ — still safe for modern audiences but check for legacy support before using.
How do I fix the mobile 'white gap' or 'hairline seam' bug on a full-width CSS wave divider?
Three fixes, one root cause. The 'white gap' between the wave and the next section comes from three sources that stack: (1) the inline SVG element defaults to display: inline, which reserves inline-baseline space that shows as a 4-5px transparent strip below the SVG — fix with display: block on the <svg>. (2) The default preserveAspectRatio="xMidYMid meet" preserves the source aspect ratio and center-crops horizontally, which on very wide viewports leaves gaps on the sides — fix with preserveAspectRatio="none" to force the SVG to squash to whatever width the parent gives it. (3) Sub-pixel rounding on some retina and Android displays: even after fixing (1) and (2), a 0.5px transparent hairline appears where the SVG bottom edge meets the next section — fix by extending the wave path 1px BELOW the viewBox floor (e.g. L1440,121 L0,121 Z instead of L1440,120 L0,120 Z) so the fill always overlaps the seam. Demo 08 in this collection documents all three fixes and ships a bulletproof pattern that works on iOS Safari, Android Chrome, and Firefox mobile.
How do I create a CSS wave divider that transitions between two gradients instead of two solid colours?
Use SVG's <linearGradient> or <radialGradient> as the wave's fill attribute — the wave path itself gets the gradient, so as the wave curves it reveals the gradient underneath in the exact shape of the curve. Alternatively, use mask-image with a data-URI SVG mask: apply a linear or radial gradient background to the section, then mask its top edge with the wave shape — the gradient shows through only where the mask allows. Demo 09 in this collection uses both techniques so you can pick whichever fits your CSS architecture. Note: mask-image still needs the -webkit-mask-image prefix for older Safari (pre-15.4) — the demos include both forms.
How do I make a CSS wave divider that respects dark mode?
Two approaches. (1) Use light-dark() — the newest and cleanest: fill: light-dark(oklch(0.28 0.06 264), oklch(0.16 0.04 264)) — the browser auto-picks the light or dark value based on the user's color-scheme preference. Requires color-scheme: light dark on the root and browsers that support light-dark (Chrome 123+, Safari 17.5+, Firefox 120+). (2) For legacy support, use @media (prefers-color-scheme: dark) to override CSS custom properties: define --next: oklch(0.97 0.01 264) for light mode, then reassign inside the media query. The wave path uses fill: currentColor (or fill: var(--next)) so the single token swap re-themes the whole divider. Demo 11 in this collection shows both patterns side by side, so you can compare the modern one-liner vs the media-query approach and pick what fits your browser-support baseline.
Do CSS wave section dividers hurt Core Web Vitals (CLS / LCP / INP)?
No — inline SVG waves are the fastest possible shape divider pattern. CLS (Cumulative Layout Shift): the divider's height is fixed at authoring time via aspect-ratio, height, or a clamp()ed height. No JS measures the DOM after paint, so nothing reflows — CLS impact is exactly zero. LCP (Largest Contentful Paint): inline SVG is parsed with the HTML, no network request, no image decode — the divider paints in the same frame as the surrounding text, adding nothing to LCP. INP (Interaction to Next Paint): waves are decorative only, with pointer-events: none and no event handlers — they contribute zero to the interaction budget. Contrast with plugin-based shape dividers (Elementor, Divi, WPBakery): those inject a script that measures element widths after paint, forces a layout reflow, and often re-renders the shape on window resize — that's a real CLS + INP hit that a pure-CSS/SVG wave avoids entirely. This is why every demo in this collection ships the inline-SVG or clip-path pattern with zero JavaScript in the primary variant.
How do I add a wave divider between a hero section and a testimonial or feature section on a SaaS landing page?
SaaS landing page pattern (Stripe / Linear / Vercel style): place the wave at the BOTTOM of the hero, filled with the colour of the section that follows (usually a light section following a dark hero). The wave becomes the top edge of the next section drawn on top of the previous one, not a graphic sitting between two blocks. Recommended height: 80-120px for a subtle transition, 140-200px for a more editorial break. Demo 03 (responsive hero-bottom wave) and Demo 12 (animated sine wave transition) both target this exact scenario. For maximum trust signal on tier-1 SaaS traffic, pair the wave with a full-width customer-logo bar or a subhead like 'Trusted by 10,000+ engineering teams' in the next section — the wave leads the eye down to the social proof. Demo 02 (animated landing page wave) includes a two-line 'Trusted by' pattern below the wave that you can adapt as-is for your own landing page.
How do I add a wave divider above a footer for a fintech, real estate, or law firm landing page?
The footer transition pattern is one of the highest-CPM applications of a wave divider — fintech / real-estate / legal landing pages typically have a dark navy or deep-slate footer with a light-coloured content section above it, and a wave at that seam makes the page feel authored rather than templated. Demo 05 (footer transition) ships a pattern that inverts on scroll — the wave arc points UP toward the content section, drawing the eye up to the CTA above the fold and creating a natural stopping point before the footer's legal / compliance links. For law firm sites specifically, keep the wave amplitude subtle (max 60-80px) so it reads as professional rather than playful — see ABA Rule 7.1 guidance on law firm marketing tone. For fintech landing pages (Robinhood / Coinbase / Wealthfront style), a slightly deeper wave (100-140px) matches the current design language, and pairing the wave with a gradient fill (Demo 09) adds visual richness without adding weight. Real estate landing pages (Zillow / Redfin style) benefit from asymmetrical organic waves (Demo 10) that echo the softer, home-like brand tone.

Related collections

15 CSS Aspect Ratio Demos preview

15 CSS Aspect Ratio Demos

15 hand-coded CSS aspect-ratio demos for video embeds, product galleries, IAB ad slots, native dialogs, and CLS-safe placeholders: 16:9 iframe YouTube embed with click-to-load facade + up-next rail, 21:9 full-screen hero video with min-height/max-height:100svh guardrails + Ken Burns drift, 1:1 Instagram-style square grid with 2×2 feature tile, 4:3 magazine card image cover, 9:16 vertical stories rail (TikTok/Reels/Shorts pattern) with scroll-snap + segment bars, 4:5 apparel product image gallery with radio-driven state + 1:1 thumbnails, 1:1 zoom thumbnail carousel with pointer-tracked --zx/--zy magnifier, prevent-layout-shift placeholder with live PerformanceObserver CLS meter (before/after side-by-side lab), dynamic content fallback with three policies (bend/strict/auto) via :has() toggle, IAB ad banner slots (728×90 leaderboard, 300×250 medium rectangle, 300×600 half-page, 320×50 mobile) with skeletons + container-query mobile swap, responsive modal dialog sized min(92vw, 88svh×16/9, 1080px) with @starting-style animation, responsive OpenStreetMap iframe wrapper with 16:9 → 1:1 container-query narrow swap, media query orientation live HUD + resize:both container-ratio playground, object-fit logo cloud with contain/cover/fill switcher via :has(), and side-by-side padding-top hack (height:0 + padding-top:56.25%) → modern aspect-ratio migration comparison with live ratio picker. 11 truly Pure CSS + 4 with a tiny optional vanilla JS snippet (facade swap, pointer magnifier, CLS meter, native dialog). Every demo is scoped under a unique .car-NN prefix so it drops into any project without CSS collisions, ships prefers-reduced-motion guards, and is framework-agnostic (works as-is in React, Vue, Svelte, Astro, Next.js, Remix, or plain HTML).

6 CSS Bento Grid Layouts preview

6 CSS Bento Grid Layouts

6 production CSS bento grid layouts with 12 hand-coded designs — Apple-style product showcase, SaaS feature value-prop matrix, analytics dashboard overview, creative portfolio, e-commerce category hub, and link-in-bio social hub. Each topic ships 2 sub-variants side-by-side so visitors see both a keynote aesthetic and a paper-doc variant at once. Container queries, CSS Grid, zero dependencies, copy-paste ready.

20 CSS Blog Layouts preview

20 CSS Blog Layouts

20 hand-coded CSS blog and editorial layouts for magazine homepages, news sites, personal archives, newsletter back-issues, recipe and podcast blogs, developer tutorials, and long-form journalism. Covers a magazine homepage with hero plus editor-picks rail, a news homepage with breaking-news ticker, blog archives with sticky year separators, Substack-style issue-numbered archives, recipe card grids with prep-time badges, podcast episode lists with waveforms, long-form articles with scroll-driven reading progress, drop caps and floated pull quotes via first-letter, Medium-style 65ch centred reader layouts, dev tutorials with a sticky code panel beside prose, interview transcripts with alternating speakers, case-study pages with stat counters, video blogs with an episode rail, full-bleed photo essays, news articles with sticky related-stories sidebars, documentation pages with prev/next chapter nav, a standalone blog post card, a scroll-snap category filter bar, an inline newsletter callout that breaks out of the prose column, and a horizontal featured-post rail. 12 are pure CSS with zero JavaScript. Every layout is scoped under a .bl-NN prefix for no-collision pasting, guards prefers-reduced-motion, and ports unchanged to React, Vue, Svelte, Astro, Next.js and Tailwind.

Search CodeFronts

Loading…