Corner Shapes
When to Use
Use
corner-shape: squirclefor iOS-style superellipse corners on Chrome 2025+. Useclip-path: polygon()for notched/beveled corners across all browsers. Always provide@supportsfallbacks.
Decision
| Client asks for... | Use... | Why |
|---|---|---|
| iOS-style squircle | corner-shape: squircle (Chrome 2025+) |
Native, no SVG or mask needed |
| Scooped/concave corners | corner-shape: scoop (Chrome 2025+) |
Inward-curving corners |
| Notched/cut corners | clip-path: polygon() |
Angled cuts at corners |
| Beveled corners | clip-path: polygon() |
Chamfered edges |
| Cross-browser squircle now | mask-image with SVG superellipse |
Works everywhere |
| Asymmetric rounding | 8-value border-radius |
e.g., 30% 70% 70% 30% / 30% 30% 70% 70% |
Pattern
/* Native squircle — Chrome 2025+ */
.card {
border-radius: 20px;
corner-shape: squircle;
}
/* Progressive enhancement with fallback */
.squircle {
mask-image: url("data:image/svg+xml,...");
mask-size: cover;
}
@supports (corner-shape: squircle) {
.squircle {
mask-image: none;
border-radius: 20px;
corner-shape: squircle;
}
}
/* Notched corners — all browsers */
.notched {
--notch: 12px;
clip-path: polygon(
var(--notch) 0, calc(100% - var(--notch)) 0,
100% var(--notch), 100% calc(100% - var(--notch)),
calc(100% - var(--notch)) 100%, var(--notch) 100%,
0 calc(100% - var(--notch)), 0 var(--notch)
);
}
/* Single top-right notch */
.ticket {
clip-path: polygon(0 0, calc(100% - 20px) 0, 100% 20px, 100% 100%, 0 100%);
}
Common Mistakes
- Using
corner-shapewithoutborder-radius—corner-shapemodifies howborder-radiusrenders; it needs a radius to work - Expecting
corner-shapein Firefox/Safari — Chromium-only; provide@supportsfallback - Using clip-path for simple rounding —
border-radiusis simpler, more performant, and supports box-shadow
See Also
- CSS Shapes & Decorative Geometry → broader shape techniques
- 3D Transforms → perspective on shaped cards
- Reference: Chrome: corner-shape