μ§λ 1λΆμμλ μΉ μ κ·Όμ±μ΄ μ°λ¦¬ λͺ¨λλ₯Ό μν '보νΈμ κΆλ¦¬'λΌλ μ² νμ λ€λ€μ΅λλ€. κ·Έλ λ€λ©΄ μ΄ μ² νμ μ€μ μ½λλ‘ μ΄λ»κ² ꡬνν μ μμκΉμ? μ€λμ κ·Έ ν΄λ΅μΈ 'μλ§¨ν± λ§ν¬μ 'κ³Ό 'BEM λ°©λ²λ‘ 'μ νμμ μΈ λ§λ¨μ λν΄ μ΄μΌκΈ°ν΄ λ³΄κ² μ΅λλ€.
1. μλ§¨ν± λ§ν¬μ : νκ·Έμ 'μ΄λ¦'μ΄ μλ 'μλ―Έ'λ₯Ό λ΄λ€
μ°λ¦¬λ νν μΉνμ΄μ§λ₯Ό λ§λ€ λ μ΅κ΄μ μΌλ‘ <div> νκ·Έλ₯Ό μ¬μ©ν©λλ€. νμ§λ§ <div>λ μλ¬΄λ° μλ―Έκ° μλ λΉ μμμ κ°μ΅λλ€. λ°λ©΄ μλ§¨ν± νκ·Έ(Semantic Tags)λ κ·Έ μμ²΄λ‘ μ΄λ¦νλ₯Ό λ¬κ³ μμ΅λλ€.
<header>: "μ¬κΈ°λ λμ λΆμμ."<nav>: "μ¬κΈ°μ λ€λ₯Έ κ³³μΌλ‘ μ΄λν μ μμ΄μ."<main>: "μ¬κΈ°κ° μ§μ§ μ€μν ν΅μ¬ λ΄μ©μ΄μμ."<article>: "μ΄ λ΄μ©μ μ΄ μμ²΄λ‘ νλμ μμ±λ κΈμ΄μμ."
μ΄λ κ² νκ·Έλ₯Ό κ³¨λΌ μ°λ κ²λ§μΌλ‘λ κ²μ μμ§(SEO)μ μ°λ¦¬ μ¬μ΄νΈλ₯Ό λ μ μ΄ν΄νκ³ , μ€ν¬λ¦° 리λλ₯Ό μ¬μ©νλ μ¬μ©μλ κΈΈμ μμ§ μκ³ μνλ μ 보λ₯Ό μ°Ύμκ° μ μμ΅λλ€.
2. BEM λ°©λ²λ‘ : μ½λμ 'λ Όλ¦¬'λ₯Ό λνλ€
νκ·Έλ‘ λΌλλ₯Ό μΈμ λ€λ©΄, μ΄μ κ·Έ λΌλμ μ΄λ¦μ λΆμΌ μ°¨λ‘μ λλ€. μ΄λ λΉμ λ°νλ κ²μ΄ λ°λ‘ BEM(Block-Element-Modifier) λ°©λ²λ‘ μ λλ€.
BEMμ λ¨μν μ΄λ¦μ μμκ² μ§λ κ·μΉμ΄ μλλλ€. "μ΄ μμκ° μ΄λμ μν΄ μκ³ , μ΄λ€ κΈ°λ₯μ νλμ§"λ₯Ό μ½λλ§ λ³΄κ³ λ μ μ μκ² λ§λλ λ Όλ¦¬μ μΈ μ§λμ κ°μ΅λλ€.
- Block(λΈλ‘): λ
립μ μΈ μ»΄ν¬λνΈ (μ:
.c-card) - Element(μμ): λΈλ‘ λ΄λΆμ ꡬμ±μ (μ:
.c-card__title) - Modifier(μμμ΄): μνλ μΈνμ λ³ν (μ:
.c-card--featured)
3. μ μ΄ λμ΄ λ§λμΌ ν κΉμ? (μλμ§ ν¨κ³Ό)
μλ§¨ν± νκ·Έμ BEMμ΄ λ§λλ©΄, μΉμ¬μ΄νΈλ 'κΈ°κ³μ μΈκ° λͺ¨λκ° μ½κΈ° νΈν μλ²½ν ꡬ쑰'κ° λ©λλ€.
- μ μ§λ³΄μμ νλͺ : 6κ°μ λ€μ λ΄κ° μ§ μ½λλ₯Ό λ€μ λ΄λ, νΉμ λλ£κ° λ΄ μ½λλ₯Ό λ΄λ μ΄λλ₯Ό μμ ν΄μΌ ν μ§ λͺ νν΄μ§λλ€.
- μ κ·Όμ±μ μλν: λ Όλ¦¬μ μΈ BEM ꡬ쑰λ μμ°μ€λ½κ² λ Όλ¦¬μ μΈ λ¬Έμ ꡬ쑰λ₯Ό μ λν©λλ€. μ΄λ κ³§ νλ₯ν μΉ μ κ·Όμ±μΌλ‘ μ΄μ΄μ§μ£ .
- μ λ¬Έμ±μ μ¦κ±°: Airbnb μ€νμΌ κ°μ΄λμ²λΌ μ격ν κ·μΉμ μ€μνλ©° BEMμΌλ‘ μ€κ³λ μ½λλ, κ·Έ μμ²΄λ‘ μ μμμ κΉμ κ³ λ―Όκ³Ό μ λ¬Έμ±μ μ¦λͺ ν©λλ€.
μ λ¬Έκ°μ ν: "μλκ° λ΄κΈ΄ μ½λκ° μ’μ μ½λμ λλ€"
μ°λ¦¬κ° <div> μ§μ₯μμ λ²μ΄λλ €κ³ λ
Έλ ₯νκ³ , ν΄λμ€ νλμλ μΈλλ° λ κ°(__)λ₯Ό μ¨κ°λ©° κ³ λ―Όνλ μ΄μ λ κ²°κ΅ νλμ
λλ€. 'μ½λλ‘ μν΅νκΈ° μν΄μ'μ
λλ€.
λΈλΌμ°μ μκ²λ μ νν μ 보λ₯Ό μ λ¬νκ³ , λλ£ κ°λ°μμκ²λ λͺ νν ꡬ쑰λ₯Ό 보μ¬μ£Όλ©°, μ¬μ©μμκ²λ μ μ½ μλ μμ λ‘μμ μ£Όλ κ². μ΄κ²μ΄ λ°λ‘ μλ§¨ν± λ§ν¬μ κ³Ό BEMμ΄ μΆκ΅¬νλ μ§μ ν μΉ νμ€μ λͺ¨μ΅μ λλ€.
BEM vs μΌλ° μ½λ ꡬ쑰 λΉκ΅ (Before & After)
π« Before: μλ―Έ μλ div μ§μ₯ (ꡬ쑰 νμ
λΆκ°)
<div class="box-wrap">
<div class="top-title">곡μ§μ¬ν</div>
<div class="txt">μλΉμ€ μ κ² μλ΄μ
λλ€.</div>
<div class="go-btn red">νμΈ</div>
</div>
"κΈ°κ³(AI/μ€ν¬λ¦°λ¦¬λ)λ μ΄κ²μ 'κ·Έλ₯ μλ―Έ μλ μμλ€'λ‘ μΈμν©λλ€."
β
After: μλ§¨ν± + BEM ꡬ쑰 (λͺ
νν λ
Όλ¦¬)
<article class="c-notice-card">
<h2 class="c-notice-card__title">곡μ§μ¬ν</h2>
<p class="c-notice-card__desc">μλΉμ€ μ κ² μλ΄μ
λλ€.</p>
<button class="c-notice-card__btn c-notice-card__btn--f point">
νμΈ
</button>
</article>
"κΈ°κ³μ μ¬λ λͺ¨λ 'μ€μν 곡μ§μ¬ν μΉ΄λ'λΌλ κ±Έ μ¦μ μ΄ν΄ν©λλ€."
λ€μ μ΄μΌκΈ°: λΉμ μ μΉμ¬μ΄νΈκ° κ²μμ°½ 첫 μ€μ κ±Έλ¦¬μ§ μλ μ΄μ
ꡬ쑰λ₯Ό μ μ‘μλ€λ©΄, μ΄μ μ΄ λ Έλ ₯μ΄ μ΄λ»κ² λΉμ¦λμ€ κ°μΉλ‘ μ°κ²°λλμ§ μμλ³Ό μ°¨λ‘μ λλ€. λ€μ 3λΆμμλ [ꡬκΈμ΄ μ¬λνλ μΉ νμ€(SEO)]μ μ£Όμ λ‘, μ μ§μΈ μ½λκ° μ΄λ»κ² νΈλν½μ λΆλ¬μ€λμ§ νν€μ³ λ³΄κ² μ΅λλ€.
2λΆ ν΅μ¬ μμ½
- μλ§¨ν± νκ·Έλ νκ·Έ μ체μ μλ―Έλ₯Ό λΆμ¬ν΄ κΈ°κ³(AI, μ€ν¬λ¦° 리λ)μ μν΅νκ² νλ€.
- BEM λ°©λ²λ‘ μ μ΄λ¦μ λ Όλ¦¬λ₯Ό λΆμ¬ν΄ μΈκ°(κ°λ°μ, νΌλΈλ¦¬μ )κ³Ό μν΅νκ² νλ€.
- μ΄ λμ κ²°ν©μ μ μ§λ³΄μμ±κ³Ό μΉ μ κ·Όμ±μ λμμ μ‘λ κ°μ₯ κ°λ ₯ν 무기λ€.
π» μ½λ λ°μμ λ리λ 보좩 μ€λͺ
μ λ³Έλ¬Έμμ μΈκΈν BEM λͺ
λͺ
κ·μΉμμ ν΄λμ€λͺ
μμ λΆμ c-λ Componentλ₯Ό μλ―Ένλ μ λμ¬μ
λλ€. μ΄λ νλ‘μ νΈ κ·λͺ¨κ° μ»€μ§ λ μ νΈλ¦¬ν° ν΄λμ€μ μ»΄ν¬λνΈ ν΄λμ€λ₯Ό ꡬλΆνκΈ° μν μ€λ¬΄μ μΈ νμ
λλ€.
λν, μλ°μ€ν¬λ¦½νΈλ‘ μνλ₯Ό λ³κ²½ν λλ ν΄λμ€ μ체λ₯Ό λ°κΎΈκΈ°λ³΄λ€ .is-activeμ κ°μ μν ν΄λμ€λ₯Ό μΆκ°νκ±°λ, aria-expanded="true" κ°μ μ κ·Όμ± μμ±μ λ°λλΌ μλ°μ€ν¬λ¦½νΈλ‘ μ μ΄νλ κ²μ΄ μΉ νμ€μ λμ± λΆν©νλ λ°©μμ
λλ€.
