v147 · CSS · Layout · demo

Progress Steps

A checkout-style step indicator where each step is a chevron shape using border-shape. The border, background, and focus outline all follow the shape. Step forward and back — completed steps fill solid; the active step stays light. Without border-shape this requires CSS triangle hacks or separate SVG arrows.

Chrome 147+border-shape property. In older browsers the steps fall back to rectangular boxes with arrow separators.

Click Next / Back to advance through the checkout flow · border-shape keeps borders and shadows on the chevron geometry

border-shape: polygon(chevron) — Chrome 147+
Cart
2Shipping
3Payment
4Review
Shipping Address
Enter your delivery details. All fields marked * are required.
Old approach: rectangular steps + arrow separators
Cart
2. Shipping
3. Payment
4. Review

Separate arrow spans — not part of the step geometry, can't share the border/shadow.

/* Chevron step using border-shape */
.step {
  padding: 0.75rem 3rem 0.75rem 2rem;
  border: 2px solid black;

  /* border-shape redefines the box geometry */
  border-shape: polygon(
    0% 0%, calc(100% - 16px) 0%, 100% 50%,
    calc(100% - 16px) 100%, 0% 100%,
    16px 50%
  );
  /* border, background, shadow, outline all follow this shape */
}

/* Without border-shape: need CSS triangle hacks via ::before/::after,
   clip-path loses the border, box-shadow doesn't follow the clip */

see also

implementation reference

Need the exact API surface, compatibility boundaries, errors, lifecycle, and source links? Read the matching gendn reference ↗