GH GambleHub

카드 인터페이스 및 비주얼 블

1) 왜 카드

카드는 주요 속성과 동작으로 엔티티 (게임, 경기, 동작, 기사) 를 포장합니다. 좋은 카드:
  • 빨리 스캔하고
  • 하나의 마스터 CTA를 제공합니다
  • 다른 용기/열에 적응
  • 동작이 예측 가능합니다 (호버, 프레스, 초점, 컨텍스트 메뉴).

2) 카드의 해부학

최소 구성:

1. 미디어 영역 (표지/로고/미리보기, 16: 9/4: 3/1: 1).

2. 헤더 (1-2 개의 잘린 줄).

3. 메타 데이터 (자막, 태그/범주, 공급자, 시간).

4. 상태 배지 (신규, 라이브, 프로모션, 등급).

5. CTA/빠른 동작 (버튼 또는 아이콘).

6. 이차 텍스트 (짧은, 2-3 최대 줄).

7. 컨트롤 (즐겨 찾기,... 문맥).

계층: 미디어 → 헤더 → CTA → 메타 → 2 차. 파괴적인 행동은 메뉴에 숨겨져 있거나 표시됩니다.

3) 격자 및 레이아웃

그리드 (고정 열): 2-6 열; 자동 착용/자동 충전을 통한

반응 형 타일: 'minmax (240px, 1fr)' -카드가 정확히 경계까지 자랍니다.
벽돌/다양한 높이: 조심; 초점 순서와 가독성을 보장합니다.
목록 (연속): 수평 경제 및 정렬이 중요한 경우.

css
.cards {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(240px,1fr));
gap: 16px;
}
.card {
border-radius: 12px;
background: var(--bg-elevated);
box-shadow: var(--elev-2);
display: grid;
grid-template-rows: auto 1fr auto;
overflow: hidden;
}
.card__media { aspect-ratio: 16/9; object-fit: cover; }

4) 밀도와 리듬

여백/들여 쓰기: 12-16 px 내부; 8-12 px 단위 사이

행 높이: 1. 3–1. 5; 글꼴: 제목 16-18 px, 메타 12-14 px.
텍스트 클리핑: '라인 클램프: 2-3'; 툴팁/디테일의 필수 전체 텍스트.

5) 상태 및 상호 작용

호버/포커스/액티브: 섀도우/하이라이트이지만 레이아웃이없는 "점프"; ': 초점을 볼 수있는' 항상 볼 수 있습니다.
선택 가능: 체크 박스/프레임; 참조 카드와 혼동하지 마십시오.
프레스: 최대 98% + 섀도우 다운 (보통 120ms) 감소.
바쁜/로딩: "빈" 이 아닌 골격.

css
.card:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 2px; }
.card:hover { box-shadow: var(--elev-3); transform: translateY(-1px); transition: box-shadow. 16s, transform. 16s; }

6) 이미지와 미디어

측면 비율이 고정됩니다. 게임 목록에서-16: 9 또는 4:3.
게으른 로딩: '로딩 = "게으른"' + '디코딩 = "async"'.
지배적 인 포스터 색상의 장소 홀더/골격.
로딩 오류: 더미 사진 + 이미지 오프 아이콘.

html
<img class = "card __ media" src ="..." alt = "Game name" loading =" lazy" onerror =" this. src='/fallback. png'">

7) 배지 및 태그

짧은 (1-2 단어): New, Live, -20%, Top 10.
색상에만 의존 할 수 없습니다. 아이콘/텍스트를 추가하십시오.
위치: 왼쪽 최고 미디어; 몇 개-4-6 px의 간격을 가진 스택에서.

css
.badge { display:inline-flex; gap:6px; align-items:center; padding:4px 8px; border-radius:8px; font-size:.75rem; }
.badge--live { background: var(--bg-danger); color: var(--on-danger); }

8) CTA 및 빠른 조치

카드 당 하나의 기본 (예: "Play", "Bet").
보조 아이콘 (즐겨 찾기, 공유,...) -호버/초점으로.
파괴적-확인 또는 실행 취소 패널을 통해.

html
<div class="card__actions">
<button class="btn btn--primary">Играть</button>
<button class =" icon" aria-label = "Add to Favorites" title =" B Favorites "> </button>
<button class="icon" aria-haspopup="menu" aria-expanded="false">⋯</button>
</div>

9) 가용성 (A11y)

