07파스텔 CTA 밴드
가로로 긴 밴드가 배경보다 한 단 떠오른 두꺼운 카드로 앉고, 버튼은 안쪽에서 눌린 듯한 깊이를 가진다.
쓰임가입 유도 띠, 무료 체험 시작
radius 16press 버튼배경 대비

<main class="stage">
<div class="ctaband">
<div class="ctaband__glow is-demo" aria-hidden="true"></div>
<p class="ctaband__title">지금 팀에 합류시켜 보세요</p>
<button class="ctaband__cta is-demo" type="button">무료로 시작</button>
</div>
</main>@use "../../../../site/static/demo-tokens" as *;
$duration: $dur-loop; // 빛 번짐·버튼 맥동의 한 주기
$easing: $ease-pop; // 오버슈트 곡선
$color: $subject-blue; // 배경 빛 색
@include stage($stage-orange);
.ctaband {
position: relative;
overflow: hidden;
box-sizing: border-box;
display: flex;
flex-direction: column;
align-items: flex-start;
gap: $sp-4;
width: clamp(260px, 86vw, 400px);
border-radius: $r-card;
background: $subject-ink;
padding: $sp-6 $sp-5;
box-shadow: 10px 10px 20px rgba($stage-ink, .3), -6px -6px 16px rgba($stage-paper, .18);
}
.ctaband__glow {
position: absolute;
top: -30%;
right: -10%;
width: 50%;
aspect-ratio: 1;
border-radius: $r-pill;
background: rgba($color, .35);
animation: glowPulse $duration $easing infinite;
}
.ctaband__title {
position: relative;
margin: 0;
max-width: 70%;
color: $subject-cream;
font-weight: 700; font-size: clamp(16px, 4vw, 20px); line-height: 1.3;
}
.ctaband__cta {
position: relative;
border: 0;
border-radius: $r-pill;
background: $subject-cream;
color: $subject-ink;
padding: $sp-2 $sp-6;
font-weight: 700; font-size: clamp(12px, 2.8vw, 14px); line-height: 1;
box-shadow: 4px 4px 8px rgba($stage-ink, .4);
animation: ctaPress $duration $easing infinite;
}
// 데모: 배경 빛이 부풀고, 버튼이 맥동한다
@keyframes glowPulse {
0%, 100% { transform: scale(1); opacity: .35; }
50% { transform: scale(1.15); opacity: .55; }
}
@keyframes ctaPress {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.06); }
}
@media (prefers-reduced-motion: reduce) {
.ctaband__glow, .ctaband__cta { animation: none !important; transform: none; opacity: .35; }
}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);
}
.ctaband {
position: relative;
overflow: hidden;
box-sizing: border-box;
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 16px;
width: clamp(260px, 86vw, 400px);
border-radius: 16px;
background: #17141a;
padding: 24px 20px;
box-shadow: 10px 10px 20px rgba(23, 20, 26, 0.3), -6px -6px 16px rgba(255, 255, 255, 0.18);
}
.ctaband__glow {
position: absolute;
top: -30%;
right: -10%;
width: 50%;
aspect-ratio: 1;
border-radius: 999px;
background: rgba(47, 109, 246, 0.35);
animation: glowPulse 2s cubic-bezier(0.2, 1.4, 0.4, 1) infinite;
}
.ctaband__title {
position: relative;
margin: 0;
max-width: 70%;
color: #fff7e6;
font-weight: 700;
font-size: clamp(16px, 4vw, 20px);
line-height: 1.3;
}
.ctaband__cta {
position: relative;
border: 0;
border-radius: 999px;
background: #fff7e6;
color: #17141a;
padding: 8px 24px;
font-weight: 700;
font-size: clamp(12px, 2.8vw, 14px);
line-height: 1;
box-shadow: 4px 4px 8px rgba(23, 20, 26, 0.4);
animation: ctaPress 2s cubic-bezier(0.2, 1.4, 0.4, 1) infinite;
}
@keyframes glowPulse {
0%, 100% {
transform: scale(1);
opacity: 0.35;
}
50% {
transform: scale(1.15);
opacity: 0.55;
}
}
@keyframes ctaPress {
0%, 100% {
transform: scale(1);
}
50% {
transform: scale(1.06);
}
}
@media (prefers-reduced-motion: reduce) {
.ctaband__glow, .ctaband__cta {
animation: none !important;
transform: none;
opacity: 0.35;
}
}import type { CSSProperties } from "react";
import styles from "./CtaBandClay.module.scss";
export type CtaBandClayProps = {
title?: string;
cta?: string;
duration?: number;
easing?: string;
color?: string;
};
type Vars = CSSProperties & { "--duration"?: string; "--easing"?: string; "--color"?: string };
export default function CtaBandClay({
title = "지금 팀에 합류시켜 보세요",
cta = "무료로 시작",
duration = 2000,
easing = "cubic-bezier(.2,1.4,.4,1)",
color = "#2f6df6",
}: CtaBandClayProps) {
const vars: Vars = { "--duration": `${duration}ms`, "--easing": easing, "--color": color };
return (
<div className={styles.band} style={vars}>
<div className={styles.glow} aria-hidden="true" />
<p className={styles.title}>{title}</p>
<button type="button" className={styles.cta}>{cta}</button>
</div>
);
}07 파스텔 CTA 밴드 — 측정 누적면적 14.983% · 움직인 프레임 10/23GODRICH 원작 · zip 에 SCSS·React 포함 · 클레이모피즘 랜딩 UI 키트, 통통한 섹션 9개
이 데모가 속한 글
클레이모피즘 랜딩 UI 키트, 통통한 섹션 9개클레이모피즘은 두꺼운 모서리 반경과 밝고 어두운 그림자를 한 면에 같이 얹어, 화면을 손으로 눌러 놓은 찰흙처럼 보이게 하는 디자인 스타일입니다. 이 글의 데모 전부 보기


