Community이미지github.com

머티리얼 디자인

UI 또는 그래픽 레이아웃을 생성할 때 머티리얼 디자인 스타일(2014년~현재)을 적용합니다. 사용자가 'material design', 'material ui', 'google material', 'elevation', 'floating action button', 'fab' 등을 요청할 때 로드하세요.

머티리얼 디자인란 무엇인가요?

이 스킬은 AI 에이전트(예: Claude Code, Cursor, Codex 등)가 UI 또는 그래픽 레이아웃을 생성할 때 Google의 머티리얼 디자인 스타일을 일관되게 적용하도록 설계되었습니다. 2014년 Google I/O에서 발표된 이 디자인 시스템은 종이와 같은 표면, 정의된 고도(elevation), 그림자, 대담한 색상, 8dp 그리드, 의도적인 움직임을 핵심으로 합니다. 이 스킬은 Android 앱, 관리자 대시보드, 컴포넌트가 많은 웹 앱, 디자인 시스템, 생산성 도구에 적합합니다. SKILL.md 문서는 고도 체계(0dp~24dp), 8dp 그리드 시스템, Roboto 폰트 스케일(12sp~56sp), 색상 팔레트(기본 색상과 강조 색상), 터치 피드백(잉크 파문 효과), 모션 커브(cubic-bezier(0.4, 0, 0.2, 1)) 등 머티리얼 디자인의 모든 세부 사항을 명확하게 정의합니다. 또한 CSS 토큰, Tailwind 패턴, 아이콘 및 일러스트레이션 가이드라인, 벡터 프로필(장식, 차원, 그리드 엄격성 등), 그리고 플랫 디자인이나 스큐어모피즘 같은 인접 스타일로 전환하는 방법(Lineage fallbacks)까지 포함하여 에이전트가 정확한 디자인 결정을 내릴 수 있도록 지원합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/musicalbee/design-ontology/tree/HEAD/skills/material-design

Installed? Explore more 이미지 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

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

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

문서

머티리얼 디자인은(는) 무엇을 하나요?

디지털 표면은 두께와 그림자가 있는 종이처럼 동작하므로, 깊이와 움직임이 인터페이스의 계층 구조를 설명합니다.

정의된 고도에 위치하며 왼쪽 상단의 키 라이트에서 그림자를 드리우는 평평한 색상 표면 시스템으로, 대담한 색상, 8dp 그리드 및 목적 있는 움직임을 특징으로 합니다. Google은 2014년 6월 I/O에서 이를 발표했습니다.

시기: 2014년~현재 · 시대: 터치스크린 · 분야: 그래픽 및 UI 디자인 · 다른 이름: Material, Google Material, Material 2

이 스킬을 로드해야 하는 경우

사용자가 다음을 요청할 때 로드하세요: "material design", "material ui", "google material", "elevation", "floating action button", "fab", "android style", "ripple effect", "app bar", "paper and ink", "md2".

적합한 대상: Android 애플리케이션, 관리자 대시보드, 많은 컴포넌트가 있는 웹 앱, 디자인 시스템, 생산성 도구.

다음의 경우 사용하지 마세요:

  • 브랜드에 독특한 목소리가 필요한 경우. 기본 모양이 Google 스타일임을 인지할 수 있기 때문입니다.
  • 페이지가 에디토리얼 성격이고 대화형 컴포넌트가 적은 경우.
  • 디자인이 그림자가 전혀 없는 순수 2D 스타일을 필요로 하는 경우.

시스템 지침

머티리얼 디자인으로 UI 또는 그래픽 레이아웃을 생성할 때 반드시 다음을 따라야 합니다:

  1. 모든 표면을 1dp 두께의 종이로 취급하며, 절대 구부러지거나, 늘어나서 크기가 변하거나, 다른 표면을 통과하지 않습니다.
  2. 계층 구조를 dp 단위의 고도로 표현합니다: 페이지는 0, 카드는 1, 앱 바는 4, 기본 상태의 플로팅 버튼은 6, 메뉴는 8, 네비게이션 드로어는 16, 다이얼로그는 24.
  3. 모든 레이아웃을 8dp 그리드로 구축하고, 작은 글자와 아이콘 정렬에는 4dp를 사용하며, 터치 대상은 48dp를 사용합니다.
  4. 기본 색상과 강조 색상에서 대담한 색상을 사용하고, 상태 표시줄은 기본 색상의 700 농도, 앱 바는 500 농도를 사용합니다.
  5. Roboto 폰트에서 12, 14, 16, 20, 34, 45, 56sp의 정의된 스케일로 큰 글자를 사용합니다.
  6. 모든 터치에 반응을 제공합니다: 터치 지점에서 300ms 동안 퍼져나가는 원형 파문(ripple).
  7. 요소를 곡선 경로를 따라 빠르게 시작하고 느리게 끝나는 이징으로 움직이며, 각 움직임이 요소가 어디서 왔는지 설명하도록 합니다.