전체 링크 카드는 명확한 '아리아 라벨' 이있는 '<a>' 입니다. 그렇지 않으면 제목은 링크와 같고 나머지는 정적입니다.
탭 순서는 시각에 해당합니다. 포커스 링이 보입니다.
'alt' 가있는 이미지; 장식- 'aria-hidden = "참"'.
상태의 경우 'role = "state" '/' aria-live = "polite"' 를 사용하십시오.
텍스트 및 배지 명암은 AAA입니다. 의미는 단순한 색상이 아닙니다.

10) 성능

미디어 및 목록의 게으른로드; 센트리 관찰자로 페이지 매김 또는 무한대 스크롤.
테이프/무한 출력에 대한 가상화 (λ10k 요소).
흐름을 최소화: '변환/불투명도' 만 애니메이션합니다.
스켈레톤이있는 렌더 카드를로드 한 후 컨텐츠로 교체하십시오.

11) 해골, 실수, 비어 있음

스켈레톤은 공격적인 쉬머없이 카드의 구조 (미디어/텍스트/버튼) 를 반복합니다. '선호 감소 운동' 을 고려하십시오.
오류 상태: 아이콘 + 짧은 텍스트 ("게임을로드하지 못함") + 재시도 단추.
빈 상태: 아이콘/일러스트레이션, 설명, "다음 단계" (필터/검색/구독).

12) 콘텐츠 관리

잘림: '라인 클램프' + 명시 적 툴팁.
긴 숫자/합계: 표 숫자: '글꼴 변형 숫자: 표 숫자; '.
현지화: 긴 라벨의 너비는 + 20-30% 입니다.
RTL 지원: 플립 배지/아이콘 및 정렬.

13) 어두운 테마와 대비

그림자는 약하고 투명성과 경계 ('1px') 를 사용합니다.
작은 글꼴에 대한 AAA 지원; 깜박임을 피하십시오.
텍스트를 읽을 수 있도록 얇은 베일 (오버레이 8-12%) 로 미디어가 어두워집니다.

css
.theme-dark. card { background: var(--bg-elevated-dark); box-shadow: var(--elev-1-dark); }
.theme-dark. card__media::after { content:""; position:absolute; inset:0; background: rgba(0,0,0,.12); }

14) 정렬, 필터, 페이지 매김

상단/측면 필터 패널; 결과는 카드 그리드입니다.
Pagination이 보입니다. 끝없는 스크롤-" Back to Top "및 위치 유지.
필터는 스크롤을 "재설정" 하지 않습니다 빠르게 적용되거나 표시기와 함께 적용됩니다.

15) iGaming의 세부 사항

15. 게임 카드 1 개 (슬롯/테이블)

미디어: 16:9 포스터, 제공자 로고.
메타 데이터: 공급자, RTP, 변동성, 카테고리 (-승리 약속없이 유익합니다).
배지: 새로운, 인기, 토너먼트, 대박.
CTA: "Play" + "데모. "" 18 + "와 책임있는 게임의 맥락이 보입니다.

15. 2 일치/계수 카드

라이브 배지 라이브; 타이머/기간.
즉석 호버/프레스 및 안전한 실행 취소 (허용되는 경우) 가있는 키 계수 (2-3).
Flicker-free 업데이트; 코스를 바꿀 때-깔끔한 조명.

15. 3 토너먼트/이벤트 카드

날짜, 상금 풀, 규칙 (링크).
상태 (등록 공개/종료, 진행 중).
CTA "가입", "규칙"; 참여 진행 (포인트/장소).

16) 안티 패턴

전체 카드는 보조 링크 (초점/클릭 트랩) 내에서 클릭 가능합니다.
근처의 두 가지 주요 CTA ("Play" 및 "Buy Bonus") -주의 경쟁.
장소 홀더/해골 → 점프 그리드 (CLS) 가 없습니다.
끝없는 쉬머 효과; 그림자 애니메이션/흐림 (비싼).
회색의 작은 회색으로 된 열 메타 데이터 (대비 없음).
색상 만 의미를 전달하는 배지.

17) 디자인 시스템 토큰 (예)

json
{
"card": {
"radius": 12,
"gap": 12,
"mediaRatio": "16/9",
"px": "12 12 12 12",
"shadow": { "rest": "var(--elev-2)", "hover": "var(--elev-3)" }
},
"badge": { "radius": 8, "px": "4 8", "icon": 14 },
"grid": { "gap": 16, "min": 240, "max": 1 },
"motion": { "hoverMs": 160, "pressMs": 100, "fadeMs": 160 },
"a11y": { "contrastAA": true, "focusRingWidth": 2, "focusRingOffset": 2 }
}

18) 스니펫

반응: 범용 카드

