For years, border-radius was the only tool we had for shaping corners in CSS. It could round them – and that was about it.
Every bevel, notch, or squircle required SVGs, images, or clip-path workarounds that broke borders and shadows. The new corner-shape property changes that – six corner geometries, animations between them, and borders that actually follow the shape.
roundsquirclebevelscoopnotchsquareWhat is corner-shape?
The corner-shape property controls how an element’s corners curve. It pairs with border-radius: the radius sets the corner size, corner-shape sets the geometry.
.element {
border-radius: 30px;
corner-shape: squircle;
}Without corner-shape, every rounded corner is an elliptical arc. With it, you get six shapes beyond the standard arc, plus a superellipse() function that lets you dial in anything between them. Each keyword maps to a specific superellipse(K) value:
| Keyword | superellipse(K) | Effect |
|---|---|---|
round | superellipse(1) | Standard rounded corner (default) |
squircle | superellipse(2) | Smooth blend of square and circle |
square | superellipse(infinity) | Sharp right angle, cancels border-radius |
bevel | superellipse(0) | Straight diagonal cut |
scoop | superellipse(-1) | Concave inward curve |
notch | superellipse(-infinity) | Sharp inward 90-degree corner |
Positive K values push the curve outward (convex). Negative values pull it inward (concave).
You can use any number. superellipse(0.5) gives you something between a bevel and a round, while superellipse(3) creates an even smoother squircle.
The corner-shape property has no effect unless border-radius is set to a non-zero value. Always pair them together.
Interactive corner-shape Examples
Things get interesting when you start mixing values and combining different shapes on each corner. The following playgrounds let you experiment in real time.
Superellipse Explorer
Drag the K slider to morph between all corner shapes. The keyword buttons snap to specific values.
Try values between the keywords. That’s where superellipse() really shines.
Per-Corner Playground
Each corner can have its own shape and radius. This playground gives you independent control over all four corners. Adjust the K value and radius for each one, then copy the generated CSS.
Try setting the top corners to bevel (K=0) and the bottom corners to scoop (K=-1) for a distinctive card shape. Or use squircle on all four with a large radius for iOS-style containers.
When you need different shapes per corner, you can use the shorthand or the individual longhand properties:
corner-shape: squircle square bevel round;
/* is equivalent to: */
corner-top-left-shape: squircle;
corner-top-right-shape: square;
corner-bottom-right-shape: bevel;
corner-bottom-left-shape: round;Real-World Use Cases
Here’s where it gets practical. These patterns were painful or impossible in pure CSS before.
Sale Tags
E-commerce sale tags typically need a pointed end, the classic “price tag” shape. Before corner-shape, this required SVGs or clip-path hacks that broke borders.
With corner-shape: round bevel bevel round and asymmetric border-radius values, you get the shape with real borders intact.
.sale-tag {
corner-shape: round bevel bevel round;
border-radius: 6px 42px 42px 6px / 6px 50% 50% 6px;
}Breadcrumb Navigation
The breadcrumb pattern works the same way. corner-shape: bevel with border-radius: 0 32px 32px 0 / 0 50% 50% 0 creates a clean chevron arrow without pseudo-elements or layered backgrounds.
.breadcrumb {
corner-shape: bevel;
border-radius: 0 32px 32px 0 / 0 50% 50% 0;
}Coupon Card with Scoop Cutouts
The scoop value creates concave curves, the same shape you see on physical coupons where the tear-off perforation curves inward.
By applying corner-shape: round round scoop scoop, the bottom corners scoop inward while the top stays rounded.
.coupon {
corner-shape: round round scoop scoop;
border-radius: 12px 12px 40px 40px;
}Borders, background clipping, and box-shadow all follow the scooped shape. That was never possible with clip-path alone.
Morphing Corner Animation
Since corner-shape values interpolate through their superellipse() equivalents, you can animate between them smoothly. This creates organic morphing effects that would require JavaScript path interpolation otherwise.
@keyframes morph {
0% { corner-shape: round; }
20% { corner-shape: squircle; }
40% { corner-shape: bevel; }
60% { corner-shape: scoop; }
80% { corner-shape: notch; }
100% { corner-shape: superellipse(3); }
}
.box {
border-radius: 50px;
animation: morph 4s ease-in-out infinite alternate;
}Notched Data Cards
The notch value creates sharp 90-degree inward cuts. Pair it with a generous border-radius and a colored top bar and you get something that used to require clipping masks.
.data-card {
corner-shape: notch;
border-radius: 20px;
}Scooped Event Ticket
Physical tickets curve inward where the stub tears off. Flip the scoop corners on each half and you get that perforated-edge look in pure CSS.
.ticket-left {
corner-shape: round scoop scoop round;
border-radius: 12px 24px 24px 12px;
}
.ticket-right {
corner-shape: scoop round round scoop;
border-radius: 24px 12px 12px 24px;
}Hall B - Row 4, Seat 12
Beveled Pricing Table
The bevel shape gives elements a chamfered feel – straight diagonal corners instead of curves. On a pricing table, that edge reads more assertive than the usual soft rounds.
.price-card {
corner-shape: bevel;
border-radius: 16px;
}- 5 Projects
- 10GB Storage
- Email Support
- Unlimited Projects
- 100GB Storage
- Priority Support
- Custom Domain
- Everything in Pro
- Unlimited Storage
- Dedicated Account Manager
- SLA Guarantee
corner-shape vs. clip-path
These two properties overlap but serve different purposes:
| Property | What it controls | Borders follow shape? | Shadows follow shape? | Support |
|---|---|---|---|---|
corner-shape | Corner geometry only | Yes | Yes | Chrome 139+ |
clip-path | Visual clipping mask | No | No | All modern browsers |
Use corner-shape when you need custom corners with proper border and shadow support. Use clip-path when you need broad browser support and don’t need borders on the clipped shape.
Browser Support
corner-shape is part of the CSS Borders and Box Decorations Module Level 4 specification. It has shipped in stable Chromium browsers but is not yet available in Firefox or Safari.
Progressive Enhancement with @supports
Use @supports to provide corner-shape styles only to browsers that understand them, while keeping a solid border-radius fallback for everyone else.
.card {
border-radius: 16px;
}
@supports (corner-shape: squircle) {
.card {
corner-shape: squircle;
border-radius: 24px;
}
}The transition and animation behavior is also gracefully degraded. Browsers that don’t support the property simply ignore the animation keyframes.
FAQs
Common questions about corner-shape:
corner-shape only takes effect when border-radius is set to a non-zero value. If border-radius is 0 or not specified, corner-shape has no visible effect.corner-shape shorthand accepts 1 to 4 values in clockwise order (top-left, top-right, bottom-right, bottom-left), just like border-radius. You can also use individual longhand properties like corner-top-left-shape: bevel to set specific corners.superellipse() equivalents, so CSS transitions and @keyframes animations work smoothly between any two corner shapes - for example, animating from round to bevel or from scoop to squircle.superellipse(K) takes a single numeric parameter that controls the curvature. Positive values create outward curves (superellipse(1) is round, superellipse(2) is squircle), negative values create inward curves (superellipse(-1) is scoop), and superellipse(0) creates a straight bevel cut. You can use any numeric value for fine-grained control.corner-shape, the border, outline, box-shadow, backdrop-filter, overflow clipping, and background-color/background-image all follow the defined corner shape. This is a key advantage over clip-path, which clips away borders and shadows.corner-shape is supported in Chrome 139+ and Edge 139+ only. There are no public timelines from Mozilla or Apple for Firefox or Safari support. Use @supports (corner-shape: squircle) for progressive enhancement so your designs work everywhere and get the upgraded corners where supported.corner-shape modifies the actual box geometry, so border, outline, and box-shadow all follow the new shape. clip-path only masks the visual output - borders and shadows are clipped away. Use corner-shape when you need styled corners with proper box-model behavior, and clip-path for complex clipping masks with broader browser support.Summary
I’ve been waiting for something beyond border-radius for a long time, and corner-shape delivers. Squircles, bevels, scoops, notches – and borders and shadows actually follow them. That alone makes it worth adopting.
Start using it behind @supports today. Browsers that don’t support it get normal rounded corners, and your users on Chrome and Edge get the upgraded experience.