가드레일

아래 각 줄은 스타일을 위반합니다. 출력을 반환하기 전에 목록과 비교하여 확인하세요.

  • 절대 안 됨: 표면에 그라데이션이나 텍스처.
  • 절대 안 됨: 일관된 고도 레벨이 없거나 다른 광원 방향을 가진 그림자.
  • 절대 안 됨: 동일한 고도에서 겹치는 표면.
  • 절대 안 됨: 48dp 미만의 터치 대상.
  • 절대 안 됨: 4.5:1 미만의 명암비로 유색 배경 위에 유색 텍스트.
  • 절대 안 됨: 움직임이나 파문 피드백 없이 즉시 상태 변경.
  • 절대 안 됨: 한 화면에 둘 이상의 플로팅 액션 버튼.

벡터 프로필

축점수1의 의미5의 의미
장식성■■□□□ 2/5순수 미니멀최대주의
입체감■■■□□ 3/5엄격한 2D완전 3D / 공간적
그리드 엄격성■■■■□ 4/5혼란 / 유기적엄격한 수학적 그리드
스큐어모픽 사실성■■□□□ 2/5추상적 디지털포토리얼리스틱 소재
타이포그래피 표현성■■□□□ 2/5중립 / 보이지 않음실험적 / 삽화적

이 점수를 유지하세요. 요청이 축을 2점 이상 이동시키면 스타일을 벗어난 것입니다: "계통 대안(Lineage fallbacks)"으로 이동하세요.

공간 및 그리드 로직

  • 그리드 메커니즘: 8dp 기준 그리드, 아이콘과 글자에는 4dp, 16dp 여백의 4열 휴대폰 그리드, 24dp 여백의 8열 태블릿 그리드, 12열 데스크톱 그리드; 앱 바는 휴대폰에서 56dp, 데스크톱에서 64dp.
  • 여백 비율: 표면의 25~40%는 비어 있어야 함; 간격 스케일은 4, 8, 16, 24, 32, 48, 56dp이며, 카드 패딩은 16dp.
  • 정렬 규칙: 아바타가 있는 목록에서는 콘텐츠가 왼쪽 가장자리에서 72dp 키라인에 정렬되고, 그 외에는 16dp 키라인에 정렬됨; 플로팅 액션 버튼은 오른쪽 및 아래쪽 가장자리에서 16dp 떨어져 위치.
  • 컨테이너 지오메트리: 카드와 버튼은 2dp 모서리 반경 사용; 플로팅 액션 버튼은 56dp 원, 미니 버튼은 40dp; 다이얼로그는 최소 너비 280dp.

타이포그래피

  • 분류: 네오그로테스크 산세리프 · 휴머니스트 산세리프
  • 자간: 34sp 이상의 디스플레이 크기는 0em ~ -0.01em; 본문은 +0.01em; 버튼은 대문자 +0.09em.
  • 행간: 제목 1.2; 본문 1.4 ~ 1.5 (14sp, 20dp 줄 기준); 목록 텍스트는 16sp에 24dp.
  • 계층 규칙:
    • 12, 14, 16, 20, 34, 45, 56sp 스케일을 사용하고 그 사이의 크기는 사용하지 않음.
    • 제목과 버튼에는 medium(500), 본문에는 regular(400), 45sp 이상의 디스플레이 크기에는 light(300) 사용.
    • 표면 위 텍스트는 기본 텍스트에 87% 검정, 보조 텍스트에 54% 검정, 비활성 텍스트에 38% 검정으로 설정.
    • 버튼 레이블은 대문자 14sp, 가중치 500으로 설정.

