🧱 BEM 방법둠: HTML/CSSλ₯Ό 효율적으둜 κ΄€λ¦¬ν•˜λŠ” 이름 μ§“κΈ°μ˜ λ§ˆλ²•

2025. 12. 15. 10:18Β·After. 2025

ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμ—μ„œ κ°€μž₯ μ€‘μš”ν•œ 것 쀑 ν•˜λ‚˜λŠ” μœ μ§€λ³΄μˆ˜μ„±μ΄ 높은 μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν”„λ‘œμ νŠΈ 규λͺ¨κ°€ 컀질수둝 CSS μ½”λ“œλŠ” λ³΅μž‘ν•΄μ§€κ³ , 클래슀 이름 μΆ©λŒμ΄λ‚˜ μ˜λ„μΉ˜ μ•Šμ€ μŠ€νƒ€μΌ 변경이 λΉˆλ²ˆν•˜κ²Œ λ°œμƒν•©λ‹ˆλ‹€.

μ΄λŸ¬λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ“±μž₯ν•œ 것이 λ°”λ‘œ BEM(Block, Element, Modifier) λ°©λ²•λ‘ μž…λ‹ˆλ‹€. BEM은 λͺ…ν™•ν•˜κ³  ꡬ쑰적인 이름 κ·œμΉ™μ„ μ œκ³΅ν•˜μ—¬ CSSλ₯Ό 효율적으둜 관리할 수 있게 λ•μŠ΅λ‹ˆλ‹€.


1. BEM μ΄λž€ 무엇인가?

BEM은 Block(블둝), Element(μš”μ†Œ), Modifier(μˆ˜μ •μž) μ„Έ κ°€μ§€ 핡심 κ°œλ…μœΌλ‘œ CSS 클래슀 이름을 κ΅¬μ„±ν•˜λŠ” λ°©λ²•λ‘ μž…λ‹ˆλ‹€. 이 ꡬ쑰λ₯Ό 톡해 클래슀 μ΄λ¦„λ§Œ 보더라도 ν•΄λ‹Ή HTML μš”μ†Œκ°€ μ–΄λ–€ 역할을 ν•˜κ³  μ–΄λ–€ μœ„μΉ˜μ— μžˆλŠ”μ§€ μ§κ΄€μ μœΌλ‘œ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

BEM의 κΈ°λ³Έ λͺ…λͺ… κ·œμΉ™

BEM은 block__element--modifier ν˜•νƒœμ˜ ꡬ쑰λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

  • κ΅¬λΆ„μž:
    • __ (두 개의 언더바): 블둝과 μš”μ†Œλ₯Ό κ΅¬λΆ„ν•©λ‹ˆλ‹€.
    • -- (두 개의 ν•˜μ΄ν”ˆ): μš”μ†Œ λ˜λŠ” 블둝과 μˆ˜μ •μžλ₯Ό κ΅¬λΆ„ν•©λ‹ˆλ‹€.

2. BEM의 μ„Έ κ°€μ§€ 핡심 ꡬ성 μš”μ†Œ

2.1. Block (블둝) πŸ“¦

블둝은 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 독립적인 ꡬ성 μš”μ†Œλ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. μž¬μ‚¬μš© κ°€λŠ₯ν•œ λ‹¨μœ„μ΄λ©°, 자체적으둜 의미λ₯Ό κ°€μ§‘λ‹ˆλ‹€.

  • νŠΉμ§•: λ…λ¦½μ μœΌλ‘œ μ‚¬μš©λ  수 μžˆμ–΄μ•Ό ν•˜λ©°, λ§ˆμ§„μ΄λ‚˜ μœ„μΉ˜ μ§€μ •(positioning) CSSλ₯Ό κ°€μ§€μ§€ μ•ŠλŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.
  • μ˜ˆμ‹œ: header, menu, button, card, search-form
  • 클래슀λͺ…: menu

2.2. Element (μš”μ†Œ) βš™οΈ

μš”μ†ŒλŠ” λΈ”λ‘μ˜ 뢀뢄이며, 블둝 μ—†μ΄λŠ” μ˜λ―Έκ°€ μ—†λŠ” 쒅속적인 ꡬ성 μš”μ†Œμž…λ‹ˆλ‹€.

  • νŠΉμ§•: 항상 λΆ€λͺ¨ 블둝에 속해야 ν•˜λ©°, λ‹¨λ…μœΌλ‘œ μ‚¬μš©λ˜μ–΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€. block__element ν˜•νƒœλ‘œ λͺ…λͺ…λ©λ‹ˆλ‹€.
  • μ˜ˆμ‹œ: menu λΈ”λ‘μ˜ ν•­λͺ©λ“€, card λΈ”λ‘μ˜ 제λͺ©μ΄λ‚˜ λ³Έλ¬Έ
  • 클래슀λͺ…: menu__item, card__title

