๐ BEM
- 'Block,Element,Modifier'์ ์ค์๋ง
- Yandex์ฌ(๋ฌ์์)๊ฐ ์ ์ฐฝํ component๊ธฐ๋ฐ ์น ๊ฐ๋ฐ ์ ๊ทผ๋ฒ์ด๋ค.
- UI๋ฅผ ๋ ๋ฆฝ๋ block์ผ๋ก ๋ถ๋ฆฌํ์ฌ ๋ณต์กํ ํ์ด์ง์์๋ ๊ฐ๋จํ๊ณ ์ ์ํ๊ฒ ๊ฐ๋ฐ์ ์ํํ๋ ๊ฒ์ด ๋ชฉ์ ์.
- ๊ธฐ๋ณธ์ ์ผ๋ก๋ Module๊ธฐ๋ฐ์ ๋ฐฉ๋ฒ์ด๋, ๋ค๋ฅธ ์ค๊ณ๊ธฐ๋ฒ์ ๋นํด ์๊ฒฉํ๊ณ ๊ฐ๋ ฅํ ๊ท์น์ ๊ฐ์ง๊ณ ์์ด ์ธ๊ณ์ ์ผ๋ก ์ ๋ช ํด์ก์ผ๋ฉฐ, ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ค์.
1. Block
- ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ธฐ๋ฅ์ ์ผ๋ก ๋ ๋ฆฝ๋ ํ์ด์ง ๊ตฌ์ฑ์์.
- BEM์ ์ฌ์ฉํ ๋๋ id selector๋ฅผ ์ฌ์ฉํ ์ ์์.(=class selector๋ง ์ฌ์ฉํ๋ค๊ณ ์๊ฐ ๊ฐ๋ฅ)
- Block์ ์ด๋ฆ์ state(์ํ)๊ฐ ์๋ ํด๋น block์ purpose(์ฉ๋)๋ฅผ ์๋ฏธ.
- ๊ฐ ๋ธ๋ญ์ ํ๊ฒฝ์ ์ํฅ์ ๋ฏธ์น์ง ์์์ผํจ.(block์์ฒด์ ๋ํ ์ธ๋ถ margin๋๋ position์ ์ค์ ํ์ง ์์.)
- ๊ฐ Block๋ค์ ์๋ก ์ค์ฒฉ์ฌ์ฉ์ด ๊ฐ๋ฅ.
2. Element
- Block์ ๋ณตํฉ์ ์ธ ๋ถํ์ผ๋ก block๊ณผ ๋ณ๋๋ก ์ฌ์ฉํ ์ ์์.
- Element์ ์ด๋ฆ ๋ํ state(์ํ)๊ฐ ์๋ ํด๋น block์ purpose(์ฉ๋)๋ฅผ ์๋ฏธ.
- ๋ช
๋ช
๋ฒ :
block-name_element-nameโ Block์ด๋ฆ + Element์ด๋ฆ์ ๊ฒฐํฉํ์ฌ ๋ช ๋ช ํ๋ค. - Element๋ ํญ์ Block์ ํฌํจ๋์ด์ผ ํ๋ฉฐ, ๋ถ๋ฆฌํด์ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค.
- ๋ชจ๋ Block์ด Element๋ฅผ ๊ฐ์ง๋ ๊ฒ์ ์๋.
- ๊ฐ Element ๋ํ ์ค์ฒฉ์ฌ์ฉ์ด ๊ฐ๋ฅ.
3. Modifier
- Block ๋๋ Element์ ๋ชจ์, ์ํ ๋๋ ๋์์ ์ ์ํจ.
- Modifier ์ด๋ฆ์ Appearance(๋ชจ์), State(์ํ), Behavior(๋์)๋ฅผ ๋ํ๋.
- Modifier๋ ๋จ๋ ์ผ๋ก ์ฌ์ฉ๋์ง ์๋๋ค.
๐ Modifier์ 2๊ฐ์ง ์ ํ
โฃ Boolean
- Modifier์ ์ ๋ฌด๋ง ์ค์ํ๊ณ ๊ทธ ๊ฐ์ ๋ฌด๊ดํ ๋ ์ฌ์ฉ โ disabled, focused
- Boolean Modifier๊ฐ ์์ผ๋ฉด ํด๋น ๊ฐ์ด '์ฐธ'์ผ๋ก ๊ฐ์ฃผ๋จ.
- ๋ช
๋ช
๋ฒ :
block-name_modifier-name,block-name_element-name_modifier-name
โฃ Key-Value
- Modifier์ ๊ฐ์ด ์ค์ํ ๊ฒฝ์ฐ์ ์ฌ์ฉ โ size_s , theme_islands
- ๋ช
๋ช
๋ฒ :
block-name_modifier-name_modifier-value,block-name_element-name_modifier-name_modifier-value - MindBEMding : Modifier์ ์ ํ ๊ตฌ๋ถ๋ฌธ์๋ฅผ _(์ธ๋๋ฐ 1๊ฐ)์์ --(ํ์ดํ 2๊ฐ)๋ก ๋ณ๊ฒฝํ ์คํ์ผ.
'block-name--modifier-name'
'block-name__element-name--modifier-name'
'block-name--modifier-name--modifier-value'
'block-name__element-name--modifier-name--modifier-value'4. Mix
- Block๊ณผ Element๊ฐ ํ๋์ HTML์์ ์์ ์กด์ฌํ๋ ๊ฒ์ ์๋ฏธํจ.
- ์ฝ๋ ์ค๋ณต์ ํผํ๋ฉด์ ์ฌ๋ฌ BEM์ Entity(๊ฐ์ฒด)์ ๋์๊ณผ ์คํ์ผ์ ๊ฒฐํฉ.
- ๊ธฐ์กด BEM Entity๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ฏธ์ ์๋ก์ด ์ธํฐํ์ด์ค ์ปดํฌ๋ํธ๋ฅผ ์์ฑ.
- ๊ฐ๊ธ์ ์์ธ๋๋ฅผ ๋์ด์ง ์๊ณ Block์ ๋ ๋ฆฝ์ฑ ์ ์ง ๊ฐ๋ฅ.
๐ธ Block vs Element ์ด๋ค ๊ฑธ ๋ง๋ค์ด์ผํ ๊น? ๐ธ
- ๊ตฌํ๋ ๋ค๋ฅธ ํ์ด์ง component์ ์์กดํ์ง ์๊ณ ์ฝ๋๊ฐ ์ฌ์ฌ์ฉ๋๋ค. โ Block
- ๋ถ๋ชจ Block์์ด ๊ตฌ๋ถํด์ ์ฌ์ฉํ ์ ์๋ค. โ Element
- ๋ ์์ ๋ถ๋ถ์ผ๋ก ๋๋์ด์ ธ์ผํ๋ Elements โ Block ๋๋ Mix (BEM์์ Elements์ Elements๋ ๋ง๋ค ์ ์์)
๐ก ๊ธฐ์กด CSS๋ฐฉ๋ฒ๋ก ์ ๋ฌธ์ ์
โ CSS๊ฐ HTML์ ๊ตฌ์กฐ์ ๊ฐํ๊ฒ ๊ฒฐํฉ๋์ด ์์
1. HTML์ CSS๊ฐ ์์กด
- Html์์ ์คํ์ผ์ด ํ์ํ ์์์ class๋ช ์ ๋ถ์ฌ.
- ํด๋์ค๋ช ์ด ๋ถ์ฌ๋ ์์์ ๋ํ์ฌ CSS์์ ์คํ์ผ๋ง ์งํ.
2. CSS์ HTML์ด ์์กด
- CSS์์ Html๊ณผ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ์ผ์ ์ ์ธ.
- Html์์๋ ์ ์ธ๋์ด ์๋ style์ ํํ์ฌ ๋งํฌ์ ์์ฑ
๐ก ์๋ก์ด CSS๋ฐฉ๋ฒ๋ก (Utility-First CSS / Functional CSS)
- ๋๋ฆฌ ์๋ ค์ง Utility-First CSS : Tailwind CSS / Tachyons / Atomic CSS
- ์๋ฉํฑํ๊ณ ์ฝํ ์ธ ์ ์์กดํ์ง ์๋ CSS๋ฅผ ์์ฑ โ
- class๋ช ๋ง ๋ณด์๋ CSS์ ์์ฑ๊ณผ ๊ฐ์ ๋ฐ๋ก ์ ์ถํ ์ ์๋๋ก ๋จ ํ๋์ ์์ฑ๊ณผ ๊ฐ์ ๋ํ๋ด๋ CSS๋ฅผ ์ฌ์ ์ ๋ฏธ๋ฆฌ ์ ์
- ๋ฏธ๋ฆฌ ์ ์๋ ํด๋์ค๋ฅผ ๋ง์น HTML ์์์ ์ ๊ณตํ๋ API๋ก ์๊ฐํ์ฌ API(ํด๋์ค๋ช )์ html์์ ์กฐํฉํด์ ์ฌ์ฉ.
<!-- index.html -->
<button class="w-1/2 rounded-md border border-gray-300">๋ฒํผ</button>/* index.css */
.w-1/2 {
width: 50%;
}
.rounded-md {
border-radius: 0.375rem;
}
.border {
border-width: 1px;
}
.border-gray-300 {
border-color: rgb(209, 213, 219);
}๐ ๊ธฐ์กด inline style๊ณผ ๋ค๋ฅธ ์
- ์๋ฌด ๊ฐ์ด๋ ์ง์ ํ ์ ์๋ ๊ฒ์ด ์๋. ์ฌ์ ์ ์ ํด์ง ๋ฆฌ์คํธ์์ ๊ณจ๋ผ์ผํ๋ฏ๋ก ์ ์ฒด์ ใ
๋ ์ผ๊ด์ฑ์ ๋์ผ ์ ์์.
โ :font-size : 14px,font:size: 13px,font-size:.9rem,font-size:.85rem
โ :text-sm๋๋text-xs,py-3๋๋py-4,text-dark๋๋text-light - hover, focus๋ฑ์ ์์ฌ class selector๋ ์ฌ์ฉํ ์ ์์.
- media query๋ฅผ ์ฌ์ฉํ ์ ์์ด ๋ฐ์ํ ๋์์ธ์ ๋์์ด ์์ํ๋ค.
์ถ์ฒ : ์ฐ์ํํ ํฌ - ๐๐ป ๋๋์ CSS๋ฐฉ๋ฒ๋ก (์์)