폰트 페어링

디스플레이본문참고
RobotoRobotoMaterial 1 및 2의 시스템 서체, 가중치 300~900의 단일 패밀리로 사용.
Roboto CondensedRoboto조밀한 헤더를 위한 압축된 디스플레이 서체와 표준 본문 서체.
Noto SansNoto Sans동일한 가중치와 메트릭의 비라틴 문자를 위한 대체 패밀리.

색상 및 조명

  • 팔레트 구조: 500 및 700 농도의 기본 색상 1개, A200 ~ A400 범위의 강조 색상 1개, 중성 회색; 기본 색상은 앱 바와 표면의 10~20%를 차지.
  • 대비 규칙: 본문 텍스트는 최소 4.5:1, 큰 텍스트는 최소 3:1 유지; Indigo 500 위의 흰색 텍스트는 7.5:1에 도달하고 Pink A200 위의 흰색 텍스트는 3.4:1에 도달하여 18sp 텍스트에만 충분함.
  • 표면 처리: 그라데이션이나 텍스처 없이 단색의 불투명한 평면 채움; 스크림은 다이얼로그 뒤에 32% 불투명도의 검정 사용.
  • 빛과 그림자: 위쪽에서 오는 키 라이트와 부드러운 앰비언트 라이트; 각 그림자는 반음영(penumbra), 본음영(umbra), 앰비언트 레이어를 가지며, 블러와 오프셋은 고도에 따라 증가.

팔레트

이름헥스 코드역할
Surface#FFFFFF카드 및 시트 표면
Background#FAFAFA페이지 배경
Indigo 500#3F51B5기본 색상 및 앱 바
Indigo 700#303F9F상태 표시줄
Pink A200#FF4081강조 색상 및 플로팅 액션 버튼
Grey 900#21212187% 불투명도 텍스트

물질성 및 텍스처

  • 표면 시뮬레이션: 디지털 종이: 그림자를 드리우지만 결, 베벨, 텍스처가 없는 1dp 두께의 평평한 시트.
  • 테두리 규칙: 표면에는 외곽선이 없음; 구분선은 가장자리에서 72dp 또는 16dp 안쪽으로 1px 검정, 12% 불투명도; 텍스트 필드는 포커스 시 2px으로 두꺼워지는 1px 하단선 사용.
  • 블러 및 고도: 고도 그림자는 1dp의 경우 0 1px 3px 20% + 0 1px 1px 14%, 4dp의 경우 0 4px 5px 14% 및 0 1px 10px 12%, 12dp의 경우 0 9px 12px 14%; 시스템은 0~24dp의 25개 레벨.

장식 및 아이콘

  • 아이콘: 20dp 활성 영역에 24dp 시스템 아이콘, 2dp 스트로크 두께, 2dp 둥근 모서리의 사각형 터미널, 단색 채움, 54% 검정의 단일 색상.
  • 일러스트레이션: 팔레트의 평면 벡터 형태와 20~40% 스크림 아래의 전체 너비 사진; 외곽선이나 원근법 없음.
  • 장식 요소: 플로팅 액션 버튼 · 파문 · 고도 그림자 · 색상 블록 앱 바 · 전체 너비 히어로 이미지 · 카드

모션 및 상호작용성

  • 화면에서 탄생: 예
  • 전환 물리: 표면이 곡선 경로를 따라 Z축과 화면 평면을 따라 이동; 요소는 빠르게 가속되고 부드럽게 느려지며, 공유 요소는 시작점에서 목적지까지 이동.
  • 이징: cubic-bezier(0.4, 0, 0.2, 1)
  • 지속 시간(ms): 300
  • 호버 및 활성: 호버 시 4% 검정 오버레이 추가; 누르기 시 300ms 동안 터치 지점에서 퍼져나가는 12% 검정 파문 표시; 올라온 버튼은 누를 때 2dp에서 8dp로 상승.

코드 및 토큰 프라이머

루트 요소에 data-style="material-design"를 설정하고 토큰을 붙여넣으세요. 파일 tokens.css에는 동일한 토큰과 참조 규칙 세트가 있습니다.

