๐ŸŒท CSS(2) BEM, class ์ด๋ฆ„ ์ •ํ•˜๊ธฐ

Lee Jooamยท2022๋…„ 4์›” 25์ผ
0

CSS๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ ์šฉํ•˜๋ ค๋ฉด ํด๋ž˜์Šค ์ด๋ฆ„์„ ์ง€์ •ํ•ด์„œ ํ™œ์šฉํ•˜๋Š” ๊ฒŒ ํŽธํ•˜๋‹ค.

ํ•˜์ง€๋งŒ ํด๋ž˜์Šค ์ด๋ฆ„์„ ๋งˆ๊ตฌ์žก์ด๋กœ ์ •ํ•˜๋‹ค๋ณด๋ฉด ๊ฒ‰์žก์„ ์ˆ˜ ์—†์ด ํŒŒ์ผ์ด ๋‚œ์žกํ•ด์ง„๋‹ค. ํŠนํžˆ๋‚˜ ๋””์ž์ธ์ด ํ™•์ •๋˜์ง€ ์•Š๊ณ  ํ˜ผ์ž ์—ฐ์Šตํ•  ๋•Œ ๊ทธ๋Ÿฌํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ด ๋‚˜ํƒ€๋‚œ๋‹ค.

๋ฏธ๋ฆฌ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฒช์—ˆ๋˜ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ƒ๊ฐํ•ด ๋‚ธ ํšจ์œจ์ ์ธ ํด๋ž˜์Šค ์ด๋ฆ„ ์ •ํ•˜๊ธฐ, BEM์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

BEM(Block, Element, Modifier)

<div class="block__element--modifier">Hello World</div>

BEM์€ ํŠน์ •ํ•œ ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ๋ชจ๋“ˆ์ด ์•„๋‹Œ ์ปจ๋ฒค์…˜์ด๋‹ค. ํด๋ž˜์Šค ์ด๋ฆ„์„ ์–ด๋–ป๊ฒŒ ์ง€์–ด์•ผ ์ข‹์€์ง€์— ๋Œ€ํ•œ ๊ทœ์น™๊ฐ™์€ ๊ฒƒ์ด๋‹ˆ ์ง€ํ‚ค์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•ด์„œ ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธฐ์ง€๋Š” ์•Š๋Š”๋‹ค.

ํ•˜์ง€๋งŒ ์–ด๋Š ์ •๋„ ๊ทœ๋ชจ๊ฐ€ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๋ถ€ํ„ฐ๋Š” naming ์ž์ฒด๊ฐ€ ์ค‘์š”ํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋˜๋„๋ก์ด๋ฉด ์ง€ํ‚ค๋„๋ก ์Šต๊ด€์„ ๋“ค์ด๋Š” ๊ฒŒ ์ข‹๋‹ค.

Block

block์€ ๋‹จ๋…์œผ๋กœ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ๋…๋ฆฝ์ ์ธ ๊ฐœ์ฒด์ด๋‹ค. ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋ผ๊ณ ๋„ ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ block์ด๋‚˜ element์— ์˜์กด์ ์ด๋ฉด ์•ˆ ๋œ๋‹ค.

์ถœ์ฒ˜: http://getbem.com/

๋‹ค์Œ ์บก์ฒ˜์—์„œ ํ˜•๊ด‘ํŽœ์œผ๋กœ ํ‘œ์‹œํ•œ navbar๊ฐ€ ํ•˜๋‚˜์˜ ๋ธ”๋ก์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

Element

๋ธ”๋ก์˜ ์ผ๋ถ€๋ถ„์ด๊ณ , ๋‹จ๋…์ ์ธ ์˜๋ฏธ๋ฅผ ๊ฐ–์ง€ ์•Š๋Š”๋‹ค. ์œ„์˜ ์˜ˆ์‹œ์—์„œ navbar์˜ ์š”์†Œ ํ•˜๋‚˜ํ•˜๋‚˜๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

<nav class="navbar">
  <div class="navbar__item">item</div>
</nav>

๋‹ค์Œ๊ณผ ๊ฐ™์ด block์˜ ์ผ๋ถ€๋ถ„์ž„์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

Modifier

block์ด๋‚˜ element์˜ ์ƒํƒœ, ๋ชจ์Šต, ๋™์ž‘ ๋“ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” flag์ด๋‹ค.

์œ„์˜ ์บก์ฒ˜์—์„œ Naming ํƒญ์„ ๋ณด๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Naming ๋ถ€๋ถ„๋งŒ ์ƒ‰์ด ๋ณ€ํ–ˆ๋Š”๋ฐ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ์—ด์–ด๋ณด๋ฉด

<li class="navbar__item--active">
  <a href="/naming/">Naming</a>
</li>

๋‹ค์Œ๊ณผ ๊ฐ™์ด class ์ด๋ฆ„์— modifier๊ฐ€ ์„ค์ •๋ผ ์žˆ๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ›„๊ธฐ

์—ฌํƒœ BEM์„ ์ž˜ ์จ๋ณด์ง€ ์•Š์•˜๋‹ค. css์˜ module ๊ธฐ๋Šฅ์„ ์•Œ๊ณ ๋‚œ ํ›„ ๊ณ„์† css module๋งŒ ์ผ๋‹ค. ๋„ˆ๋ฌด ์ผ์ฐ ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์„ ์•Œ์•„๋ฒ„๋ฆฐ ๋ถ€์ž‘์šฉ์ธ์ง€ class naming์— ๋Œ€ํ•œ ๋Šฅ๋ ฅ์ด ๋งŽ์ด ๋ถ€์กฑํ–ˆ๋‹ค.

์ง€๊ธˆ๋ถ€ํ„ฐ๋ผ๋„ ์˜์‹ํ•˜๋ฉด์„œ ์ด๋ฆ„์„ ์ง€์–ด์•ผ๊ฒ ๋‹ค.

profile
ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ๊ฑธ์–ด๊ฐ€๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€