css naming convention
์ž‘์„ฑ : ๋ฐ•์ค€๊ธฐ
์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ์ฝ”๋“œ ๊ณต์œ ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” CSS๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค.
B__E--M
BEM ๋ฐฉ๋ฒ•๋ก  ๋„์ž…์˜ ํ•„์š”์„ฑ
CSS์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค. ์š”์†Œ๋“ค์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด id์™€ class๋ฅผ ๋‚จ๋ฐœํ•˜๋‹ค๋ณด๋ฉด ์–ด๋””์— ๋ฌด์—‡์ด ์žˆ์—ˆ๋Š”์ง€ ์•Œ๊ธฐ ๋„ˆ๋ฌด ํž˜๋“ค์–ด์ง„๋‹ค.
๋‹ค๋ฅธ ์‚ฌ๋žŒ๊ณผ์˜ ์ž‘์—… ๊ฒฐ๊ณผ๋ฌผ์„ ํ•ฉ์น˜๋‹ค ๋ณด๋ฉด ์ƒˆ๋กœ ๋งŒ๋“œ๋Š”๊ฒŒ ํ›จ์”ฌ ๋น ๋ฅด๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.
๊ทธ๋Ÿฌ๋‹ค๋ณด๋ฉด ์–ด๋А๋ง ๊ทธ๋ƒฅ ๋˜๋‹ค๋ฅธ ์“ฐ๋ ˆ๊ธฐ๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ๋Š” ๋‚˜๋ฅผ ๋ฐœ๊ฒฌํ•œ๋‹ค.
CSS ๋ฐฉ๋ฒ•๋ก ์˜ ์—ญ์‚ฌ
OOCSS
๋‹ˆ์ฝœ ์„ค๋ฆฌ๋ฒˆ(Nicole Sulivan) ์ œ์ฐฝ
โ€ข ๋ ˆ๊ณ ์ฒ˜๋Ÿผ ์ž์œ ๋กœ์šด ์กฐํ•ฉ์ด ๊ฐ€๋Šฅํ•œ ๋ชจ๋“ˆ์˜ ์ง‘ํ•ฉ์„ ๋งŒ๋“ค๊ณ 
โ€ข ๊ทธ ๋ชจ๋“ˆ์„ ์กฐํ•ฉํ•ด ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.
โ€ข ๋”ฐ๋ผ์„œ ์‹ ๊ทœ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์—๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ถ”๊ฐ€์ ์ธ CSS๋ฅผ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†๋‹ค.
โ€ข ๋ชจ๋“ˆ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋‘๊ฐ€์ง€ ์›์น™(์ŠคํŠธ๋Ÿญ์ณ์™€ ์Šคํ‚จ์„ ๋ถ„๋ฆฌ / ์ปจํ…Œ์ด๋„ˆ์™€ ์ฝ˜ํ…์ธ  ๋ถ„๋ฆฌ)์„ ๋”ฐ๋ฅธ๋‹ค.
- Object Oriented CSS(๊ฐ์ฒด ์ง€ํ–ฅ CSS) -
ABOUT OOCSS
์ŠคํŠธ๋Ÿญ์ณ์™€ ์Šคํ‚จ - With, height, padding, margin ๋“ฑ / color, font, background, box-shadow๋“ฑ ์ปจํ…Œ์ด๋„ˆ์™€ ์ฝ˜ํ…์ธ  ๋ถ„๋ฆฌ โ€“ ๋ชจ๋“ˆ์„ ์˜์—ญ์— ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค
์š”์†Œ
๋ชจ๋“ˆ
OOCSS ์ •๋ฆฌ
์žฅ์ 
โ€ข ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์Œ: OOCSS๋Š” CSS ์ฝ”๋“œ๋ฅผ ๋ชจ๋“ˆ ๋‹จ์œ„๋กœ ๊ตฌ์„ฑํ•˜๋ฏ€๋กœ, ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์–‘์„ ์ค„์ด๊ณ , ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋†’์Œ: OOCSS๋Š” ์ฝ”๋“œ๋ฅผ ๊ตฌ์กฐํ™”ํ•˜๋ฏ€๋กœ, ์ฝ”๋“œ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋†’์•„์ง„๋‹ค.
์Šคํƒ€์ผ์„ ์ˆ˜์ •ํ•ด๋„ ๋ ˆ์ด์•„์›ƒ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ณ , ๋ ˆ์ด์•„์›ƒ์„ ์ˆ˜์ •ํ•ด๋„ ์Šคํƒ€์ผ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข ํ™•์žฅ์„ฑ์ด ๋†’์Œ: OOCSS๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ฑ„์šฉํ•˜๋ฏ€๋กœ, ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
์ƒˆ๋กœ์šด ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, ๊ธฐ์กด ๋ชจ๋“ˆ์„ ์ˆ˜์ •ํ•ด๋„ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ์ด ๋†’์•„์ง„๋‹ค.
๋‹จ์ 
โ€ข ํ•™์Šต ๋‚œ์ด๋„ ๋†’์Œ / ์ฝ”๋“œ์˜ ์–‘์ด ๋Š˜์–ด๋‚จ / ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง
๊ธฐํƒ€์˜๊ฒฌ
โ€ข OOCSS์˜ ์—ญ์‚ฌ๋Š” ๋งค์šฐ ๊ธธ๋ฉฐ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ทœ์น™์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๊ฒƒ๋„ ๋งŽ์ง€ ์•Š๋‹ค.
โ€ข ๋‹ค๋ฅธ CSS๋ฐฉ๋ฒ•๋ก ๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌOCSS๋ฅผ ์ฐธ์กฐํ•˜๋ฉด์„œ ๊ฐœ์„ ํ•œ ๊ฒƒ
โ€ข ์˜ค๋Š˜๋‚  ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์˜ ๊ฐœ๋ฐœ์—” OOCSS ํ•œ ๊ฐ€์ง€๋งŒ์œผ๋กœ ์‹ค์งˆ์ ์ธ CSS ์„ค๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋‹ค์ง€ ํ˜„์‹ค์ ์ด์ง€ ์•Š๋‹ค.
CSS ๋ฐฉ๋ฒ•๋ก ์˜ ์—ญ์‚ฌ
SMACSS
- Scalable and Modular Architecture for CSS(ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“ˆํ™”๋œ ์•„ํ‚คํ…์ณ CSS) -
์กฐ๋‚˜๋‹จ ์Šค๋ˆ…(Jonathan Snook) ์ œ์ฐฝ
CSS ์ฝ”๋“œ๋ฅผ ๊ทธ ์—ญํ• ์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜ํ•œ ๊ฒƒ์ด ํŠน์ง•
โ€ข Base(๋ฒ ์ด์Šค)
โ€ข Layout(๋ ˆ์ด์•„์›ƒ)
โ€ข Module(๋ชจ๋“ˆ)
โ€ข State(์Šคํ…Œ์ดํŠธ)
โ€ข Theme(ํ…Œ๋งˆ)
ABOUT SMACSS
Base(๋ฒ ์ด์Šค) ๊ทœ์น™
โ€ข ํ”„๋กœ์ ํŠธ์˜ ํ‘œ์ค€ ์Šคํƒ€์ผ์˜ ์ •์˜ โ€“ ๋ฐ”ํƒ•ํ™”๋ฉด ์ƒ์ƒ๊ณผ ๊ฐ™์€ ํ”„๋กœ์ ํŠธ ์ „๋ฐ˜์— ์ ์šฉ๋˜๋Š” ์Šคํƒ€์ผ๋ง์ž…๋‹ˆ๋‹ค.
โ€ข ๋˜ํ•œ ๋ธŒ๋ผ์šฐ์ €๊ฐ„์˜ ์ฐจ์ด๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋ฆฌ์…‹ CSS, ๋…ธ๋ฉ€๋ผ์ด์ฆˆ CSS๋„ SMACSS ๊ธฐ์ค€์—๋Š” ๋ฒ ์ด์Šค ๊ทœ์น™์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
โ€ข ์›น์‚ฌ์ดํŠธ์˜ ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌ์„ฑํ•˜๋Š” ํฐ ๋ชจ๋“ˆ์— ๊ด€ํ•œ ๊ทœ์น™์ด๋ฉฐ, ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ชจ๋“ˆ์€ ํŠน์ • ํŽ˜์ด์ง€์— ํ•œ์ฐจ๋ก€๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋งŽ์œผ๋ฏ€๋กœ ID์…€๋ ‰ํ„ฐ
โ€ข ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“ˆ์˜ ๊ฒฝ์šฐ์—” Class ์…€๋ ‰ํ„ฐ๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.
โ€ข ๋งŒ์•ฝ ํŠน์ •ํŽ˜์ด์ง€์—์„œ ๋ ˆ์ด์•„์›ƒ์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด SMACSS ์—์„œ๋Š” ์†์ž ์…€๋ ‰๋ฅผ ์ด์šฉํ•ด ๋ ˆ์ด์•„์›ƒ ๋ชจ๋“ˆ ์Šคํƒ€์ผ์„ ๋ฎ์–ด์“ธ ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
ABOUT SMACSS
Layout(๋ ˆ์ด์•„์›ƒ) ๊ทœ์น™
โ€ข ๋ชจ๋“ˆ์€ ํƒ€์ดํ‹€, ๋ฒ„ํŠผ, ์นด๋“œ, ๋„ค๋น„๊ฒŒ์ด์…˜ ๋“ฑ ์ผ๋ฐ˜์ ์ธ UI์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
โ€ข ๋ชจ๋“  ๋ชจ๋“ˆ์€ ๋ ˆ์ด์•„์›ƒ ๊ทœ์น™์•ˆ์— ๋ฐฐ์น˜๋˜๋Š” ๊ฒƒ์„ ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
โ€ข ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋ ˆ์ด์•„์›ƒ ์•ˆ์— ์‚ฝ์ž…ํ•˜๋”๋ผ๋„ ํ˜•ํƒœ๊ฐ€ ๋ถ€์„œ์ง€๊ฑฐ๋‚˜ ๋‹ฌ๋ผ์ง€์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
โ€ข ๋ชจ๋“ˆ์€ ํŽ˜์ด์ง€ ๋‚ด์—์„œ ๋ฐ˜๋ณต์‚ฌ์šฉ๋˜๋Š” ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•˜๋ฏ€๋กœ ๋ฃจํŠธ ์š”์†Œ์—๋Š” ๋ฐ˜๋“œ์‹œ ํด๋ž˜์Šค ์…€๋ ‰ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.(ID์…€๋ ‰ํ„ฐ X)
ABOUT SMACSS
Module(๋ชจ๋“ˆ) ๊ทœ์น™
โ€ข ๊ธฐ์กด ์Šคํƒ€์ผ์„ ๋ฎ์–ด์“ฐ๊ฑฐ๋‚˜ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
โ€ข ๊ธฐ์กด ์Šคํƒ€์ผ์— ๋ชจ๋‘ ๋ฎ์–ด์จ์„œ ์Šคํ…Œ์ดํŠธ ์Šคํƒ€์ผ์„ ๋ฐ˜์˜ํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ๋Œ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” !important ์‚ฌ์šฉ๋„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.
โ€ข ์Šคํ…Œ์ดํŠธ๋Š” ๋ ˆ์ด์•„์›ƒ์ด๋‚˜ ๋ชจ๋“ˆ์— ํ• ๋‹น ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ€ข ์Šคํ…Œ์ดํŠธ ๊ทœ์น™์— ๋”ฐ๋ฅธ ํด๋ž˜์Šค ์ด๋ฆ„์€ ๋ชจ๋‘ is- ์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์—ฌ ๋‹ค๋ฅธ ๊ทœ์น™๊ณผ ๊ตฌ๋ณ„ํ•˜๋ฉฐ, ์–ด๋–ค ๋ชจ๋“ˆ์— ์ ์šฉํ•˜๋Š”์ง€๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•œ๋‹ค.
ABOUT SMACSS
State(์Šคํ…Œ์ดํŠธ) ๊ทœ์น™
โ€ข ์‚ฌ์ดํŠธ ๋‚ด ๋ ˆ์ด์•„์›ƒ์ด๋‚˜ ์ƒ‰์ƒ, ํ…์ŠคํŠธ ์ฒ˜๋ฆฌ ๋“ฑ์„ ์ผ์ •ํ•œ ๊ทœ์น™์— ๋”ฐ๋ผ ๋ฎ์–ด์“ฐ๋Š” ๊ฒƒ(๋ ˆ์ด์•„์›ƒ๊ทœ์น™+์Šคํ…Œ์ดํŠธ๊ทœ์น™)
โ€ข ๊ธฐ์กด์˜ ๋‹ค์–‘ํ•œ ์Šคํƒ€์ผ๋ง์ด ๋ฎ์–ด์“ฐ๊ธฐ์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค.(๋‹คํฌ๋ชจ๋“œ์ „ํ™˜, ํ…Œ๋งˆ ์ปฌ๋Ÿฌ&์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ ๋“ฑ)
โ€ข theme ์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์ผ ๊ฒƒ์„ ๊ถŒ์žฅ
ABOUT SMACSS
Theme(ํ…Œ๋งˆ) ๊ทœ์น™
SMACSS ์ •๋ฆฌ
์žฅ์ 
โ€ข ๊ณตํ†ต๋œ ๋ถ€๋ถ„์„ ์ •์˜ํ•ด์„œ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ.
โ€ข ๊ตฌ์กฐ์  ์ƒํ™ฉ์— ๊ด€๊ณ„์—†์ด ๋™์ผํ•œ ํด๋ž˜์Šค๋ผ๋ฉด ๋™์ผํ•œ ์Šคํƒ€์ผ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Œ.
โ€ข ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์œผ๋กœ ์ฝ”๋“œ ์–‘์ด ์ค„์–ด๋“ฌ.
๋‹จ์ 
โ€ข ๊ณตํ†ต๋œ ํด๋ž˜์Šค๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ •์ด ๋ฐœ์ƒํ•  ์‹œ ๋ฉ€ํ‹ฐํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ.
โ€ข ๋ฉ€ํ‹ฐํด๋ž˜์Šค๊ฐ€ ๋งŽ์•„์ง์— ๋”ฐ๋ผ ์œ ์ง€๋ณด์ˆ˜์— ์–ด๋ ค์›€ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง.
๊ธฐํƒ€์˜๊ฒฌ
โ€ข ํ”„๋กœ์ ํŠธ์—์„œ ๊ณ ๋ คํ•ดํ•˜ ํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ CSS ๊ทœ์น™์„ ํฌํ•จ ํ•œ๋‹ค.
โ€ข ๊ฐ ๊ทœ์น™์ด ์—„๊ฒฉํ•˜์ง€ ์•Š์•„ ์œ ์—ฐํ•˜๊ฑฐ๋‚˜, ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๊ทœ์น™์ด ๋„ˆ๋ฌด ์œ ์—ฐํ•˜์—ฌ ์‹ค์ œ ์ฝ”๋“œ์˜ ์ง€์นจ์œผ๋กœ ์‚ผ๊ธฐ ์–ด๋ ต๋‹ค.
โ€ข ๋ชจ๋“ˆ ๊ทœ์น™์— OOCSS๋ฅผ ์ ์šฉํ•˜๊ฑฐ๋‚˜ BEM์˜ ๊ทœ์น™์„ ์ผ๋ถ€ ์ ์šฉํ•˜๋Š” ๋“ฑ ๋‹ค๋ฅธ ์„ค๊ณ„ ๊ธฐ๋ฒ•๊ณผ ์กฐํ•ฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.
BEM์ด๋ž€?
- Block, Element, Modifier -
Yandex็คพ(๋Ÿฌ์‹œ์•„)
โ€ข ๋Ÿฌ์‹œ์•„์˜ YANDEX์‚ฌ๊ฐ€ ์ œ์ฐฝํ•œ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์›น ๊ฐœ๋ฐœ ์ ‘๊ทผ๋ฒ•
โ€ข UI๋ฅผ ๋…๋ฆฝ๋œ ๋ธ”๋ก์œผ๋กœ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ๋ณต์žกํ•œ ํŽ˜์ด์ง€๋„ ๊ฐ„๋‹จํ•˜๊ณ  ์‹ ์†ํ•˜๊ฒŒ ๊ฐœ๋ฐœ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ 
โ€ข ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ๋ชจ๋“ˆ ๊ธฐ๋ฐ˜ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ, ๊ทธ ๋‚ด์šฉ์ด ๋‹ค๋ฅธ ์„ค๊ณ„ ๊ธฐ๋ฒ•์— ๋น„ํ•ด ์—„๊ฒฉํ•˜๊ณ  ๊ฐ•๋ ฅํ•˜์—ฌ
์„ธ๊ณ„์ ์œผ๋กœ ์ด๋ฆ„์ด ์•Œ๋ ค์กŒ์œผ๋ฉฐ ์‹ค์ œ๋กœ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.
BEM
https://en.bem.info/
Smashing Magazine
https://www.smashingmagazine.com/2012/04/a-new-front-end-methodology-bem/
โ€ข ๊ฐœ๋ฐœ, ๋””๋ฒ„๊น…, ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์œ„ํ•˜์—ฌ CSS ์„ ํƒ์ž์˜ ์ด๋ฆ„์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ด๋ฉฐ, ์†Œ๋ฌธ์ž, ์ˆซ์ž ๋งŒ์„ ์ด์šฉํ•ด์„œ ์ž‘๋ช…ํ•œ๋‹ค.
โ€ข ์—ฌ๋Ÿฌ๋‹จ์–ด์˜ ์กฐํ•ฉ์€ ํ•˜์ดํ”ˆ(-)์œผ๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์ž‘๋ช…ํ•œ๋‹ค.
โ€ข BEM์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ID๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ, class๋งŒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
โ€ข '์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”๊ฐ€'๊ฐ€ ์•„๋‹ˆ๋ผ '์–ด๋–ค ๋ชฉ์ ์ธ๊ฐ€'์— ๋”ฐ๋ผ ์ด๋ฆ„์„ ์ง“์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋„์šฐ๋Š” P ํƒœ๊ทธ์—๊ฒŒ๋Š” .red๊ฐ€ ์•„๋‹Œ, .error๋ผ๋Š” ์ด๋ฆ„์„ ์ค˜์•ผํ•ฉ๋‹ˆ๋‹ค.
BEM ๊ธฐ๋ณธ ๊ตฌ์กฐ ๋ฐ ์ž‘๋ช…๊ทœ์น™
์ž‘๋ช…๊ทœ์น™
โ€ข BEM์€ Blcok, Element, Modifier๋กœ ๊ตฌ์„ฑ๋œ ๋„ค์ด๋ฐ์„ ํ•˜๋Š” ๊ฒƒ ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์„ ๊ฐ๊ฐ __์™€ --๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
๊ธฐ๋ณธ๊ตฌ์กฐ
โ€ข ์œ„ ์ฝ”๋“œ์—์„œ header๋Š” Block, naviagtion์€ Element, navi-text๋Š” Modifier๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
BEM Block
โ€ข ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์ ์œผ๋กœ ๋…๋ฆฝ์ ์ธ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ(A functionally independent page component that can be reused)
โ€ข ๋ธ”๋Ÿญ์€ ๋ธ”๋Ÿญ์„ ๊ฐ์Œ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .header>.logo๋Š” header๋ผ๋Š” ๋ธ”๋Ÿญ ์•ˆ์— logo๋ผ๋Š” ๋ธ”๋Ÿญ์ด ๋“ค์–ด๊ฐ„ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.
๋ธ”๋ก์ด๋ž€?
BEM Element
โ€ข ๋ธ”๋Ÿญ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ๋ธ”๋Ÿญ์€ ๋…๋ฆฝ์ ์ธ ํ˜•ํƒœ์ธ ๋ฐ˜๋ฉด, ์—˜๋ฆฌ๋จผํŠธ๋Š” ์˜์กด์ ์ธ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.
์ž์‹ ์ด ์†ํ•œ ๋ธ”๋Ÿญ ๋‚ด์—์„œ๋งŒ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ธ”๋Ÿญ ์•ˆ์—์„œ ๋–ผ์–ด๋‹ค ๋‹ค๋ฅธ ๋ฐ ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.)
โ€ข ์œ„ ์˜ˆ์‹œ์—์„œ .search-form์€ ๋ธ”๋Ÿญ์ด๊ณ , .search-form__input๊ณผ .search-form__button์€ ์—˜๋ฆฌ๋จผํŠธ์ž…๋‹ˆ๋‹ค.
์ € search-form์ด๋ž€ ๋ธ”๋Ÿญ์€ ๋–ผ์–ด๋‚ด์„œ ์š”๊ธฐ์กฐ๊ธฐ ๋งˆ์Œ๊ป ๋ถ™์—ฌ๋„ ๋ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋‚ด๋ถ€์˜ input๊ณผ button์€ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ ์ธํ’‹์ฐฝ์ด์ž ๋ฒ„ํŠผ์ด๊ธฐ ๋•Œ๋ฌธ์—, search-form ์•ˆ์—์„œ๋งŒ ์กด์žฌ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ์—˜๋ฆฌ๋จผํŠธ์ž…๋‹ˆ
์—˜๋ฆฌ๋จผํŠธ๋ž€?
BEM Element
โ€ข ์—˜๋ฆฌ๋จผํŠธ๋Š” .block > .block__element1 > .block__element2์™€ ๊ฐ™์ด ์ค‘์ฒฉ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
โ€ข .block_element2๋ฅผ .block_element1์˜ ํ•˜์œ„ ์—˜๋ฆฌ๋จผํŠธ๋กœ ๋ณด์ง€ ์•Š๊ณ  ๋‘˜ ๋‹ค ๋˜‘๊ฐ™์ด .block์˜ ์—˜๋ฆฌ๋จผํŠธ๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ํด๋ž˜์Šค๋„ค์ž„์— ์บ์Šค์ผ€์ด๋”ฉ์„ ์—ฌ๋Ÿฌ๋ฒˆ ํ‘œ์‹œํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
์ค‘์ฒฉ์‚ฌ์šฉ
โ€ข ์œ„ ํ˜•ํƒœ๋Š” block-name__element-name์ด๋ž€ ํ˜•์‹์„ ๋”ฐ๋ฅด๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.๋Œ€์‹ ์— ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
BEM Modifier
โ€ข ๋ชจ๋””ํŒŒ์ด์–ด๋Š” ๋ธ”๋Ÿญ์ด๋‚˜ ์—˜๋ฆฌ๋จผํŠธ์˜ ์†์„ฑ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
โ€ข ์ƒ๊ธด ๊ฒŒ ์กฐ๊ธˆ ๋‹ค๋ฅด๊ฑฐ๋‚˜, ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š” ๋ธ”๋Ÿญ์ด๋‚˜ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
๋ชจ๋””ํŒŒ์ด์–ด๋ž€?
BEM Modifier
โ€ข ์œ„ ์ฝ”๋“œ์—์„œ --focused๊ฐ€ ์ˆ˜์‹์–ด์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ €๋ ‡๊ฒŒ ์ž‘์„ฑ๋œ ๊ฑธ ๋ถˆ๋ฆฌ์–ธ(boolean) ํƒ€์ž…์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ,
๊ทธ ๊ฐ’์ด true๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ฉฐ โ€œโ€”โ€๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋ถˆ๋ฆฌ์–ธ(boolean) ํƒ€์ž…๊ณผ ํ‚ค-๋ฐธ๋ฅ˜(key-value)
โ€ข ์œ„ ์˜ˆ์‹œ์—์„œ color-gray๊ณผ theme-normal๊ฐ€ key-value ํƒ€์ž…์— ํ•ด๋‹นํ•˜๋ฉฐ, ํ•˜์ดํ”ˆ์œผ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
BEM ์ •๋ฆฌ
์žฅ์ 
โ€ข ํด๋ž˜์Šค๋„ค์ž„๋งŒ์œผ๋กœ ๋งˆํฌ์—… ๊ตฌ์กฐ๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ธ”๋Ÿญ๊ณผ ์—˜๋ฆฌ๋จผํŠธ๋กœ ๊ตฌ๋ถ„๋˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋””์„œ๋ถ€ํ„ฐ ๋–ผ์–ด๋‹ค ์“ธ ์ˆ˜ ์žˆ๋Š”์ง€, ์–ด๋””๋ถ€ํ„ฐ ์ข…์†๋˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ€ข SASS์˜ ๋ถ€๋ชจ์ฐธ์กฐ์ž(&)์™€ ์ฐฐ๋–ก๊ถํ•ฉ! ์“ฐ๊ธฐ๊ฐ€ ๋ฌด์ฒ™ ํŽธํ•ฉ๋‹ˆ๋‹ค.
โ€ข ์ž‘์„ฑ๋œ SASS์—์„œ ์š”์†Œ๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, .header ์•„๋ž˜์— &__logo, &__search๋กœ ์ž‘์„ฑํ•˜๋ฉด "ํ—ค๋” ์•„๋ž˜ ๋กœ๊ณ ๊ณ  ์ €๊ฑด ํ—ค๋” ์•„๋ž˜ ๊ฒ€์ƒ‰์ด๊ตฌ๋‚˜"๋ž€ ๊ฑธ ๋ฐ”๋กœ ์•Œ ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
โ€ข SASS ์ž‘์„ฑ ์‹œ, ๋Š˜์–ด์ง€๋Š” ์…€๋ ‰ํŒ…์„ ๋ง‰์•„์ค๋‹ˆ๋‹ค. ๊ธฐ์กด์— nested ๋ฐฉ์‹์œผ๋กœ SASS๋ฅผ ์ž‘์„ฑํ•˜๋ฉด, ์ปดํŒŒ์ผ ์‹œ ์…€๋ ‰ํŒ…์ด ๋๋„ ์—†์ด ๊ธธ์–ด์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์ง€๋งŒ
ex(.header .nav .list .item .link )
๊ทธ๋Ÿฐ๋ฐ BEM ๋ฐฉ์‹์„ ์“ฐ๋ฉด, ๋„ˆ๋„๋‚˜๋„ ์—˜๋ฆฌ๋จผํŠธ๋ผ์„œ ๊ตณ์ด ๊นŠ๊ฒŒ nestedํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ง‘๋‹ˆ๋‹ค.
๋‹จ์ 
โ€ข ํด๋ž˜์Šค๋„ค์ž„์ด ๋„ˆ๋ฌด ๊ธธ์–ด์„œ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง
๋งˆํฌ์—…์ด ํ•œ๋ˆˆ์— ๋“ค์–ด์˜ค์ง€ ์•Š๋Š”๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ชจ๋””ํŒŒ์ด์–ด๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผํ•  ๋•Œ,
classList.add("block-name__element-name--modifier")์ฒ˜๋Ÿผ ๊ธธ๊ฒŒ ์ž‘์„ฑํ•ด์•ผํ•˜๋Š” ๊ฑด ๋ถˆํŽธํ•ด๋ณด์ž…๋‹ˆ๋‹ค.
โ€ข ๋”๋ธ”ํด๋ฆญ ์„ ํƒ์ด ๋ถˆํŽธํ•จ
ํ•˜์ดํ”ˆ๊ณผ ์–ธ๋”๋ฐ”๊ฐ€ ํ˜ผ์žฌ๋˜์–ด ์žˆ์–ด, ๋”๋ธ”ํด๋ฆญํ•ด์„œ ํด๋ž˜์Šค๋„ค์ž„์„ ์„ ํƒํ• ๋•Œ ํ•œ ๋ฒˆ์— ์„ ํƒ์ด ์•ˆ ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด์š”.
-๋-
๊ธฐํƒ€์˜๊ฒฌ
โ€ข ์ด๋ ‡๊ฒŒ BEM์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค.
์žฅ์ ๋„ ๋‹จ์ ๋„ ์žˆ์ง€๋งŒ, ์žฅ์ ์ด ๋” ๋งŽ๊ธฐ์— ๋””์ž์ธ~๋งˆํฌ์—…~ํ”„๋ก ํŠธ์—”๋“œ ๊ฐ„์˜ ์˜์‚ฌ์†Œํ†ต์ด ํ™œ๋ฐœํžˆ ํ•˜๊ณ 
๋งˆํฌ์—… ๋‹จ๊ณ„๋ถ€ํ„ฐ ๊ตฌ์กฐ๋ฅผ ํƒ„ํƒ„ํ•˜๊ฒŒ ์งœ์•ผํ•œ๋‹ค๋ฉด BEM์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.
โ€ข ๋‹ค์Œ์—” ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์ž‘์„ฑํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