[data-style="material-design"] {
  --color-bg: #FAFAFA;
  --color-surface: #FFFFFF;
  --color-text: rgba(0, 0, 0, 0.87);
  --color-muted: rgba(0, 0, 0, 0.54);
  --color-primary: #3F51B5;
  --color-accent: #FF4081;
  --color-border: rgba(0, 0, 0, 0.12);
  --font-sans: "Roboto", "Noto Sans", "Helvetica Neue", Arial, sans-serif;
  --font-display: "Roboto", "Noto Sans", "Helvetica Neue", Arial, sans-serif;
  --border-radius: 2px;
  --border-width: 1px;
  --shadow-elevation: 0 2px 4px -1px rgba(0, 0, 0, 0.2), 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12);
  --backdrop-filter: none;
  --space-unit: 8px;
  --ease: cubic-bezier(0.4, 0, 0.2, 1);
  --duration: 300ms;
  --color-primary-dark: #303F9F;
  --shadow-1dp: 0 1px 3px 0 rgba(0, 0, 0, 0.2), 0 1px 1px 0 rgba(0, 0, 0, 0.14), 0 2px 1px -1px rgba(0, 0, 0, 0.12);
  --shadow-24dp: 0 11px 15px -7px rgba(0, 0, 0, 0.2), 0 24px 38px 3px rgba(0, 0, 0, 0.14), 0 9px 46px 8px rgba(0, 0, 0, 0.12);
  --touch-target: 48px;
  --color-on-bg: #212121;
  --color-on-surface: #212121;
  --color-on-primary: #FAFAFA;
  --color-on-accent: #212121;
  --color-muted-on-bg: #737373;
  --color-muted-on-surface: #757575;
  --color-link: #3F51B5;
  --color-link-on-surface: #3F51B5;
  --display-weight: 300;
  --subhead-weight: 500;
  --body-weight: 400;
  --strong-weight: 500;
  --label-weight: 500;
  --display-tracking: 0em;
  --display-leading: 1.15;
  --display-case: none;
  --body-leading: 1.5;
  --body-size: 16px;
  --icon-stroke: 2;
}

Tailwind 패턴:

