03屈折ハイライトボタン
ボタンのガラス面に細い光の帯を重ね、マウスを乗せるとその光がtranslateXでボタンを一度横切り、リキッドガラスが屈折するようにきらめく。
使いどころメインCTAボタン、決済・登録ボタン
backdrop-filtertranslateX600ms

<main class="stage">
<button class="lb-btn lb-focal is-demo" type="button">
<span class="lb-btn__label">Get started</span>
</button>
</main>@use "../../../../site/static/demo-tokens" as *;
// ── 변수 3개 ──────────────────────────────────────────
$duration: $dur-enter;
$easing: $ease-out;
$color: $subject-cream;
@include stage($stage-orange);
.lb-btn {
position: relative;
overflow: hidden;
box-sizing: border-box;
padding: $sp-3 $sp-8;
border: 1px solid rgba(255, 255, 255, .4);
border-radius: $r-control;
background: rgba(255, 255, 255, .16);
backdrop-filter: blur(12px) saturate(160%);
-webkit-backdrop-filter: blur(12px) saturate(160%);
box-shadow: $shadow-press;
color: $subject-ink;
font: 700 14px/1 -apple-system, "Segoe UI", sans-serif;
cursor: pointer;
}
.lb-btn__label { position: relative; z-index: 1; }
// 굴절 하이라이트 — 좁은 빛줄기 레이어. transform 만 움직인다 (top/left 는 고정)
.lb-btn::before {
content: "";
position: absolute;
top: -20%; left: -40%;
width: 40%; height: 140%;
background: linear-gradient(100deg, transparent, $color, transparent);
opacity: .8;
transform: translateX(-40%) skewX(-18deg);
transition: transform $duration $easing;
}
// 실사용: 진짜 마우스 호버로 빛줄기가 한 번 지나간다
.lb-focal:hover::before { transform: translateX(340%) skewX(-18deg); }
// 데모 루프: is-demo 는 같은 이동을 keyframes 로 반복
@keyframes lb-sweep {
0%, 20% { transform: translateX(-40%) skewX(-18deg); }
60%, 100% { transform: translateX(340%) skewX(-18deg); }
}
.lb-btn.is-demo::before { animation: lb-sweep $dur-loop $easing infinite; }
@media (prefers-reduced-motion: reduce) {
.lb-focal:hover::before,
.lb-btn.is-demo::before { animation: none !important; transition: none !important; transform: translateX(-40%) skewX(-18deg) !important; }
}html, body {
margin: 0;
overflow: hidden;
}
.stage {
box-sizing: border-box;
min-height: 100vh;
display: grid;
place-items: center;
margin: 0;
background: #ff4d1f;
font-family: -apple-system, "Segoe UI", "Noto Sans KR", sans-serif;
padding: clamp(8px, 4vw, 24px);
}
.lb-btn {
position: relative;
overflow: hidden;
box-sizing: border-box;
padding: 12px 32px;
border: 1px solid rgba(255, 255, 255, 0.4);
border-radius: 12px;
background: rgba(255, 255, 255, 0.16);
backdrop-filter: blur(12px) saturate(160%);
-webkit-backdrop-filter: blur(12px) saturate(160%);
box-shadow: 0 6px 12px rgba(23, 20, 26, 0.32);
color: #17141a;
font: 700 14px/1 -apple-system, "Segoe UI", sans-serif;
cursor: pointer;
}
.lb-btn__label {
position: relative;
z-index: 1;
}
.lb-btn::before {
content: "";
position: absolute;
top: -20%;
left: -40%;
width: 40%;
height: 140%;
background: linear-gradient(100deg, transparent, #fff7e6, transparent);
opacity: 0.8;
transform: translateX(-40%) skewX(-18deg);
transition: transform 600ms ease-out;
}
.lb-focal:hover::before {
transform: translateX(340%) skewX(-18deg);
}
@keyframes lb-sweep {
0%, 20% {
transform: translateX(-40%) skewX(-18deg);
}
60%, 100% {
transform: translateX(340%) skewX(-18deg);
}
}
.lb-btn.is-demo::before {
animation: lb-sweep 2s ease-out infinite;
}
@media (prefers-reduced-motion: reduce) {
.lb-focal:hover::before,
.lb-btn.is-demo::before {
animation: none !important;
transition: none !important;
transform: translateX(-40%) skewX(-18deg) !important;
}
}import { CSSProperties } from "react";
import styles from "./LiquidGlassButton.module.scss";
type Vars = CSSProperties & {
"--duration"?: string;
"--easing"?: string;
"--color"?: string;
};
export interface LiquidGlassButtonProps {
duration?: string;
easing?: string;
color?: string;
}
export default function LiquidGlassButton({
duration = "600ms",
easing = "ease-out",
color = "#fff7e6",
}: LiquidGlassButtonProps) {
const style: Vars = {
"--duration": duration,
"--easing": easing,
"--color": color,
};
return (
<button className={styles.btn} style={style} type="button">
<span className={styles.label}>Get started</span>
</button>
);
}03 屈折ハイライトボタン — 計測 累積面積 3.422% · 動いたフレーム 10/23GODRICH オリジナル · SCSS と React は zip に同梱 · CSS グラスモーフィズム効果9選【コピペOK】
このデモが属する記事
CSS グラスモーフィズム効果9選【コピペOK】画面に半透明のすりガラス板を重ねたように、後ろの背景がぼんやり透けて見えるのに文字はくっきり読めるデザインを、CSS グラスモーフィズム(リキッドガラス)と呼びます。カードやナビゲーション、ボタンからトグルまで、9種類のガラス演出を一行でコ この記事のデモをすべて見る


