π‘μμ½λμΈ μ»΄ν¬λνΈλ?
μμ½λμΈ μ»΄ν¬λνΈλ ν΄λ¦(λλ ν)κ³Ό κ°μ μ¬μ©μ λμμ λ°μνμ¬ κ΄λ ¨ μ½ν μΈ λ₯Ό νμ₯νκ±°λ μΆμνλ λ°©μμΌλ‘ μλν©λλ€. κ° μμ½λμΈ νλͺ©μ λ³΄ν΅ λ κ°μ§ μ£Όμ μμλ‘ κ΅¬μ±λ©λλ€
- ν€λ(Header): μ λͺ©μ΄λ νΈλ¦¬κ±° μν μ νλ©°, ν΄λ¦ μ μ½ν μΈ κ° μ΄λ¦¬κ±°λ λ«νλλ€.
- ν¨λ(Panel): ν€λμ μ°κ²°λ μ¨κ²¨μ§ μ½ν μΈ μμμ λλ€.
μ΄ μ»΄ν¬λνΈλ μ§κ΄μ μΈ μΈν°λμ λμμΈμ μ 곡νλ©°, νΉν λ€μκ³Ό κ°μ μν©μμ μ μ©ν©λλ€
- FAQ(μμ£Ό 묻λ μ§λ¬Έ) μΉμ
- μ€μ λ° κ΅¬μ± λ©λ΄
- λ€λ¨κ³ μ 보 νμ
μμ½λμΈ μ»΄ν¬λνΈλ₯Ό μν΄ κ³ λ―Όν μ
νλλ§ μ΄κΈ° vs λͺ¨λ μ΄κΈ°
μ¬μ€ μ΄ λΆλΆμ κ°λ°μ μ μ₯μμ κ³ λ―Όν기보λ€λ μ μ μ μ₯μμ κΈ°νμ, λμμ΄λμ ν¨κ» κ³ λ―Όνλ κ²μ΄ λ μ’λ€κ³ μκ°ν©λλ€.
κ°λ°μ μΈ λΆλΆμμλ κ° μμ½λμΈμ μ΄λ¦Ό λ«ν μνλ₯Ό μ΄λμ κ΄λ¦¬νλμ λ°λΌ λ¬λΌμ§ κ²μ λλ€. μνλ₯Ό μμ½λμΈλ€μ κ΄λ¦¬νλ λΆλͺ¨μμλ, contextμμ κ΄λ¦¬νλ€λ©΄ νλμ μμ½λμΈλ§ μ΄κ³ λ«μ μ μμ κ²μ΄λ©°, κ° μμ½λμΈ μμμμ λ΄λΉνλ€λ©΄ μμ½λμΈλ€μ΄ κ°λ³μ μΌλ‘ μλν μ μμ κ²μ λλ€. μ΄ μ¬λΆλ₯Ό κ²°μ νλ λ°μ κ°λ° λμ΄λλ κ·Έλ κ² λμ§ μκΈ° λλ¬Έμ, μ΄ λΆλΆμ μ μ μ μ₯μμ κ³ λ €νμ¬ κ°λ°νλ κ² μ€μνλ€ μκ°ν©λλ€.
μμ°μ€λ½κ² μ΄μλ€ νΌμΉκΈ°
λ§μ½ μμ½λμΈμ΄ νλλ§ μ΄μ μλ κ²½μ°μ μμ½λμΈμ΄ μ΄λ €μκ³ , λ€λ₯Έ μμ½λμΈμ΄ μ΄λ¦°λ€λ©΄ λλ λκΈ°λ λλμ΄ λ€ μ μμ΅λλ€. κ·Έ κ²½μ°μλ transition css λ₯Ό νμ©νμ¬ μμ½λμΈμ΄ μ΄λ¦¬κ³ λ«νλ κ³Όμ μ λΆλλ½κ² λ§λ€ μ μμ΅λλ€.
μ¨κ²¨μ§ μμλ₯Ό cmd + fλ₯Ό ν΅ν΄ μ°Ύμ μ μμκΉ?
μ΄ λΆλΆμ μ΄λ²μ κ°μλ₯Ό λ€μΌλ©΄μ μλ‘ κ³ λ―Όν΄ λ³Ό μ μμλ μμμ λλ€. κΈ°μ‘΄μ μ΄ λΆλΆμ λν΄μ μ ν κ³ λ €νμ§ μμμλλ°, λ¨μν state κ°μ λ°λΌ μ»΄ν¬λνΈλ₯Ό λ λ νλ€ / μ§μ λ€ νλ λ°©μμ cmd + fλ‘ μ ν μ°Ύμ μ μλ€λ μ μ κΉ¨λ¬μ μ μμμ΅λλ€.
μμ λ§νκ² μ²λΌ μμ½λμΈ μ»΄ν¬λνΈλ FAQλ μ€μ κ³Ό κ°μ΄ κ³ κ°λ€μκ² λ§μ μ 보λ₯Ό μ 곡ν λ μ¬μ©λλλ° cmd + f κΈ°λ₯μ΄ μλλλ μλλλ‘ λ§μ κ³ κ° κ²½ν μ°¨μ΄λ₯Ό μ€ μ μμ κ² κ°μ΅λλ€.
λν μ¬κΈ°μ λ λμκ° μμ½λμΈμμ κ²μν λ΄μ©μ΄ μλ€λ©΄, focus λΏλ§ μλλΌ μ΄λ¦΄ μλ§ μλ€λ©΄ λ μ’μ κ²½νμ μ€ μ μμ κ²μ λλ€.
πꡬνν΄λ³΄κΈ°
beforematch eventλ₯Ό νμ©ν cmd + f μ΄λ²€νΈ νμ
beforematchλ?
μ¬μ©μ λλ λΈλΌμ°μ κ²μκΈ°λ₯μ ν΅ν΄ κ²μλ λ΄μ©μ΄ hidden μμ±μ μν΄ κ°μ³μ€ μλ κ²½μ° νΈλ¦¬κ±° λλ μ΄λ²€νΈμ λλ€. HTMLμ Hidden Attributeμ κ΄λ ¨λ μ€νμ μΈ μ΄λ²€νΈλ‘ , μ£Όλ‘ κ²μ κ²°κ³Ό νμ΄λΌμ΄ν κ³Ό κ΄λ ¨λ μ¬μ©μ κ²½νμ κ°μ νκΈ° μν΄ λμ λμμ΅λλ€
μ¬μ©λ°©λ²
beforematchλ μλ‘ λμ
λ HTML attributeμΈ hiddenμ until-found μμ±κ³Ό ν¨κ» μ¬μ©ν΄μΌ ν©λλ€.
hidden=until-found μμ±μ μμκ° μ¨κ²¨μ Έ μμ§λ§ , before-matchμ κ°μ μ΄λ²€νΈ λ±μ ν΅ν΄ κ²μλλ©΄ μλμΌλ‘ νμλ¨μ μλ―Έν©λλ€.
const ref = useRef<HTMLDivElement | null>( null)
useEffect(() => {
if (ref.current) {
ref.current?.addEventListener('beforematch', event)
}
return () => {
if (ref.current) {
ref.current?.removeEventListener('beforematch', event)
}
}
}, [ref]);
return (
<li key={id}>
<div className={cx('tab')} onClick={toggle}>{title}</div>
<div ref={ref} className={cx('description')} HIDDEN={isOpen ? "undefined" : 'until-found'}>{description}</div>
</li>
)
μμ κ°μ΄ μ½λλ₯Ό μμ±νλ€λ©΄, νμ¬ μ΄λ €μμ§ μμ μμ½λμΈμ κ²½μ° hidden= until-foundκ° μ μ©λμ΄ μμΌλ©°, eventλ₯Ό ν΅ν΄ hidden λμ΄μλ μμκ° κ²μλλ©΄ ν΄λΉ μμ½λμΈμ μ΄μ΄μ£Όλ μ½λλ₯Ό μμ±ν΄ μ£Όλ©΄ λ κ²μ λλ€.
λ¬Έμ μ
ν΄λΉ λ°©λ²μ μ΄μ©νλ©΄ μκ°λ³΄λ€ μ½κ² cmd+f μ μμ½λμΈ μ΄κΈ° κΈ°λ₯μ μνν μ μμ΅λλ€. νμ§λ§, μ΄ κΈ°λ₯μ μμ§ μ€νμ μΈ κΈ°λ₯μ΄κΈ° λλ¬Έμ μ΅μ chrome, firefox λΈλΌμ°μ μμλ§ λμνλ©° firefox, safariμμλ μμ§ μ§μλμ§ μμμ μ μ μμ΅λλ€. μ μμμλ hiddenνκ·Έλ₯Ό λλ¬Έμλ‘ μ¬μ©νμλλ°, κ·Έ μ΄μ λ react DOMμμλ μμ§ hidden νκ·Έλ₯Ό μ μνμ§ λͺ»νμκ³ , μ΄μ λ°λΌ κ°μ μ μΌλ‘ 보μ μ²λ¦¬λ₯Ό νκΈ° λλ¬Έμ λλ€.
μμΈν λ΄μ©μ μ΄ λΈλ‘κ·Έμμ νμΈν μ μμ΅λλ€. https://hiddenest.dev/accessible-accordion
μ°Έκ³ λ‘ μ΄ λ°©λ²μ μ°λλΌλ, typescriptμμ μ£Όλ μλ¬λ₯Ό νΌνκΈ° μ΄λ €μΈ κ²μ λλ€. κ·Έλ κΈ° λλ¬Έμ μ λ μ§κΈ λΉμ₯ μ΄ λ°©λ²μ νλ‘λνΈμ μ°κΈ°μλ λ¬΄λ¦¬κ° μλ€κ³ νλ¨νμ΅λλ€.
details / summary νμ©ν μμ½λμΈ
μ¬μ©λ°©λ²
<details>λ₯Ό λΆλͺ¨μμλ‘ μ¬μ©νκ³ , <summary> νκ·Έμ μ λͺ©, μμ½μ μμ±νλ©΄ λΉκ΅μ μ½κ² ꡬνν μ μμ΅λλ€. λν, λΈλΌμ°μ κ° ν κΈκΈ°λ₯κ³Ό μ λλ©μ΄μ μ κΈ°λ³Έμ μΌλ‘ μ κ³΅ν΄ μ£ΌκΈ° λλ¬Έμ κΈ°λ³Έμ μΈ μμ½λμΈλ³΄λ€ ꡬνμ΄ ν¨μ¬ κ°λ¨ν©λλ€.
<details>
<summary>μ λͺ© λλ μμ½</summary>
<p>μ΄κ²μ μ¨κ²¨μ§ μμΈ λ΄μ©μ
λλ€.</p>
</details>
μ λ κ²°κ³Όμ μΌλ‘ μμ½λμΈμ μμ λ°©λ²μ ν΅ν΄μ ꡬννμ΅λλ€. κ·Έ μ΄λ΄λ htmlμμ κΈ°λ³Έμ μΌλ‘ μ κ³΅ν΄ μ£Όλ κΈ°λ₯μ΄κΈ° λλ¬Έμ μΉ μ κ·Όμ±μμ μ΄μ μ΄ μμ΅λλ€. λν, 곡κ°λ μ§ 10λ κ°κΉμ΄ λ κΈ°λ₯μ΄κΈ° λλ¬Έμ λλΆλΆμ λΈλΌμ°μ μμ μλμ΄ λλ€λ κ²λ ν° μ₯μ μ΄ μμ΅λλ€.
νμ§λ§, μ¬λ¬ κ°μ μμ½λμΈμ λμμ μ¬λ κ²μ μμ§ κ΅¬νλμ§ μλ λ¬Έμ μ μ΄ μμ΅λλ€. μ΄ λΆλΆμ κ³ λ €ν΄μ κΈ°νμμ λμμ΄λμ μν΅νλ€λ©΄ μ‘°κΈ λ νλ‘λνΈμ λ§λ μμ½λμΈμ μ νν μ μμ κ²μ΄λΌ μκ°ν©λλ€.
π κ²°κ³Όλ¬Ό
νμ¬ κ°μλ‘ λ°°μ΄ UI μ»΄ν¬λνΈ λ΄μ©μ λ°νμΌλ‘ μ€ν 리λΆμ νμ©νμ¬ κ°μΈμ μΌλ‘ λμμΈμμ€ν μ κ°λ°νκ³ μμ΅λλ€. κ°λ° κ²°κ³Όλ¬Όμ κ°λ°μ΄ λλλ λλ‘ μ λ°μ΄νΈνλλ‘ νκ² μ΅λλ€.
μ°Έκ³ κΈ
'κ°λ°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[UI ν΄ν μ»΄ν¬λνΈ (feat: UI μ§μ λ§λ€κΈ°) (0) | 2025.01.18 |
---|---|
[κ°μμ€ν¬λ‘€] κ°μμ€ν¬λ‘€ μ§μ κ°λ°νκΈ° (2) | 2024.10.19 |
[SARAMARA] λΉμ¦λμ€λ‘μ§ λΆλ¦¬νκΈ° (0) | 2023.12.11 |
μ½λ 리ν©ν λ§ (μ‘μ , λ°μ΄ν°, κ³μ° λλκΈ°) (0) | 2023.12.08 |
CORS (0) | 2023.12.06 |