holo-card
Version:
A React component for holographic card effects
58 lines (46 loc) • 1.52 kB
CSS
.card {
--foil-brightness: 0.55;
}
.card[data-set="Normal"] .card_shine {
background-image: radial-gradient(
circle at var(--pointer-x) var(--pointer-y),
#fff 5%,
#000 50%,
#fff 80%
),
linear-gradient(-45deg, #000 15%, #fff, #000 85%), var(--foil);
background-blend-mode: soft-light, difference;
background-size: 120% 120%, 200% 200%, cover;
background-position: center center,
calc((100% * var(--pointer-from-left)))
calc((100% * var(--pointer-from-top))),
center center;
filter: brightness(var(--foil-brightness)) contrast(1.5) saturate(1);
mix-blend-mode: color-dodge;
opacity: calc((1.5 * var(--card-opacity)) - var(--pointer-from-center));
}
.card[data-set="Normal"] .card_glare {
opacity: var(--card-opacity);
background-image: radial-gradient(
farthest-corner circle at var(--pointer-x) var(--pointer-y),
hsla(0, 0%, 100%, 0.8) 10%,
hsla(0, 0%, 100%, 0.5) 20%,
hsla(0, 0%, 0%, 0.75) 90%
);
filter: brightness(0.7) contrast(1.5);
}
.card[data-set="Normal"] .card_glare::after {
content: "";
opacity: var(--card-opacity);
background-image: radial-gradient(
farthest-corner circle at var(--pointer-x) var(--pointer-y),
hsl(0, 0%, 100%) 10%,
hsla(0, 0%, 100%, 0.5) 20%,
hsla(0, 0%, 0%, 0.5) 120%
);
filter: brightness(1) contrast(1.5);
}
.card:not(.masked)[data-set="Normal"] .card_shine {
--foil: none;
clip-path: var(--clip-invert);
}