tsx type CardProps = {
title: string;
subtitle?: string;
mediaUrl?: string;
badges?: string[];
onPrimary?: () => void;
primaryLabel?: string;
onFav?: () => void;
children?: React. ReactNode;
};
export default function Card({
title, subtitle, mediaUrl, badges=[], onPrimary, primaryLabel='Открыть', onFav, children
}: CardProps){
return (
<article className="card group focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2">
<div className="relative">
{mediaUrl? <img className="w-full aspect-[16/9] object-cover" src={mediaUrl} alt={title}/>: <div className="aspect-[16/9] bg-neutral-200"/>}
<div className="absolute top-2 left-2 flex gap-1">
{badges. map(b => <span key={b} className="badge">{b}</span>)}
</div>
</div>
<div className="p-3 grid gap-2">
<h3 className="text-sm font-semibold line-clamp-2" title={title}>{title}</h3>
{subtitle && <p className="text-xs text-neutral-500 line-clamp-2">{subtitle}</p>}
{children}
<div className="flex items-center gap-8">
{onPrimary && <button className="btn btn--primary" onClick={onPrimary}>{primaryLabel}</button>}
{onFav && <button className="icon opacity-0 group-hover:opacity-100" aria-label="В избранное" onClick={onFav}></button>}
</div>
</div>
</article>
);
}

무한 스크롤 센트리

js const sentry = document. querySelector('#sentry');
const io = new IntersectionObserver(entries=>{
if(entries. some(e=>e. isIntersecting)) loadMore();
}, { rootMargin: '200px' });
io. observe(sentry);

19) 측정 및 실험

CTR 기본 -CTA! 타임 투 클릭.
스크롤 깊이 → 클릭: "굽힘 위로 "/" 굽힘 아래" 를 클릭하십시오.
카드 → 보기 세부 사항 → 변환.
배지의 가시성 및 CTR에 미치는 영향.
해골 눈에 보이는 시간 BLS.
A/B: 카드 크기, 메타 데이터 양, 빠른 동작 가시성, 그리드 유형 (목록/그리드).

20) QA 체크리스트

가용성

  • 초점 링이 보입니다. 탭 순서는 논리적입니다.
  • 알트 텍스트와 '아리아 레이블' 이 정확합니다. 텍스트가있는 상태 배지.
  • 텍스트/배경 대비는 AAA입니다.

행동

  • 하나의 1 차 CTA; 빠른 동작은 주요 시나리오와 겹치지 않습니다.
  • 호버/프레스/선택 가능; 문맥 메뉴가 작동합니다.
  • 빈/오류/해골이 정확합니다. 재시도가 있습니다.

성능

  • 게으른 미디어 로딩; 레이아웃에 날카로운 점프가 없습니다.
  • 큰 목록의 가상화; '변환/불투명도' 애니메이션.

그리드

  • 'minmax (240px, 1fr)' 및 'gap' 은 적응력이 있습니다. 메이슨은 초점/읽기 순서를 위반하지 않습니다.
  • RTL/현지화는 자르기와 배지를 "파괴" 하지 않습니다.

21) 설계 시스템의 문서

계정: '카드', '게임 카드', '매치 카드', '토너먼트 카드', 'StatusBadge', '스켈 레톤 카드'.
토큰: 반경/그림자/들여 쓰기/레이어, 배지 색상, 애니메이션.
패턴: "One CTA", "스피너 대신 스켈레톤", "무한 스크롤 + 유지 위치".
갤러리 수행/수행 금지: 오버로드 된 카드 대 최소한의 "클릭 가능한 전체 카드" 대 명시 적 요소.

간략한 요약

카드는 명확한 계층 구조, 하나의 마스터 CTA, 예측 가능한 상태, 안정적인 그리드 및 성능 및 접근성에 대한 존중이있을 때 작동합니다. 토큰과 패턴을 캡처하고, 골격과 게으른로드를 사용하고, 콘텐츠를 간결하게 유지하며, 특히 iGaming 스크립트에서 카드 인터페이스가 빠르고 읽기 쉽고 변환 준비가됩니다.

Contact

문의하기

질문이나 지원이 필요하시면 언제든지 연락하십시오.우리는 항상 도울 준비가 되어 있습니다!

Telegram
@Gamble_GC
통합 시작

Email — 필수. Telegram 또는 WhatsApp — 선택 사항.

이름 선택 사항
Email 선택 사항
제목 선택 사항
메시지 선택 사항
Telegram 선택 사항
@
Telegram을 입력하시면 Email과 함께 Telegram에서도 답변드립니다.
WhatsApp 선택 사항
형식: +국가 코드 + 번호 (예: +82XXXXXXXXX).

버튼을 클릭하면 데이터 처리에 동의하는 것으로 간주됩니다.