How to Create Folded Corners with CSS corner-shape

By

Introduction

Folded corners are a classic design trick that adds a tactile, paper-like feel to web elements. While clip-path is the usual go-to, the newer corner-shape property offers a simpler, more semantic alternative. This guide walks you through creating realistic folded corners using border-radius and corner-shape, supported natively in Chrome. No JavaScript, no extra markup—just clean CSS.

How to Create Folded Corners with CSS corner-shape
Source: css-tricks.com

What You Need

Step-by-Step Guide

Step 1: Set Up the HTML and CSS Variables

Start with an empty <div> in your HTML. In CSS, we define two custom properties that will control the fold’s size. These variables store the x-axis and y-axis coordinates—essentially the horizontal and vertical distances from the corner where the fold begins.

:root {
  --x-coord: 9rem;  /* horizontal fold depth */
  --y-coord: 5rem;  /* vertical fold depth */
}

div {
  width: 300px;
  height: 200px;
  background: #ff6b6b;
}

Using variables makes the fold easy to adjust and animate later. Note that each corner has two coordinates (like border-radius), and corner-shape determines how the line connects them.

Step 2: Create the Fold with border-radius and corner-shape

border-top-right-radius places the two coordinates at the top-right corner. By default, corner-shape is round, which draws a curved line. To get a sharp fold, we override it to bevel—this draws a straight diagonal line between the two points.

div {
  /* Apply coordinates to the top-right corner */
  border-top-right-radius: var(--x-coord) var(--y-coord);

  /* Draw a straight line instead of a curve */
  corner-top-right-shape: bevel;
}

Now the original element looks like a square with its top-right corner sliced off diagonally. This is the base of the fold.

Step 3: Add the Flip Side Using ::before

The folded corner needs a visible “flap” that mimics the underside of the paper. Use a ::before pseudo-element with content: "" to generate an empty box. Inherit the background from the parent, and set its width and height equal to the coordinates.

div {
  position: relative; /* needed for absolute positioning */
}

div::before {
  content: "";
  background: inherit;
  width: var(--x-coord);
  height: var(--y-coord);
  position: absolute;
  top: 0;
  right: 0;
  /* Flip the flap to create the folded look */
  transform: scaleY(-1);
  transform-origin: top right;
}

By placing the pseudo-element at the top-right corner and flipping it vertically (scaleY(-1)), we create a mirror image that looks like the paper has been folded over. The transform-origin ensures it flips from the correct point.

Step 4: Add Depth with box-shadow

A realistic fold often casts a subtle shadow. Add a box-shadow to the pseudo-element, scaling the blur radius relative to the variables so it stays proportional.

How to Create Folded Corners with CSS corner-shape
Source: css-tricks.com
div::before {
  box-shadow: 0 0 calc(var(--x-coord) * 0.1 + var(--y-coord) * 0.1) rgba(0,0,0,0.15);
}

This creates a soft shadow that makes the flap feel three-dimensional. Adjust the multiplier to your taste.

Step 5: Fine-Tune Positioning and Appearance

You may notice the flap doesn’t align perfectly with the bevel cut. Use clip-path on the pseudo-element to match the exact fold line:

div::before {
  clip-path: polygon(0 0, 100% 0, 0 100%);
}

This clips the flap into a triangle that only covers the folded area. Now the background of the flap matches the parent, and the fold appears seamless.

Step 6: Make It Responsive and Animatable

Because we used CSS variables, you can change the fold size on smaller screens or animate it on hover.

@media (max-width: 600px) {
  :root {
    --x-coord: 4rem;
    --y-coord: 2rem;
  }
}

div:hover {
  --x-coord: 12rem;
  --y-coord: 6rem;
  transition: --x-coord 0.3s, --y-coord 0.3s;
}

Note: Custom property transitions work in Chrome; other browsers may ignore them gracefully.

Tips for Best Results

Now you have a clean, CSS-only folded corner that works beautifully in supporting browsers. Experiment with different angles, shadows, and even animation to bring your designs to life.

Related Articles

Recommended

Discover More

Automate Your Cognitive Toil: A Step-by-Step Guide to Agent-Driven Development with GitHub CopilotVolvo EX30: The Luxury Electric Crossover That Underprices the Kia NiroSecuring AI Agents: The Hidden Risks of Tools and MemoryAMD Ryzen AI Halo Box Sparks Linux Driver Surge: Developers Get First Look at Strix Halo PlatformHow to Identify and Study a Prehistoric Twisted-Jaw Fossil