CSS Convention - BEM

  • 1.
    css naming convention ์ž‘์„ฑ: ๋ฐ•์ค€๊ธฐ
  • 2.
    ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ตฌ์„ฑ์š”์†Œ ๋ฐ ์ฝ”๋“œ ๊ณต์œ ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” CSS๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค. B__E--M
  • 3.
    BEM ๋ฐฉ๋ฒ•๋ก  ๋„์ž…์˜ํ•„์š”์„ฑ CSS์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค. ์š”์†Œ๋“ค์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด id์™€ class๋ฅผ ๋‚จ๋ฐœํ•˜๋‹ค๋ณด๋ฉด ์–ด๋””์— ๋ฌด์—‡์ด ์žˆ์—ˆ๋Š”์ง€ ์•Œ๊ธฐ ๋„ˆ๋ฌด ํž˜๋“ค์–ด์ง„๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๊ณผ์˜ ์ž‘์—… ๊ฒฐ๊ณผ๋ฌผ์„ ํ•ฉ์น˜๋‹ค ๋ณด๋ฉด ์ƒˆ๋กœ ๋งŒ๋“œ๋Š”๊ฒŒ ํ›จ์”ฌ ๋น ๋ฅด๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๋ณด๋ฉด ์–ด๋А๋ง ๊ทธ๋ƒฅ ๋˜๋‹ค๋ฅธ ์“ฐ๋ ˆ๊ธฐ๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ๋Š” ๋‚˜๋ฅผ ๋ฐœ๊ฒฌํ•œ๋‹ค.
  • 4.
    CSS ๋ฐฉ๋ฒ•๋ก ์˜ ์—ญ์‚ฌ OOCSS ๋‹ˆ์ฝœ์„ค๋ฆฌ๋ฒˆ(Nicole Sulivan) ์ œ์ฐฝ โ€ข ๋ ˆ๊ณ ์ฒ˜๋Ÿผ ์ž์œ ๋กœ์šด ์กฐํ•ฉ์ด ๊ฐ€๋Šฅํ•œ ๋ชจ๋“ˆ์˜ ์ง‘ํ•ฉ์„ ๋งŒ๋“ค๊ณ  โ€ข ๊ทธ ๋ชจ๋“ˆ์„ ์กฐํ•ฉํ•ด ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค. โ€ข ๋”ฐ๋ผ์„œ ์‹ ๊ทœ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์—๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ถ”๊ฐ€์ ์ธ CSS๋ฅผ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†๋‹ค. โ€ข ๋ชจ๋“ˆ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋‘๊ฐ€์ง€ ์›์น™(์ŠคํŠธ๋Ÿญ์ณ์™€ ์Šคํ‚จ์„ ๋ถ„๋ฆฌ / ์ปจํ…Œ์ด๋„ˆ์™€ ์ฝ˜ํ…์ธ  ๋ถ„๋ฆฌ)์„ ๋”ฐ๋ฅธ๋‹ค. - Object Oriented CSS(๊ฐ์ฒด ์ง€ํ–ฅ CSS) -
  • 5.
    ABOUT OOCSS ์ŠคํŠธ๋Ÿญ์ณ์™€ ์Šคํ‚จ- With, height, padding, margin ๋“ฑ / color, font, background, box-shadow๋“ฑ ์ปจํ…Œ์ด๋„ˆ์™€ ์ฝ˜ํ…์ธ  ๋ถ„๋ฆฌ โ€“ ๋ชจ๋“ˆ์„ ์˜์—ญ์— ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค ์š”์†Œ ๋ชจ๋“ˆ
  • 6.
    OOCSS ์ •๋ฆฌ ์žฅ์  โ€ข ์žฌ์‚ฌ์šฉ์„ฑ์ด๋†’์Œ: OOCSS๋Š” CSS ์ฝ”๋“œ๋ฅผ ๋ชจ๋“ˆ ๋‹จ์œ„๋กœ ๊ตฌ์„ฑํ•˜๋ฏ€๋กœ, ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์–‘์„ ์ค„์ด๊ณ , ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค. โ€ข ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋†’์Œ: OOCSS๋Š” ์ฝ”๋“œ๋ฅผ ๊ตฌ์กฐํ™”ํ•˜๋ฏ€๋กœ, ์ฝ”๋“œ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋†’์•„์ง„๋‹ค. ์Šคํƒ€์ผ์„ ์ˆ˜์ •ํ•ด๋„ ๋ ˆ์ด์•„์›ƒ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ณ , ๋ ˆ์ด์•„์›ƒ์„ ์ˆ˜์ •ํ•ด๋„ ์Šคํƒ€์ผ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. โ€ข ํ™•์žฅ์„ฑ์ด ๋†’์Œ: OOCSS๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ฑ„์šฉํ•˜๋ฏ€๋กœ, ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, ๊ธฐ์กด ๋ชจ๋“ˆ์„ ์ˆ˜์ •ํ•ด๋„ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ์ด ๋†’์•„์ง„๋‹ค. ๋‹จ์  โ€ข ํ•™์Šต ๋‚œ์ด๋„ ๋†’์Œ / ์ฝ”๋“œ์˜ ์–‘์ด ๋Š˜์–ด๋‚จ / ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง ๊ธฐํƒ€์˜๊ฒฌ โ€ข OOCSS์˜ ์—ญ์‚ฌ๋Š” ๋งค์šฐ ๊ธธ๋ฉฐ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ทœ์น™์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๊ฒƒ๋„ ๋งŽ์ง€ ์•Š๋‹ค. โ€ข ๋‹ค๋ฅธ CSS๋ฐฉ๋ฒ•๋ก ๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌOCSS๋ฅผ ์ฐธ์กฐํ•˜๋ฉด์„œ ๊ฐœ์„ ํ•œ ๊ฒƒ โ€ข ์˜ค๋Š˜๋‚  ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์˜ ๊ฐœ๋ฐœ์—” OOCSS ํ•œ ๊ฐ€์ง€๋งŒ์œผ๋กœ ์‹ค์งˆ์ ์ธ CSS ์„ค๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋‹ค์ง€ ํ˜„์‹ค์ ์ด์ง€ ์•Š๋‹ค.
  • 7.
    CSS ๋ฐฉ๋ฒ•๋ก ์˜ ์—ญ์‚ฌ SMACSS -Scalable and Modular Architecture for CSS(ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“ˆํ™”๋œ ์•„ํ‚คํ…์ณ CSS) - ์กฐ๋‚˜๋‹จ ์Šค๋ˆ…(Jonathan Snook) ์ œ์ฐฝ CSS ์ฝ”๋“œ๋ฅผ ๊ทธ ์—ญํ• ์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜ํ•œ ๊ฒƒ์ด ํŠน์ง• โ€ข Base(๋ฒ ์ด์Šค) โ€ข Layout(๋ ˆ์ด์•„์›ƒ) โ€ข Module(๋ชจ๋“ˆ) โ€ข State(์Šคํ…Œ์ดํŠธ) โ€ข Theme(ํ…Œ๋งˆ)
  • 8.
    ABOUT SMACSS Base(๋ฒ ์ด์Šค) ๊ทœ์น™ โ€ขํ”„๋กœ์ ํŠธ์˜ ํ‘œ์ค€ ์Šคํƒ€์ผ์˜ ์ •์˜ โ€“ ๋ฐ”ํƒ•ํ™”๋ฉด ์ƒ์ƒ๊ณผ ๊ฐ™์€ ํ”„๋กœ์ ํŠธ ์ „๋ฐ˜์— ์ ์šฉ๋˜๋Š” ์Šคํƒ€์ผ๋ง์ž…๋‹ˆ๋‹ค. โ€ข ๋˜ํ•œ ๋ธŒ๋ผ์šฐ์ €๊ฐ„์˜ ์ฐจ์ด๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋ฆฌ์…‹ CSS, ๋…ธ๋ฉ€๋ผ์ด์ฆˆ CSS๋„ SMACSS ๊ธฐ์ค€์—๋Š” ๋ฒ ์ด์Šค ๊ทœ์น™์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • 9.
    โ€ข ์›น์‚ฌ์ดํŠธ์˜ ๋ ˆ์ด์•„์›ƒ์„๊ตฌ์„ฑํ•˜๋Š” ํฐ ๋ชจ๋“ˆ์— ๊ด€ํ•œ ๊ทœ์น™์ด๋ฉฐ, ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ชจ๋“ˆ์€ ํŠน์ • ํŽ˜์ด์ง€์— ํ•œ์ฐจ๋ก€๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋งŽ์œผ๋ฏ€๋กœ ID์…€๋ ‰ํ„ฐ โ€ข ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“ˆ์˜ ๊ฒฝ์šฐ์—” Class ์…€๋ ‰ํ„ฐ๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. โ€ข ๋งŒ์•ฝ ํŠน์ •ํŽ˜์ด์ง€์—์„œ ๋ ˆ์ด์•„์›ƒ์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด SMACSS ์—์„œ๋Š” ์†์ž ์…€๋ ‰๋ฅผ ์ด์šฉํ•ด ๋ ˆ์ด์•„์›ƒ ๋ชจ๋“ˆ ์Šคํƒ€์ผ์„ ๋ฎ์–ด์“ธ ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ABOUT SMACSS Layout(๋ ˆ์ด์•„์›ƒ) ๊ทœ์น™
  • 10.
    โ€ข ๋ชจ๋“ˆ์€ ํƒ€์ดํ‹€,๋ฒ„ํŠผ, ์นด๋“œ, ๋„ค๋น„๊ฒŒ์ด์…˜ ๋“ฑ ์ผ๋ฐ˜์ ์ธ UI์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. โ€ข ๋ชจ๋“  ๋ชจ๋“ˆ์€ ๋ ˆ์ด์•„์›ƒ ๊ทœ์น™์•ˆ์— ๋ฐฐ์น˜๋˜๋Š” ๊ฒƒ์„ ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. โ€ข ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋ ˆ์ด์•„์›ƒ ์•ˆ์— ์‚ฝ์ž…ํ•˜๋”๋ผ๋„ ํ˜•ํƒœ๊ฐ€ ๋ถ€์„œ์ง€๊ฑฐ๋‚˜ ๋‹ฌ๋ผ์ง€์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. โ€ข ๋ชจ๋“ˆ์€ ํŽ˜์ด์ง€ ๋‚ด์—์„œ ๋ฐ˜๋ณต์‚ฌ์šฉ๋˜๋Š” ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•˜๋ฏ€๋กœ ๋ฃจํŠธ ์š”์†Œ์—๋Š” ๋ฐ˜๋“œ์‹œ ํด๋ž˜์Šค ์…€๋ ‰ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.(ID์…€๋ ‰ํ„ฐ X) ABOUT SMACSS Module(๋ชจ๋“ˆ) ๊ทœ์น™
  • 11.
    โ€ข ๊ธฐ์กด ์Šคํƒ€์ผ์„๋ฎ์–ด์“ฐ๊ฑฐ๋‚˜ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. โ€ข ๊ธฐ์กด ์Šคํƒ€์ผ์— ๋ชจ๋‘ ๋ฎ์–ด์จ์„œ ์Šคํ…Œ์ดํŠธ ์Šคํƒ€์ผ์„ ๋ฐ˜์˜ํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ๋Œ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” !important ์‚ฌ์šฉ๋„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. โ€ข ์Šคํ…Œ์ดํŠธ๋Š” ๋ ˆ์ด์•„์›ƒ์ด๋‚˜ ๋ชจ๋“ˆ์— ํ• ๋‹น ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โ€ข ์Šคํ…Œ์ดํŠธ ๊ทœ์น™์— ๋”ฐ๋ฅธ ํด๋ž˜์Šค ์ด๋ฆ„์€ ๋ชจ๋‘ is- ์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์—ฌ ๋‹ค๋ฅธ ๊ทœ์น™๊ณผ ๊ตฌ๋ณ„ํ•˜๋ฉฐ, ์–ด๋–ค ๋ชจ๋“ˆ์— ์ ์šฉํ•˜๋Š”์ง€๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•œ๋‹ค. ABOUT SMACSS State(์Šคํ…Œ์ดํŠธ) ๊ทœ์น™
  • 12.
    โ€ข ์‚ฌ์ดํŠธ ๋‚ด๋ ˆ์ด์•„์›ƒ์ด๋‚˜ ์ƒ‰์ƒ, ํ…์ŠคํŠธ ์ฒ˜๋ฆฌ ๋“ฑ์„ ์ผ์ •ํ•œ ๊ทœ์น™์— ๋”ฐ๋ผ ๋ฎ์–ด์“ฐ๋Š” ๊ฒƒ(๋ ˆ์ด์•„์›ƒ๊ทœ์น™+์Šคํ…Œ์ดํŠธ๊ทœ์น™) โ€ข ๊ธฐ์กด์˜ ๋‹ค์–‘ํ•œ ์Šคํƒ€์ผ๋ง์ด ๋ฎ์–ด์“ฐ๊ธฐ์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค.(๋‹คํฌ๋ชจ๋“œ์ „ํ™˜, ํ…Œ๋งˆ ์ปฌ๋Ÿฌ&์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ ๋“ฑ) โ€ข theme ์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์ผ ๊ฒƒ์„ ๊ถŒ์žฅ ABOUT SMACSS Theme(ํ…Œ๋งˆ) ๊ทœ์น™
  • 13.
    SMACSS ์ •๋ฆฌ ์žฅ์  โ€ข ๊ณตํ†ต๋œ๋ถ€๋ถ„์„ ์ •์˜ํ•ด์„œ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ. โ€ข ๊ตฌ์กฐ์  ์ƒํ™ฉ์— ๊ด€๊ณ„์—†์ด ๋™์ผํ•œ ํด๋ž˜์Šค๋ผ๋ฉด ๋™์ผํ•œ ์Šคํƒ€์ผ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Œ. โ€ข ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์œผ๋กœ ์ฝ”๋“œ ์–‘์ด ์ค„์–ด๋“ฌ. ๋‹จ์  โ€ข ๊ณตํ†ต๋œ ํด๋ž˜์Šค๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ •์ด ๋ฐœ์ƒํ•  ์‹œ ๋ฉ€ํ‹ฐํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ. โ€ข ๋ฉ€ํ‹ฐํด๋ž˜์Šค๊ฐ€ ๋งŽ์•„์ง์— ๋”ฐ๋ผ ์œ ์ง€๋ณด์ˆ˜์— ์–ด๋ ค์›€ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง. ๊ธฐํƒ€์˜๊ฒฌ โ€ข ํ”„๋กœ์ ํŠธ์—์„œ ๊ณ ๋ คํ•ดํ•˜ ํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ CSS ๊ทœ์น™์„ ํฌํ•จ ํ•œ๋‹ค. โ€ข ๊ฐ ๊ทœ์น™์ด ์—„๊ฒฉํ•˜์ง€ ์•Š์•„ ์œ ์—ฐํ•˜๊ฑฐ๋‚˜, ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๊ทœ์น™์ด ๋„ˆ๋ฌด ์œ ์—ฐํ•˜์—ฌ ์‹ค์ œ ์ฝ”๋“œ์˜ ์ง€์นจ์œผ๋กœ ์‚ผ๊ธฐ ์–ด๋ ต๋‹ค. โ€ข ๋ชจ๋“ˆ ๊ทœ์น™์— OOCSS๋ฅผ ์ ์šฉํ•˜๊ฑฐ๋‚˜ BEM์˜ ๊ทœ์น™์„ ์ผ๋ถ€ ์ ์šฉํ•˜๋Š” ๋“ฑ ๋‹ค๋ฅธ ์„ค๊ณ„ ๊ธฐ๋ฒ•๊ณผ ์กฐํ•ฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.
  • 14.
    BEM์ด๋ž€? - Block, Element,Modifier - Yandex็คพ(๋Ÿฌ์‹œ์•„) โ€ข ๋Ÿฌ์‹œ์•„์˜ YANDEX์‚ฌ๊ฐ€ ์ œ์ฐฝํ•œ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์›น ๊ฐœ๋ฐœ ์ ‘๊ทผ๋ฒ• โ€ข UI๋ฅผ ๋…๋ฆฝ๋œ ๋ธ”๋ก์œผ๋กœ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ๋ณต์žกํ•œ ํŽ˜์ด์ง€๋„ ๊ฐ„๋‹จํ•˜๊ณ  ์‹ ์†ํ•˜๊ฒŒ ๊ฐœ๋ฐœ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์  โ€ข ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ๋ชจ๋“ˆ ๊ธฐ๋ฐ˜ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ, ๊ทธ ๋‚ด์šฉ์ด ๋‹ค๋ฅธ ์„ค๊ณ„ ๊ธฐ๋ฒ•์— ๋น„ํ•ด ์—„๊ฒฉํ•˜๊ณ  ๊ฐ•๋ ฅํ•˜์—ฌ ์„ธ๊ณ„์ ์œผ๋กœ ์ด๋ฆ„์ด ์•Œ๋ ค์กŒ์œผ๋ฉฐ ์‹ค์ œ๋กœ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค. BEM https://en.bem.info/ Smashing Magazine https://www.smashingmagazine.com/2012/04/a-new-front-end-methodology-bem/
  • 15.
    โ€ข ๊ฐœ๋ฐœ, ๋””๋ฒ„๊น…,์œ ์ง€๋ณด์ˆ˜๋ฅผ ์œ„ํ•˜์—ฌ CSS ์„ ํƒ์ž์˜ ์ด๋ฆ„์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ด๋ฉฐ, ์†Œ๋ฌธ์ž, ์ˆซ์ž ๋งŒ์„ ์ด์šฉํ•ด์„œ ์ž‘๋ช…ํ•œ๋‹ค. โ€ข ์—ฌ๋Ÿฌ๋‹จ์–ด์˜ ์กฐํ•ฉ์€ ํ•˜์ดํ”ˆ(-)์œผ๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์ž‘๋ช…ํ•œ๋‹ค. โ€ข BEM์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ID๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ, class๋งŒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. โ€ข '์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”๊ฐ€'๊ฐ€ ์•„๋‹ˆ๋ผ '์–ด๋–ค ๋ชฉ์ ์ธ๊ฐ€'์— ๋”ฐ๋ผ ์ด๋ฆ„์„ ์ง“์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋„์šฐ๋Š” P ํƒœ๊ทธ์—๊ฒŒ๋Š” .red๊ฐ€ ์•„๋‹Œ, .error๋ผ๋Š” ์ด๋ฆ„์„ ์ค˜์•ผํ•ฉ๋‹ˆ๋‹ค. BEM ๊ธฐ๋ณธ ๊ตฌ์กฐ ๋ฐ ์ž‘๋ช…๊ทœ์น™ ์ž‘๋ช…๊ทœ์น™ โ€ข BEM์€ Blcok, Element, Modifier๋กœ ๊ตฌ์„ฑ๋œ ๋„ค์ด๋ฐ์„ ํ•˜๋Š” ๊ฒƒ ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์„ ๊ฐ๊ฐ __์™€ --๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ตฌ์กฐ โ€ข ์œ„ ์ฝ”๋“œ์—์„œ header๋Š” Block, naviagtion์€ Element, navi-text๋Š” Modifier๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
  • 16.
    BEM Block โ€ข ์žฌ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์ ์œผ๋กœ ๋…๋ฆฝ์ ์ธ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ(A functionally independent page component that can be reused) โ€ข ๋ธ”๋Ÿญ์€ ๋ธ”๋Ÿญ์„ ๊ฐ์Œ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .header>.logo๋Š” header๋ผ๋Š” ๋ธ”๋Ÿญ ์•ˆ์— logo๋ผ๋Š” ๋ธ”๋Ÿญ์ด ๋“ค์–ด๊ฐ„ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค. ๋ธ”๋ก์ด๋ž€?
  • 17.
    BEM Element โ€ข ๋ธ”๋Ÿญ์„๊ตฌ์„ฑํ•˜๋Š” ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ๋ธ”๋Ÿญ์€ ๋…๋ฆฝ์ ์ธ ํ˜•ํƒœ์ธ ๋ฐ˜๋ฉด, ์—˜๋ฆฌ๋จผํŠธ๋Š” ์˜์กด์ ์ธ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค. ์ž์‹ ์ด ์†ํ•œ ๋ธ”๋Ÿญ ๋‚ด์—์„œ๋งŒ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ธ”๋Ÿญ ์•ˆ์—์„œ ๋–ผ์–ด๋‹ค ๋‹ค๋ฅธ ๋ฐ ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.) โ€ข ์œ„ ์˜ˆ์‹œ์—์„œ .search-form์€ ๋ธ”๋Ÿญ์ด๊ณ , .search-form__input๊ณผ .search-form__button์€ ์—˜๋ฆฌ๋จผํŠธ์ž…๋‹ˆ๋‹ค. ์ € search-form์ด๋ž€ ๋ธ”๋Ÿญ์€ ๋–ผ์–ด๋‚ด์„œ ์š”๊ธฐ์กฐ๊ธฐ ๋งˆ์Œ๊ป ๋ถ™์—ฌ๋„ ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚ด๋ถ€์˜ input๊ณผ button์€ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ ์ธํ’‹์ฐฝ์ด์ž ๋ฒ„ํŠผ์ด๊ธฐ ๋•Œ๋ฌธ์—, search-form ์•ˆ์—์„œ๋งŒ ์กด์žฌ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ์—˜๋ฆฌ๋จผํŠธ์ž…๋‹ˆ ์—˜๋ฆฌ๋จผํŠธ๋ž€?
  • 18.
    BEM Element โ€ข ์—˜๋ฆฌ๋จผํŠธ๋Š”.block > .block__element1 > .block__element2์™€ ๊ฐ™์ด ์ค‘์ฒฉ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. โ€ข .block_element2๋ฅผ .block_element1์˜ ํ•˜์œ„ ์—˜๋ฆฌ๋จผํŠธ๋กœ ๋ณด์ง€ ์•Š๊ณ  ๋‘˜ ๋‹ค ๋˜‘๊ฐ™์ด .block์˜ ์—˜๋ฆฌ๋จผํŠธ๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํด๋ž˜์Šค๋„ค์ž„์— ์บ์Šค์ผ€์ด๋”ฉ์„ ์—ฌ๋Ÿฌ๋ฒˆ ํ‘œ์‹œํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ค‘์ฒฉ์‚ฌ์šฉ โ€ข ์œ„ ํ˜•ํƒœ๋Š” block-name__element-name์ด๋ž€ ํ˜•์‹์„ ๋”ฐ๋ฅด๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.๋Œ€์‹ ์— ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • 19.
    BEM Modifier โ€ข ๋ชจ๋””ํŒŒ์ด์–ด๋Š”๋ธ”๋Ÿญ์ด๋‚˜ ์—˜๋ฆฌ๋จผํŠธ์˜ ์†์„ฑ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. โ€ข ์ƒ๊ธด ๊ฒŒ ์กฐ๊ธˆ ๋‹ค๋ฅด๊ฑฐ๋‚˜, ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š” ๋ธ”๋Ÿญ์ด๋‚˜ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋””ํŒŒ์ด์–ด๋ž€?
  • 20.
    BEM Modifier โ€ข ์œ„์ฝ”๋“œ์—์„œ --focused๊ฐ€ ์ˆ˜์‹์–ด์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ €๋ ‡๊ฒŒ ์ž‘์„ฑ๋œ ๊ฑธ ๋ถˆ๋ฆฌ์–ธ(boolean) ํƒ€์ž…์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ๊ทธ ๊ฐ’์ด true๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ฉฐ โ€œโ€”โ€๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ถˆ๋ฆฌ์–ธ(boolean) ํƒ€์ž…๊ณผ ํ‚ค-๋ฐธ๋ฅ˜(key-value) โ€ข ์œ„ ์˜ˆ์‹œ์—์„œ color-gray๊ณผ theme-normal๊ฐ€ key-value ํƒ€์ž…์— ํ•ด๋‹นํ•˜๋ฉฐ, ํ•˜์ดํ”ˆ์œผ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • 21.
    BEM ์ •๋ฆฌ ์žฅ์  โ€ข ํด๋ž˜์Šค๋„ค์ž„๋งŒ์œผ๋กœ๋งˆํฌ์—… ๊ตฌ์กฐ๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ธ”๋Ÿญ๊ณผ ์—˜๋ฆฌ๋จผํŠธ๋กœ ๊ตฌ๋ถ„๋˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋””์„œ๋ถ€ํ„ฐ ๋–ผ์–ด๋‹ค ์“ธ ์ˆ˜ ์žˆ๋Š”์ง€, ์–ด๋””๋ถ€ํ„ฐ ์ข…์†๋˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โ€ข SASS์˜ ๋ถ€๋ชจ์ฐธ์กฐ์ž(&)์™€ ์ฐฐ๋–ก๊ถํ•ฉ! ์“ฐ๊ธฐ๊ฐ€ ๋ฌด์ฒ™ ํŽธํ•ฉ๋‹ˆ๋‹ค. โ€ข ์ž‘์„ฑ๋œ SASS์—์„œ ์š”์†Œ๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, .header ์•„๋ž˜์— &__logo, &__search๋กœ ์ž‘์„ฑํ•˜๋ฉด "ํ—ค๋” ์•„๋ž˜ ๋กœ๊ณ ๊ณ  ์ €๊ฑด ํ—ค๋” ์•„๋ž˜ ๊ฒ€์ƒ‰์ด๊ตฌ๋‚˜"๋ž€ ๊ฑธ ๋ฐ”๋กœ ์•Œ ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. โ€ข SASS ์ž‘์„ฑ ์‹œ, ๋Š˜์–ด์ง€๋Š” ์…€๋ ‰ํŒ…์„ ๋ง‰์•„์ค๋‹ˆ๋‹ค. ๊ธฐ์กด์— nested ๋ฐฉ์‹์œผ๋กœ SASS๋ฅผ ์ž‘์„ฑํ•˜๋ฉด, ์ปดํŒŒ์ผ ์‹œ ์…€๋ ‰ํŒ…์ด ๋๋„ ์—†์ด ๊ธธ์–ด์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์ง€๋งŒ ex(.header .nav .list .item .link ) ๊ทธ๋Ÿฐ๋ฐ BEM ๋ฐฉ์‹์„ ์“ฐ๋ฉด, ๋„ˆ๋„๋‚˜๋„ ์—˜๋ฆฌ๋จผํŠธ๋ผ์„œ ๊ตณ์ด ๊นŠ๊ฒŒ nestedํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ง‘๋‹ˆ๋‹ค. ๋‹จ์  โ€ข ํด๋ž˜์Šค๋„ค์ž„์ด ๋„ˆ๋ฌด ๊ธธ์–ด์„œ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง ๋งˆํฌ์—…์ด ํ•œ๋ˆˆ์— ๋“ค์–ด์˜ค์ง€ ์•Š๋Š”๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ชจ๋””ํŒŒ์ด์–ด๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผํ•  ๋•Œ, classList.add("block-name__element-name--modifier")์ฒ˜๋Ÿผ ๊ธธ๊ฒŒ ์ž‘์„ฑํ•ด์•ผํ•˜๋Š” ๊ฑด ๋ถˆํŽธํ•ด๋ณด์ž…๋‹ˆ๋‹ค. โ€ข ๋”๋ธ”ํด๋ฆญ ์„ ํƒ์ด ๋ถˆํŽธํ•จ ํ•˜์ดํ”ˆ๊ณผ ์–ธ๋”๋ฐ”๊ฐ€ ํ˜ผ์žฌ๋˜์–ด ์žˆ์–ด, ๋”๋ธ”ํด๋ฆญํ•ด์„œ ํด๋ž˜์Šค๋„ค์ž„์„ ์„ ํƒํ• ๋•Œ ํ•œ ๋ฒˆ์— ์„ ํƒ์ด ์•ˆ ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด์š”.
  • 22.
    -๋- ๊ธฐํƒ€์˜๊ฒฌ โ€ข ์ด๋ ‡๊ฒŒ BEM์—๋Œ€ํ•ด ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์žฅ์ ๋„ ๋‹จ์ ๋„ ์žˆ์ง€๋งŒ, ์žฅ์ ์ด ๋” ๋งŽ๊ธฐ์— ๋””์ž์ธ~๋งˆํฌ์—…~ํ”„๋ก ํŠธ์—”๋“œ ๊ฐ„์˜ ์˜์‚ฌ์†Œํ†ต์ด ํ™œ๋ฐœํžˆ ํ•˜๊ณ  ๋งˆํฌ์—… ๋‹จ๊ณ„๋ถ€ํ„ฐ ๊ตฌ์กฐ๋ฅผ ํƒ„ํƒ„ํ•˜๊ฒŒ ์งœ์•ผํ•œ๋‹ค๋ฉด BEM์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. โ€ข ๋‹ค์Œ์—” ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์ž‘์„ฑํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.