2.3. Modifier (μˆ˜μ •μž) 🎨

μˆ˜μ •μžλŠ” 블둝 λ˜λŠ” μš”μ†Œμ˜ μ™Έκ΄€, μƒνƒœ, λ™μž‘ 등을 λ³€κ²½ν•˜λŠ” ν”Œλž˜κ·Έ(Flag) 역할을 ν•©λ‹ˆλ‹€. 같은 λΈ”λ‘μ΄λ‚˜ μš”μ†ŒλΌλ„ λ‹€λ₯΄κ²Œ λ³΄μ΄κ±°λ‚˜ μž‘λ™ν•˜κ²Œ λ§Œλ“€ λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

  • νŠΉμ§•: 원본 클래슀 뒀에 --modifier ν˜•νƒœλ‘œ λͺ…λͺ…λ©λ‹ˆλ‹€.
  • μ˜ˆμ‹œ: ν™œμ„±ν™”λœ λ²„νŠΌ, λΉ„ν™œμ„±ν™”λœ 메뉴 ν•­λͺ©, λ‹€λ₯Έ 크기의 μΉ΄λ“œ
  • 클래슀λͺ…: button--primary, menu__item--active, card--large

3. μ‹€μ œ μ½”λ“œ 적용 μ˜ˆμ‹œ

λ‹€μŒμ€ κ°„λ‹¨ν•œ 검색 폼(Search Form)을 BEM으둜 κ΅¬ν˜„ν•œ μ˜ˆμ‹œμž…λ‹ˆλ‹€.

<form class="search-form">
  <input type="text" class="search-form__input" placeholder="검색어λ₯Ό μž…λ ₯ν•˜μ„Έμš”">
  <button type="submit" class="search-form__button search-form__button--disabled">
    검색
  </button>
</form>
/* 1. Block: search-form */
.search-form {
  display: flex;
  padding: 10px;
  border: 1px solid #ccc;
}

/* 2. Element: search-form__input */
.search-form__input {
  flex-grow: 1;
  padding: 8px;
  border: none;
}

/* 3. Element: search-form__button */
.search-form__button {
  padding: 8px 15px;
  background-color: #007bff;
  color: white;
  border: none;
  cursor: pointer;
}

/* 4. Modifier: search-form__button--disabled */
.search-form__button--disabled {
  opacity: 0.5;
  cursor: not-allowed;
  /* λ²„νŠΌμ˜ λΉ„ν™œμ„±ν™” μƒνƒœλ₯Ό μ •μ˜ */
}

4. BEM λ°©λ²•λ‘ μ˜ μž₯점

  • λͺ…ν™•μ„± (Clarity): 클래슀 μ΄λ¦„λ§Œ 봐도 ν•΄λ‹Ή μš”μ†Œκ°€ μ–΄λ–€ 블둝에 μ†ν•˜λ©° μ–΄λ–€ 역할을 ν•˜λŠ”μ§€ μ¦‰μ‹œ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μž¬μ‚¬μš©μ„± (Reusability): 블둝 λ‹¨μœ„λ‘œ 독립적인 CSSκ°€ μž‘μ„±λ˜λ―€λ‘œ, νŠΉμ • 블둝을 λ‹€λ₯Έ νŽ˜μ΄μ§€λ‚˜ μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ‰½κ²Œ 가져와 μž¬μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 좩돌 λ°©μ§€ (Isolation): λͺ¨λ“  클래슀 이름이 κ³ μœ ν•˜κ³  μƒμ„Έν•˜κΈ° λ•Œλ¬Έμ—, μ „μ—­ CSSμ™€μ˜ μΆ©λŒμ΄λ‚˜ μ˜λ„μΉ˜ μ•Šμ€ μŠ€νƒ€μΌ 상속 문제λ₯Ό 근본적으둜 λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μœ μ§€λ³΄μˆ˜ μš©μ΄μ„± (Maintainability): μˆ˜μ •ν•΄μ•Ό ν•  μŠ€νƒ€μΌμ΄ μžˆμ„ λ•Œ, ν•΄λ‹Ή BEM 클래슀만 찾으면 λ˜λ―€λ‘œ μ½”λ“œλ₯Ό μΆ”μ ν•˜κ³  μˆ˜μ •ν•˜λŠ” μ‹œκ°„μ΄ λ‹¨μΆ•λ©λ‹ˆλ‹€.

5. κ²°λ‘ 

