Communitygithub.com

byteTuto/website

모든 bytetuto.com 페이지가 반응형(모바일 우선, 320px~1920px, 수평 스크롤 없음)이 되도록 하는 규칙입니다. 사이트 내 페이지, CSS, 레이아웃, 이미지 또는 컴포넌트를 생성하거나 수정할 때, 그리고 디스플레이에 영향을 주는 PR을 승인하기 전에 사용하세요.

website란 무엇인가요?

이 스킬은 bytetuto.com 웹사이트의 모든 페이지가 엄격한 반응형 디자인 기준을 충족하도록 보장합니다. 320px(모바일)부터 1440px(데스크톱)까지 6가지 기준 너비에서 수평 스크롤, 화면 오버플로우, 터치 대상 크기와 같은 일반적인 반응형 문제를 확인하는 자동화된 검사 스크립트(`python3 scripts/check_responsive.py`)를 제공합니다. CI에서도 실행되므로 반응형을 망가뜨리는 PR은 배포되지 않습니다. 이 스킬은 모바일 우선 CSS, 유동적인 타이포그래피, 안전 영역(노치) 처리, 접근성을 위한 충분한 터치 타겟(≥44px)에 대한 구체적인 규칙을 정의합니다. 또한 이미지 최적화(SVG/WebP, srcset, 지연 로딩)와 애니메이션 성능 지침을 포함하여 모든 페이지에서 안정적이고 접근 가능한 사용자 경험을 보장합니다. 이 스킬은 Claude Code, Cursor와 같은 AI 에이전트가 bytetuto.com 웹사이트를 개발하거나 수정할 때 사이트 전체의 시각적 무결성과 접근성을 유지하는 데 사용됩니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/byteTuto/website/tree/HEAD/.claude/skills/site-responsive

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

항상 반응형인 사이트

페이지는 python3 scripts/check_responsive.py (수평 스크롤 없음, 화면 밖으로 튀어나오는 요소 없음, 터치 타겟이 충분히 큼) 검사를 6가지 기준 너비에서 통과해야 완료된 것으로 간주합니다. 이 검사는 CI에서도 실행됩니다. 반응형을 망가뜨리는 PR은 배포될 수 없습니다.

기준 너비 (모두 테스트)

너비사용처
320 px소형 안드로이드, iPhone SE (줌 상태)
375 px표준 iPhone (1순위 대상: 사용자가 TikTok에서 유입)
414 px대형 폰
768 px태블릿 세로
1024 px태블릿 가로 / 소형 노트북
1440 px데스크톱

스크립트가 테스트하는 크기: 320×640, 375×667, 414×896, 768×1024, 1024×600 (낮은 화면), 1440×900.

CSS 규칙

  1. 모바일 우선: 기본 스타일은 320px 기준으로 작성하고 @media (min-width: ...)를 사용하여 확장합니다. 중단점은 600px, 900px, 1200px입니다 (다른 곳에 임의 값 사용 금지; 컴포넌트는 @container 사용 가능).
  2. 고정 너비 금지: 280px를 초과하는 고정 너비는 min() / max-width: 100% 없이 사용하지 마세요: width: min(520px, 100%).
  3. 유동적인 타이포그래피: clamp() 사용: 제목 clamp(32px, 7vw, 72px), 본문 텍스트 최소 16px (모바일에서 이보다 작으면 iOS에서 입력 필드 줌 발생).
  4. 높이: min-height: 100svh 사용 (100vh는 모바일 주소 표시줄 아래로 넘어감). 텍스트 블록에 고정 height 사용 금지.
  5. 측면 여백: 모바일에서 16px 거터 (space-4), 노치 화면을 위해 env(safe-area-inset-left/right) 추가 (뷰포트는 이미 viewport-fit=cover 설정됨).
  6. 긴 텍스트: URL, 명령어, 파일 이름에 overflow-wrap: anywhere; 코드 블록은 블록 내에서 overflow-x: auto 처리, 페이지 전체에 적용 금지.
  7. 그리드: 튜토리얼 카드에 grid-template-columns: repeat(auto-fill, minmax(min(280px, 100%), 1fr)) 사용.
  8. 튀어나오는 장식 요소 (byte/spark 블록, 캔버스): position: fixed 또는 부모에 overflow: clip, 크기는 min(vw, px) 사용.
  9. 터치: 버튼 및 개별 링크는 ≥ 44 × 44 px (24px = 스크립트 차단 최소값, WCAG 2.2), 두 대상 사이 최소 8px 간격. :hover에만 의존하는 정보 금지: :focus-visible 및 터치 상태 제공.
  10. 비디오 및 iframe (YouTube): aspect-ratio: 16 / 9; width: 100%; height: auto; — TikTok 비디오는 9 / 16에 max-width: 360px.

이미지

  • HTML에 항상 width와 height 명시 (레이아웃 이동 방지, CLS) + CSS에 max-width: 100%; height: auto.
  • 형식: 로고 및 아이콘은 SVG, 캡처 이미지는 WebP/AVIF, srcset + sizes 사용 (예: 480w, 960w, 1600w).
  • 스크롤 아래 이미지는 loading="lazy" 및 decoding="async"; 절대 LCP(주요 이미지)에는 사용 금지, 해당 이미지는 fetchpriority="high" 사용.
  • 튜토리얼 썸네일: aspect-ratio: 16 / 9; object-fit: cover.

Viewport (이미 설정됨, 제거 금지)

<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">

금지: maximum-scale=1, user-scalable=no (줌 차단, 접근성에 나쁨).

애니메이션 및 모바일 성능

  • prefers-reduced-motion 준수 (프로젝트 규칙).
  • 캔버스: devicePixelRatio를 2로 제한하고 600px 미만에서는 밀도 낮춤 (app.js에 이미 구현, 이 원칙 유지).
  • 모바일에서 무거운 backdrop-filter 중첩 금지.

확인하기

# check-site 컨테이너가 :8088에서 실행 중일 때, 또는 인수 없이 (로컬 서버가 site/에서 실행 중일 때)
python3 scripts/check_responsive.py                 # site/의 모든 페이지 검사
python3 scripts/check_responsive.py --shots /tmp/rs # + 너비별 PNG 캡처

스크립트는 scrollWidth > 너비이거나, 보이는 요소가 가장자리를 넘거나, 터치 대상이 24px 미만이거나 (문장 내 링크는 예외), 본문 텍스트가 16px 미만이면 실패합니다. 푸시하기 전에 320px 및 375px 캡처를 확인하세요.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

관련 스킬