Cards✨ Premium

Holographic Sticker Peel

A 208 px round sticker, 9 px white rim and three-layer holographic face, whose top-right corner lifts on hover and peels three quarters of the way on click: two polygon clip-paths interpolated over 550 ms, a metallic “roll” sitting on the fold line, an aria-pressed state — all the visuals in CSS, twelve lines of JS for the toggle.

CSSclip-pathClick

You'll get access to the interactive demo with a free account.

This effect is part of Effect.Labs — 811 vanilla effects, some free, some premium. Cards has 41 effects, including 6 free. Explore the category →

3 usage examples

Promo sticker — corner of a product card — Holographic Sticker Peel example 1

① Promo sticker — corner of a product card

WhenCard in a product listing: visual, name, struck price, and a “−20%” sticker hanging over the top-right corner.
WhyThis is the use the shipped CSS plans for (.pv-product rules): the sticker invites the gesture without stealing the card's click. At 120 px the roll stays readable (18 px tall on click) and the rim drops to 6 px.
SettingsSticker 120 × 120px in position: absolute on the corner, .hsp-face { border-width: 6px }, 1.45 rem motif, .5 rem sub-line, --hsp-dur: .45s.
Launch sticker — hero of a collection or a drop — Holographic Sticker Peel example 2

② Launch sticker — hero of a collection or a drop

WhenTwo-column hero: the “NEW · Drop 09.26” sticker on the left, the headline and sign-up link on the right.
WhyAt 200 px the three layers read — specular streak, stripes, conic iridescence — and the curve's overshoot shows. The sticker becomes the hero's object; since it has no back, peeling reveals the hero background, not content.
Settings200 px sticker, --hsp-ease: cubic-bezier(.32, 1.6, .46, 1) (stronger snap), 2.3 rem motif, original palette.
Peel to reveal — seal on a gift card — Holographic Sticker Peel example 3

③ Peel to reveal — seal on a gift card

WhenGift card: amount, validity, and a code hidden under a “SEALED” sticker.
WhyThe sticker only reveals what's behind it in the page: place the code in the area the cut uncovers (the top-right segment of the disc). A second click or Escape covers it again.
Settings150 px sticker, click polygon pushed to (0 0, 10% 0, 100% 90%, …) to uncover more, roll at 55% / 45% with height: 17%, 7 px rim, code positioned in the uncovered segment.

How it works

.hsp-sticker is a 208 × 208 px button with no background. Three layers: ::after (z 0), a ground-shadow disc — box-shadow: 0 10px 24px rgba(0,0,0,.45), growing on hover (0 16px 34px .55) and offset on click (6px 30px 48px .65); .hsp-face (z 2), the sticker itself: border: 9px solid #fff, border-radius: 50%, and three background-images blended with background-blend-mode: screen, overlay, normal — a 118° specular streak (white at 55% around 47%), 104° micro-stripes (6 px period: 1 px white 9%, 1 px white 5%) and the iridescent base conic-gradient(from 210deg at 42% 36%, c1 … c5, c1) driven by five variables (--hsp-c1 cyan #62e6ff, pink #ff8ae1, yellow #ffe95c, violet #b18cff, green #7dffc4). The “−20%” motif is 2.5 rem / 900 in #14141c ink; the sub-line .68 rem uppercase at opacity .78.

The peel is a clip-path on the face, with three five-vertex polygons: rest (0 0, 100% 0, 100% 0, 100% 100%, 0 100%) — the duplicated vertex keeps the count constant, the condition for the browser to interpolate; hover and focus (0 0, 74% 0, 100% 26%, …); click (0 0, 26% 0, 100% 74%, …). Transition --hsp-dur: .55s with --hsp-ease: cubic-bezier(.32, 1.35, .46, 1) — the second control point at 1.35 overshoots the target by a few percent before settling, the snap of a real sticker. Measured geometry: on hover the diagonal runs 38 px from the corner while the disc's edge is 43 px from it — it only cuts 4.8 px into the white rim; the visible lift comes from the roll. On click, 27% of the disc's area disappears. [aria-pressed="true"] .hsp-face also plays hsp-tug (.28 s, scale(1.022, .985) at 38%), the glue stretch.