BEM은 λ‹¨μˆœν•œ λͺ…λͺ… κ·œμΉ™μ„ λ„˜μ–΄, λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ—μ„œ CSSλ₯Ό ꡬ쑰적이고 λͺ¨λ“ˆν™”λœ λ°©μ‹μœΌλ‘œ κ΄€λ¦¬ν•˜κ²Œ ν•΄μ£ΌλŠ” κ°•λ ₯ν•œ λ°©λ²•λ‘ μž…λ‹ˆλ‹€. μ²˜μŒμ—λŠ” 이름이 κΈΈμ–΄μ§€λŠ” 것에 거뢀감이 λ“€ 수 μžˆμ§€λ§Œ, ν”„λ‘œμ νŠΈμ˜ 규λͺ¨κ°€ 컀질수둝 BEM이 μ œκ³΅ν•˜λŠ” λͺ…ν™•μ„±κ³Ό μœ μ§€λ³΄μˆ˜μ„±μ€ 개발 생산성을 크게 ν–₯μƒμ‹œμΌœ 쀄 κ²ƒμž…λ‹ˆλ‹€.

μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ 동일쑰건 (μƒˆμ°½μ—΄λ¦Ό)

'After. 2025' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

πŸš€ BEM μ‹€μ „ κ°€μ΄λ“œ: SCSS ν™œμš©λ²•λΆ€ν„° λ†“μΉ˜κΈ° μ‰¬μš΄ 3κ°€μ§€ μ£Όμ˜μ κΉŒμ§€  (0) 2025.12.16
🧐 κΈ°λŠ₯ λͺ…μ„Έμ„œμ™€ ν”„λ‘œν† νƒ€μ΄ν•‘ 심측 ν•΄λΆ€  (0) 2025.12.14
UX/UI 기획의 핡심 λ¬Έμ„œ 3κ°€μ§€: κΈ°νšμžκ°€ λ°˜λ“œμ‹œ μ•Œμ•„μ•Ό ν•  것듀과 μΆ”μ²œ 툴  (0) 2025.12.13
μ™€μ΄μ–΄ν”„λ ˆμž„ VS μŠ€ν† λ¦¬λ³΄λ“œ ν™ˆνŽ˜μ΄μ§€ 기획의 핡심 차이!  (0) 2025.12.12
'After. 2025' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • πŸš€ BEM μ‹€μ „ κ°€μ΄λ“œ: SCSS ν™œμš©λ²•λΆ€ν„° λ†“μΉ˜κΈ° μ‰¬μš΄ 3κ°€μ§€ μ£Όμ˜μ κΉŒμ§€
  • 🧐 κΈ°λŠ₯ λͺ…μ„Έμ„œμ™€ ν”„λ‘œν† νƒ€μ΄ν•‘ 심측 ν•΄λΆ€
  • UX/UI 기획의 핡심 λ¬Έμ„œ 3κ°€μ§€: κΈ°νšμžκ°€ λ°˜λ“œμ‹œ μ•Œμ•„μ•Ό ν•  것듀과 μΆ”μ²œ 툴
  • μ™€μ΄μ–΄ν”„λ ˆμž„ VS μŠ€ν† λ¦¬λ³΄λ“œ ν™ˆνŽ˜μ΄μ§€ 기획의 핡심 차이!
빙고ꡬ맛탕
빙고ꡬ맛탕
  • 빙고ꡬ맛탕
    π•Žπ”Όπ”Ή 𝔸𝕃𝕃 𝕃𝕆𝔾
    빙고ꡬ맛탕
  • λΈ”λ‘œκ·Έ 메뉴

    • λ°©λͺ…둝
    • κΈ€μ“°κΈ°
    • κ΄€λ¦¬μž
    • 전체보기 N
      • w. Gemini
      • w. GPTs
      • After. 2025 N
      • Before. 2021
  • 인기 κΈ€

  • νƒœκ·Έ

    크둬 λΆ„ν•  보기
    css3
    크둬
    크둬 μ œλ―Έλ‚˜μ΄
    ie collapse 버그
    input fileνƒœκ·Έ λ°”κΎΈκΈ°
    box-shadow
    크둬 κΏ€νŒ
    크둬 읽기 λͺ¨λ“œ
    크둬 μˆ¨κ²¨μ§„ κΈ°λŠ₯
    크둬 ꡬ글 렌즈
    νƒ­ μ „ν™˜ 가속
    footer κ³ μ •
    border-collapse 였λ₯˜
    min-height:100%
    ie9 μ„  버그
    footer ν•˜λ‹¨μ— κ³ μ •
    μ œλ―Έλ‚˜μ΄
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.5
빙고ꡬ맛탕
🧱 BEM 방법둠: HTML/CSSλ₯Ό 효율적으둜 κ΄€λ¦¬ν•˜λŠ” 이름 μ§“κΈ°μ˜ λ§ˆλ²•
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”