-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
π μ»΄ν¬λνΈ μ 보
- μ»΄ν¬λνΈ μ΄λ¦: Button
- μ»΄ν¬λνΈ μ€λͺ : λ²νΌμ μ¬μ©μκ° νΌ μ μΆ, λνμμ μ΄κΈ°, μμ μ·¨μ, μμ μμ μν λ±μ μμ μ΄λ μ΄λ²€νΈλ₯Ό νΈλ¦¬κ±°ν μ μκ² ν΄μ£Όλ μμ ―
- μ¬μ© μ¬λ‘: νΌ μ μΆ, λνμμ μ΄κΈ°, μμ μ·¨μ, μμ μμ λ± λ€μν μ¬μ©μ μμ μ νΈλ¦¬κ±°ν λ μ¬μ©. λν ν κΈ λ²νΌμ΄λ λ©λ΄ λ²νΌ λ± λ€μν ννλ‘λ νμ© κ°λ₯
π μ°Έμ‘° λ° λ νΌλ°μ€
- ARIA Authoring Practices: W3C ARIA Button Pattern
- λ²νΌ ν¨ν΄μ μ€λͺ κ³Ό μμ, ν€λ³΄λ μΈν°λμ , μ κ·Όμ± κ³ λ €μ¬ν λ±μ μ°Έκ³ ν μ μμ
- κΈ°ν λ νΌλ°μ€:
- Web.dev - Building a button component
- λ²νΌ μ»΄ν¬λνΈ μ μ κ³Όμ μ μμΈν μ€λͺ ν κΈ
- MUI, Ant Design λ±μ UI λΌμ΄λΈλ¬λ¦¬μμ λ²νΌ μ»΄ν¬λνΈ κ΅¬ν λ°©μμ μ°Έκ³ ν μ μμ
- Web.dev - Building a button component
π μ κ·Όμ± λ° ARIA μ μ© μ¬λΆ
- ARIA Pattern μ μ©: W3C ARIA Button Pattern
- μ¬μ©λ ARIA μμ±:
role="button": μμκ° λ²νΌμμ λνλaria-pressed: ν κΈ λ²νΌμ μν(pressed/not pressed)λ₯Ό λνλaria-expanded: λ©λ΄ λ²νΌ λ±μμ μ°κ²°λ μμκ° νΌμ³μ‘λμ§ μ¬λΆλ₯Ό λνλaria-describedby: λ²νΌμ λν μ€λͺ μ΄ μλ μμμ IDλ₯Ό μ°Έμ‘°aria-labelledby: λ²νΌμ λ μ΄λΈ μν μ νλ μμμ IDλ₯Ό μ°Έμ‘°
- μ¬μ©λ ARIA μμ±:
- μ κ·Όμ± κ΄λ ¨ κ³ λ €μ¬ν:
- λ²νΌ ν μ€νΈλ λ²νΌμ λͺ©μ μ λͺ ννκ² μ λ¬ν΄μΌ ν¨
- λΉνμ±νλ λ²νΌμλ
aria-disabled="true"λ₯Ό μ¬μ© - ν κΈ λ²νΌμ μν λ³νλ₯Ό
aria-pressedλ‘ μ λ¬ - ν¬μ»€μ€ κ°λ₯ν λ²νΌμλ ν€λ³΄λλ‘λ μ κ·Ό λ° νμ±νν μ μμ΄μΌ ν¨
- μ κ·Όμ± κΈ°λ₯ μμ½:
- λ²νΌμ μ΄λ¦μ ν
μ€νΈ μ½ν
μΈ λ‘ μ 곡λκ±°λ
aria-label,aria-labelledbyλ‘ μ 곡 - λ²νΌ μν μ 보λ
aria-pressed,aria-expandedλ±μ μμ±μΌλ‘ μ λ¬ - λΉνμ±νλ λ²νΌμ
aria-disabled="true"λ₯Ό μ¬μ©νμ¬ λνλ
- λ²νΌμ μ΄λ¦μ ν
μ€νΈ μ½ν
μΈ λ‘ μ 곡λκ±°λ
ποΈ λ§ν¬μ ꡬ쑰 λΆμ
- HTML μλ§¨ν± νκ·Έ μ¬μ©:
<button>μμλ₯Ό μ¬μ©νλ κ²μ΄ κ°μ₯ μ ν©νμ§λ§,<div>,<a>,<input>λ±μ μμμrole="button"μ μ¬μ©νμ¬ λ²νΌμΌλ‘ λ§λ€ μλ μμ - λ§ν¬μ
ꡬ쑰 λΉκ΅:
- W3Cμ μμ:
<div tabindex="0" role="button">Print Page</div> <a tabindex="0" role="button" aria-pressed="false">Mute</a>
- Web.devμ μμ:
<button>Default</button> <button type="submit">Submit</button> <button type="reset">Reset</button> <button disabled>Disabled</button>
- Ant Designμ μμ:
<button type="button" class="ant-btn ant-btn-primary">Primary Button</button> <button type="button" class="ant-btn ant-btn-dashed">Dashed Button</button> <button type="button" class="ant-btn ant-btn-link">Link Button</button>
- MUIμ μμ:
<button class="MuiButton-root">Button</button> <button class="MuiButton-root Mui-disabled">Disabled</button>
- W3Cμ μμ:
- ꡬ쑰μ μ ν μ΄μ :
- λ€μ΄ν°λΈ
<button>μμκ° κ°μ₯ μ맨ν±νκ³ μ κ·Όμ±μ΄ μ°μ <div>,<a>λ±μ λ²νΌμΌλ‘ μ¬μ©ν λλrole="button"κ³Όtabindex="0"μ μΆκ°ν΄μΌ ν¨- Ant Design, MUI λ±μ
<button>μμμ ν΄λμ€λ₯Ό μΆκ°νμ¬ μ€νμΌμ μ μ©νλ λ°©μμ μ¬μ©
- λ€μ΄ν°λΈ
π‘ UI λΌμ΄λΈλ¬λ¦¬ λΉκ΅ λΆμ
- Ant Design:
<button>μμμant-btnν΄λμ€λ₯Ό μΆκ°νμ¬ μ€νμΌμ μ μ©- λ²νΌ νμ
(
primary,dashed,linkλ±)μ λ°λΌ λ€λ₯Έ ν΄λμ€λ₯Ό μΆκ°
- MUI:
<button>μμμMuiButton-rootν΄λμ€λ₯Ό μΆκ°νμ¬ κΈ°λ³Έ μ€νμΌμ μ μ©- λΉνμ±νλ λ²νΌμλ
Mui-disabledν΄λμ€λ₯Ό μΆκ° - λ²νΌ κ·Έλ£Ή μ»΄ν¬λνΈ(
ButtonGroup)λ₯Ό μ 곡
βοΈ κ΅¬ν λ° μ€κ³ κ³ λ €μ¬ν
- μ£Όμ μ€κ³ κ³ λ €μ¬ν:
- λ²νΌ ν μ€νΈλ λͺ ννκ³ κ°κ²°ν΄μΌ ν¨
- λ²νΌμ μν(νμ±ν/λΉνμ±ν, ν κΈ λ±)λ₯Ό μκ°μ μΌλ‘ λͺ νν μ λ¬ν΄μΌ ν¨
- ν€λ³΄λ ν¬μ»€μ€ λ° νμ±νλ₯Ό μ§μν΄μΌ ν¨
- λ²νΌμ λͺ©μ μ λ°λΌ μ μ ν
typeμμ±(button,submit,resetλ±)μ μ¬μ©ν΄μΌ ν¨
- μ½λ μμ:
<button type="button">μΌλ° λ²νΌ</button> <button type="submit">μ μΆ λ²νΌ</button> <button type="reset">리μ λ²νΌ</button> <button disabled>λΉνμ±ν λ²νΌ</button> <a role="button" tabindex="0" aria-pressed="false">ν κΈ λ²νΌ</a>
π ν μ€νΈ λ° κ²ν
- μ κ·Όμ± ν
μ€νΈ:
- ν€λ³΄λλ‘ λ²νΌμ μ κ·Όνκ³ νμ±νν μ μλμ§ νμΈ
- μ€ν¬λ¦° 리λλ‘ λ²νΌμ μ΄λ¦, μν , μν λ±μ΄ μ λλ‘ μ½νλμ§ νμΈ
- λΈλΌμ°μ νΈνμ± ν μ€νΈ: λ€μν λΈλΌμ°μ μμ λ²νΌμ μ€νμΌκ³Ό κΈ°λ₯μ΄ λμΌνκ² λμνλμ§ νμΈ
- μ¬μ©μ νΌλλ°±: μ€μ μ¬μ©μλ€μ΄ λ²νΌμ μ¬μ©νλ©΄μ κ²ͺλ λ¬Έμ μ μ΄λ κ°μ μ μ μλ ΄νκ³ λ°μ
π μΆκ° μ°Έκ³ μ¬ν
- κ΄λ ¨ λ¬Έμ:
- μ견 λ° μ μ:
- λ²νΌμ μ€νμΌμ μ¬μ΄νΈμ μ 체μ μΈ λμμΈ μμ€ν κ³Ό μΌκ΄λκ² μ€κ³νλ κ²μ΄ μ’μ
- μμ΄μ½λ§ μλ λ²νΌμ κ²½μ°
aria-labelμμ±μ μ¬μ©νμ¬ λ²νΌμ λͺ©μ μ μ€λͺ ν΄μΌ ν¨
π― μν , μμ±, μν λ° νκ·Έ μμ±
- Role, Attribute, State
- Role:
button<button>μμμλ κΈ°λ³Έμ μΌλ‘buttonμν μ΄ μ μ©λ¨<div>,<a>λ±μ μμλ₯Ό λ²νΌμΌλ‘ μ¬μ©ν λλrole="button"μ λͺ μμ μΌλ‘ μΆκ°ν΄μΌ ν¨
- Attribute:
aria-pressed: ν κΈ λ²νΌμ μν(pressed/not pressed)λ₯Ό λνλaria-expanded: λ©λ΄ λ²νΌ λ±μμ μ°κ²°λ μμκ° νΌμ³μ‘λμ§ μ¬λΆλ₯Ό λνλaria-describedby: λ²νΌμ λν μ€λͺ μ΄ μλ μμμ IDλ₯Ό μ°Έμ‘°aria-labelledby: λ²νΌμ λ μ΄λΈ μν μ νλ μμμ IDλ₯Ό μ°Έμ‘°tabindex="0": ν¬μ»€μ€ κ°λ₯ν λ²νΌμ λ§λ€ λ μ¬μ©
- State:
disabled: λ²νΌμ λΉνμ±νν λ μ¬μ©
- Role:
- JavaScript λ° CSS μ¬μ© μ¬λΆ
- JavaScript μ¬μ© μ¬λΆ: λ²νΌμ μν λ³κ²½, ν΄λ¦ μ΄λ²€νΈ μ²λ¦¬ λ±μ μν΄ JavaScriptλ₯Ό μ¬μ©ν μ μμ
- CSS μ μ© μ¬ν: λ²νΌμ μ€νμΌ(ν¬κΈ°, μμ, λ°°κ²½, ν λ리 λ±)μ CSSλ‘ μ μ©. μν(hover, focus, active, disabled)μ λ°λ₯Έ μ€νμΌ λ³νλ₯Ό κ³ λ €ν΄μΌ ν¨