Split the surface into N vertical segments, set each segment's transform-origin to its left (or right) edge, and rotate it with rotateY. For the fold to zigzag naturally — peak, valley, peak, valley — alternate segments must rotate in opposite directions: if one folds to −140°, the next must fold to +140°, so they stack like an accordion instead of overlapping flat.
Give the parent a perspective and keep transform-style: preserve-3d on each segment so the rotation reads as dimensional rather than collapsing flat. A more faithful version (map folds, folding report cards) nests each segment's DOM inside the previous one so rotation compounds and even the folded thickness shows — but for a simple transition effect, segments placed side by side is enough.
Give each segment a short stagger (30–60ms) so the unfold time scales with segment count — it reads as sweeping open rather than popping flat all at once.
When to use
Use it where the physical act of folding and unfolding fits the content — maps, infographics, menus. An ordinary accordion component (an expanding list) doesn't need a full 3D fold.