요소클래스
pagemin-h-screen bg-[#FAFAFA] font-sans text-black/[0.87] antialiased
app-barflex h-14 md:h-16 items-center bg-[#3F51B5] px-4 text-xl font-medium text-white shadow-[0_2px_4px_-1px_rgba(0,0,0,0.2),0_4px_5px_0_rgba(0,0,0,0.14),0_1px_10px_0_rgba(0,0,0,0.12)]
cardrounded-sm bg-white p-4 shadow-[0_1px_3px_0_rgba(0,0,0,0.2),0_1px_1px_0_rgba(0,0,0,0.14),0_2px_1px_-1px_rgba(0,0,0,0.12)]
buttonh-9 min-w-[64px] rounded-sm bg-[#3F51B5] px-4 text-sm font-medium uppercase tracking-[0.09em] text-white shadow-md transition-shadow duration-300 ease-[cubic-bezier(0.4,0,0.2,1)] hover:shadow-lg active:shadow-xl
fabh-14 w-14 rounded-full bg-[#FF4081] text-white shadow-[0_3px_5px_-1px_rgba(0,0,0,0.2),0_6px_10px_0_rgba(0,0,0,0.14),0_1px_18px_0_rgba(0,0,0,0.12)]

비주얼 팩

이 스타일의 그림과 아이콘은 파일입니다. 있는 그대로 사용하거나, 명세로 읽고 동일한 언어로 직접 그리세요.

파일내용
pack/hero.svg히어로 플레이트, 800x600. 스타일의 비주얼 언어로 된 추상 그림.
pack/pattern.svg패턴 타일, 80x80. 양방향으로 반복됩니다.
pack/icons.svg아이콘 스프라이트: home, search, heart, star, bell, user, mail, calendar, image, bolt, play, check, close, sliders.
  • 아이콘: 단색, 24px 필드에 스트로크 2, 버트 캡, 라운드 조인, 컨테이너: 없음. 사용법: <svg class="icon"><use href="pack/icons.svg#home"/></svg>. 아이콘은 currentColor를 사용합니다.
  • 아이콘 패밀리: 스프라이트는 Google의 Material Symbols (Baseline, filled)에서 가져왔으며, 라이선스는 Apache 2.0입니다. 이유: 스타일 자체의 채워진 시스템 세트로, 24dp 그리드에 있습니다. 데모용 오픈소스 대체재입니다. 실제 제품에는 브랜드의 아이콘 라이브러리를 사용하고 아래 규칙에 따라 패밀리를 선택하세요.
  • 디스플레이 타입: 가중치 300, 자간 0em, 행간 1.15, 대소문자: 없음.
  • 가중치: 디스플레이 300, 부제목 500, 본문 400, 텍스트 내 볼드 500, 레이블 및 버튼 500. 스타일은 3가지 가중치(300, 400, 500)만 사용하며 다른 것은 사용하지 않습니다. 디스플레이는 본문보다 100 더 가벼우므로 크기가 계층을 전달합니다. 악센트는 가중치입니다: 더 무거운 단어가 강조이므로 가중치 간 단계가 명확합니다.
  • 본문 타입: 16px, 행간 1.5.
  • 페이지: 히어로 분할, 왼쪽 정렬, 일반 밀도, 강조 기울임 0°.
  • 텍스트 색상: --color-text는 주요 읽기 영역에만 사용됩니다. 각 영역에는 해당 토큰을 사용하세요: --color-on-bg, --color-on-surface, --color-on-primary, --color-on-accent.

아이콘 팩 선택 방법

아이콘 팩은 그림을 위한 서체입니다. 텍스트 서체와 동일한 주의를 기울여 선택하세요. 다음 규칙은 오픈소스 세트와 라이선스 라이브러리 모두에 적용됩니다.

  1. 획이 줄기와 일치합니다. 텍스트 크기에서 본문 텍스트 옆에 아이콘을 배치하세요. 아이콘의 선과 글자의 줄기가 동일한 두께를 가집니다.
  2. 터미널과 모서리는 반경 토큰을 따릅니다. 버트 캡과 마이터 조인은 반경 0과 함께 사용됩니다. 라운드 캡과 라운드 조인은 부드러운 반경과 함께 사용됩니다.
  3. 채움 모드는 시대의 기술을 따릅니다. 인쇄 시대는 단단한 형태를 깎습니다. 깊이가 있는 스크린 시대는 형태를 채우고 음영을 줍니다. 현재 제품 인터페이스는 윤곽선을 그립니다.
  4. 은유는 스타일보다 젊지 않습니다. 각 그림은 그 시대가 알고 있던 대상입니다. 더 최근의 은유가 있는 아이콘은 시대를 깨뜨립니다.
  5. 하나의 패밀리, 하나의 그리드. 모든 아이콘은 하나의 패밀리와 하나의 변형에서 나오며, 하나의 필드에 그려집니다. 한 표면에 패밀리를 혼합하지 마세요.
  6. 패밀리는 제품을 포괄합니다. 커밋하기 전에 제품에 필요한 각 개념을 나열하세요. 그 중 하나에 대한 아이콘이 없는 패밀리는 잘못된 패밀리입니다.
  7. 색상은 토큰입니다. 아이콘은 currentColor를 사용합니다. 두 번째 톤은 파일이 아닌 토큰에서 가져옵니다.
  8. 라이선스가 사용을 허용합니다. 세트의 라이선스를 읽으세요. 라이선스가 요구하는 경우 출처를 표시하세요. 브랜드가 있는 제품은 라이선스된 라이브러리를 사용하고 동일한 규칙을 적용하여 패밀리를 선택합니다.

계통 대안(Lineage fallbacks)

사용자가 변형을 요청할 때 즉흥적으로 대응하지 마세요. 여기에 명명된 이웃 스타일로 혼합하고 해당 스킬을 로드하세요.

  • 사용자가 더 평평한(flatter) 스타일을 요청하면 flat-design (Flat Design)으로 이동하세요. 모든 고도 그림자를 제거하고, 색상으로만 표면을 구분하며, 색상 팔레트와 8dp 그리드는 유지하세요.
  • 사용자가 더 질감 있는(more tactile) 스타일을 요청하면 skeuomorphism (Skeuomorphism)으로 이동하세요. 5~10% 그라데이션, 1px 내부 하이라이트 및 5% 불투명도의 표면 텍스처를 추가하고, 고도와 레이아웃은 유지하세요.

[번역 중단됨]

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

관련 스킬