The roll: .hsp-flap-wrap (z 3, border-radius: 50%; overflow: hidden — it clips to the die-cut — and filter: drop-shadow(-4px 6px 7px .38)) holds .hsp-roll, a pill 170% wide rotated 45° (translate(-50%,-50%) rotate(45deg)) painted like a cylinder (#565b66 → #aab0bc → #fff 34% → #d9dde4 → #8f95a2 → #4e525d) and tinted with an iridescent gradient in overlay. Its center follows the fold line: rest left: 104%; top: -4% (outside the disc, opacity 0), hover 87% / 13% with height: 9% (19 px), click 63% / 37% with 15% (31 px) — always the midpoint of the current diagonal, opacity arriving in .25 s. Beyond the roll nothing is drawn: the page background shows through — the sticker is lifted, it has no back.

The script: for each .hsp-sticker, a click flips aria-pressed; a keydown listener on document puts every sticker back on Escape. That's all — hover is CSS. prefers-reduced-motion: reduce brings the three transitions down to .01 s and removes the stretch; prefers-reduced-transparency: reduce replaces the holo layers with flat greys (#b8bec9 face, #9aa0ab roll). The CSS also ships rules for .pv-product (a “product card” layout: 108 px sticker in position: absolute; top: -34px; right: -26px, 6 px rim, 1.3 rem motif) and .hsp-high-contrast (mirror of a demo toggle) — leftovers from the catalog page, matched by no element of the sold HTML.

Accessibility

  • prefers-reduced-motion handled (.01 s transitions, stretch removed) and prefers-reduced-transparency handled (face and roll in flat greys) — both, which is rare in the catalog.
  • Semantics: a button with aria-pressed, so a toggle button announced as such; Enter and Space peel, Escape puts it back. But the face is aria-hidden: “−20% Summer Deal” is never read, only the shipped aria-label (in French, describing the gesture) is. Put the offer in the label: aria-label="Sticker −20%, summer deal — activate to peel it off".
  • Contrast measured (Chromium, pixels under the text, holo face at rest): motif #14141c 40 px on the face = 8.7:1 at minimum (AAA); sub-line #14141c at opacity .78, 10.9 px = 11.7:1 at minimum. Dark ink on light pastels: the right choice, no color to change — even on violet #b18cff, the darkest of the five, the motif holds 7:1.
  • Focus: :focus-visible draws outline: 3px solid #a855f7 at 8 px with border-radius: 50% — the ring follows the disc — and lifts the corner like hover (:focus-visible .hsp-face, .hsp-roll).
  • Touch: a tap = click = peeled; the “lifted corner” preview doesn't exist under a finger, the sticker goes straight to the peeled state. On iOS :hover sticks after the tap, but the click rule, declared later, wins. Target 208 px; -webkit-tap-highlight-color: transparent removes the grey flash. The Escape listener is global: it also resets stickers belonging to other components on the page.

Browser compatibility

Requires interpolated clip-path: polygon(), conic-gradient(), background-blend-mode, filter: drop-shadow() and CSS variables. The prefers-reduced-transparency media queries are simply ignored by browsers that don't know them. ES5 JavaScript, zero dependencies.

Chrome 69+✓ Full
Firefox 83+✓ Full
Safari 13.1+✓ Full
Edge 79+✓ Full
Mobile iOS 13.4+✓ Full (tap = peeled, no preview)
Android Chrome✓ Full (tap = peeled, no preview)

Without JavaScript, hover and focus still lift the corner, but nothing peels the sticker. Without conic-gradient, the whole background-image declaration is invalid: the disc keeps only its white rim — add background-color: #b8bec9 (the reduced-transparency fallback color). Without clip-path transitions, states jump at once.

The code

HTML structure to paste into your page (CSS + JS available with a premium account):

index.html — structure
<button class="hsp-sticker" id="hspDemo" type="button" aria-pressed="false" aria-label="Holographic sticker — hover to lift the corner, activate to peel it off">
  <span class="hsp-flap-wrap" aria-hidden="true">
    <span class="hsp-roll"></span>
  </span>
  <span class="hsp-face" aria-hidden="true">
    <span class="hsp-motif">-20%</span>
    <span class="hsp-motif-sub">Summer Deal</span>
  </span>
</button>
🔒 Unlock the full code — from €2.99 the first month

Full HTML + CSS + JS, copy-paste ready — with hundreds of premium effects.

Customize

Options passed to the API or data-* attributes:

Option / propertyDefaultEffect
Polygons (CSS — .hsp-face clip-path, three states) 74% / 26% on hover, 26% / 74% on click Where the fold line runs. Points 2 and 3 stay on the top and right edges; keep p and 100 − p for a 45° diagonal. Five vertices in every state, or no interpolation.
Roll (CSS — .hsp-roll left / top / height per state) 87% / 13% / 9% → 63% / 37% / 15% The roll's center must be the midpoint of the fold line: for a cut meeting the top edge at p%, left: (p + 100) / 2 %, top: (100 − p) / 2 %. Height grows with the amount of rolled material.
--hsp-dur / --hsp-ease (CSS — .hsp-sticker) .55s / cubic-bezier(.32, 1.35, .46, 1) Duration and curve of the three transitions. The 2nd parameter above 1 makes the overshoot: 1 = clean stop, 1.6 = quivering corner.
--hsp-c1 … --hsp-c5 (CSS — .hsp-sticker) cyan, pink, yellow, violet, green The five colors of the iridescent conic. Keep light pastels: the motif is dark ink and relies on a background at 7:1 or more. The roll has its own tint, independent.
Rim (CSS — .hsp-face border 9px #fff) 9px Thickness of the white die-cut. 6 px at 120 px diameter, 12 px for a thick sticker. The cut goes through it: on hover it's almost only the rim that gets cut.
Ground shadow (CSS — .hsp-sticker::after, three states) 0 10px 24px .45 → 0 16px 34px .55 → 6px 30px 48px .65 The peel also reads through the shadow, which shifts 6 px on click. Reduce the blur (24 → 12 px) on a light background.
Size (CSS — .hsp-sticker width / height) 208 × 208 px Polygons and roll are in % of the sticker and follow; the rim, the motif (rem) and the shadow (px) don't — at 120 px, set the rim to 6 px and the motif to 1.3 rem, as the shipped .pv-product rules do.

FAQ

Yes, it's the code's geometry. The hover cut (74% / 26%) removes a triangle whose hypotenuse runs 38 px from the square's corner; the disc's edge is 43 px from it: only 4.8 px of the white rim get cut. What shows is the roll (a 19 px band) and the growing shadow. For a bolder hover, switch to polygon(0 0, 64% 0, 100% 36%, …) with the roll at 82% / 18%.
Nothing planned: there is no back, the sticker has a single face and the container's background appears in the uncovered area — the segment of the disc beyond the fold line, 27% of its area on click. To reveal something, place it in the page under that area (a code, a note), as in the third example. The roll and its shadow stay clipped to the disc by .hsp-flap-wrap.
No timer: it toggles on every click and Escape puts back every sticker on the page (the listener is on document). Each sticker is independent — class selection, no id needed; the id="hspDemo" in the sold HTML serves no purpose, remove it when pasting several stickers so you don't duplicate an id.