-
[๋ฉด์ ์ง๋ฌธ ์ ๋ฆฌ] - CSS, ํ๋ ์์ํฌCS 2023. 3. 3. 20:00
๐ก box model์ ์ ์ฒด ํฌ๊ธฐ
: ์ฝํ ์ธ ํฌ๊ธฐ + padding ๊ฐ + border ๊ฐ + margin ๊ฐ
React, Vue, Angular์ ์ฐจ์ด๋ ๋ฌด์์ธ๊ฐ์?
- ์ผ๋จ 3๊ฐ์ ๊ณตํต์ ์ SPA๊ธฐ๋ฐ ํ๋ก ํธ์๋ ํ๋ ์์ํฌ/๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ๊ฒ์ด๋ค. ๋ฆฌ์กํธ๋ ๋จ๋ฐฉํฅ ๋ฐ์ธ๋ฉ์ผ๋ก ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ props๊ฐ ์์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌ๋๊ณ , vue๋ angular๋ ์๋ฐฉํฅ ๋ฐ์ธ๋ฉ์ด ๊ตฌํ ๊ฐ๋ฅํ๋ค๋ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ๋ฌ๋์ปค๋ธ๋ ๋ทฐ๊ฐ ๊ฐ์ฅ ๋ฎ๊ณ , ๋ฆฌ์กํธ๋ jsx ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉฐ, ๊ฐ๋ฐ ์ํ๊ณ๊ฐ ๊ฐ์ฅ ์ ํ์ฑํ ๋์ด์๋ค. ํฐ ๊ท๋ชจ์ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ ๋ฆฌํ๋ค. ๋ทฐ์ ์ต๊ทค๋ฌ๋ ํ๋ ์์ํฌ์ด๋ค. ์ต๊ทค๋ฌ๋ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์์ ์ฑ์ด ์ข์ง๋ง ๋ฌ๋์ปค๋ธ๊ฐ ํฌ๋ค.
๋ฆฌ์กํธ์ ๋ทฐ์ ์ฐจ์ด 1
react๋ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ฉฐ Vue๋ ํ๋ ์์ํฌ์ด๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฐธ๊ณ ๊ฐ ์ฉ์ดํ๊ณ , ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ผ๋ถ๋ถ๋ง ๊ฐ์ ธ์์ ์ฌ์ฉํ๋ ๊ฒ ํธ๋ฆฌํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฆฌ์กํธ๋ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ ๋ฆฌ์กํธ ์์ฒด๋ง์ผ๋ก๋ ์ ์ญ ์ํ ๊ด๋ฆฌ, ๋ผ์ฐํ , ๋น๋ ์์คํ ๋ฑ์ ์ง์ํ์ง ์๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ฆฌ์กํธ๋ ๋ณ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด Redux, Recoil, React-router-dom ๋ฑ์ ์ฌ์ฉํด์ผ ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ ํ์ํ ๋์ ํ์ํ ๋ ๊ฐ์ ธ๋ค ์ฐ๊ณ , ๋นผ๋ฉฐ ๋ถ๋ถ์ ์ผ๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
๋ฐ๋ฉด ๋ทฐ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ์ด๋ค. ๋ถ๋ถ์ ์ธ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๊ณ ํ๋ ์์ํฌ ์์ผ๋ก ๋ค์ด๊ฐ์ ํ๋ ์ ์ํฌ๊ฐ ์ง์ํด์ฃผ๋ ๋ฌธ๋ฒ์ ๋ฐ๋ผ ์์ฑํด์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฌ๋ฆฌ ๋ ๋ง์ ๊ธฐ๋ฅ์ ๋ํดํธ๋ก ์ ๊ณตํด์ค๋ค. ์ด๋ฌํ ์ฑ๊ฒฉ์ผ๋ก ์ธํด ๋ฆฌ์กํธ๋ ๋ฆฌ์กํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ ์์ฉํ์ฌ ๊ฐ๋ฐ์์ ๋ฐ๋ผ ์์ ๋กญ๊ฒ ๊ฐ๋ฐ์ ํ ์ ์๊ณ , ๋ทฐ๋ ํ๋ ์์ํฌ ์ฌ์ฉ์ ์ง์ ๋ ๋ฌธ๋ฒ ๋ฐฉ์์ผ๋ก๋ง ๊ฐ๋ฐํ ์ ์๋ค. ํจํด์ ์ฐจ์ด๋ก ์ธํด ํธ๋ถํธ๊ฐ ๋๋์ง๋ง, vue์์ ์์ฑ๋๋ ์ฝ๋๊ฐ ๊ฐ์์ฑ ๋ฐ ์์ฐ์ฑ์ด ์ข๋ค๋ ํ์ด ๋ง๋ค.
V-model
์ปดํฌ๋ํธ์์ ์ฌ์ฉํ์ฌ ์๋ฐฉํฅ ๋ฐ์ธ๋ฉ์ ๊ตฌํํ ์ ์์ต๋๋ค. v-model ์์ฑ์ v-bind์ v-on์ ๊ธฐ๋ฅ์ ์กฐํฉ์ผ๋ก ๋์ํฉ๋๋ค. ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ๋ UI ์์๋ค์ v-model์ด๋ผ๋ ์์ฑ์ ์ฌ์ฉํ๋ฉด ์ ๋ ฅ ๊ฐ์ด ์๋์ผ๋ก ๋ทฐ ๋ฐ์ดํฐ ์์ฑ์ ์ฐ๊ฒฐ๋ฉ๋๋ค.
V-model
V ๋ชจ๋ธ(V-model)์ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ก ํญํฌ์ ๋ชจ๋ธ์ ํ์ฅ๋ ํํ ์ค ํ๋๋ก ๋ณผ ์ ์๋ค. V ๋ชจ๋ธ์ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๊ฐ ๋จ๊ณ๋ง๋ค ์์ธํ ๋ฌธ์ํ๋ฅผ ํตํด ์์ ์ ์งํํ๋ ์ ์ง์ธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค. ๋ํ ํ ์คํธ ์ค๊ณ์ ๊ฐ์ ํ ์คํธ ํ๋์ ์ฝ๋ฉ ์ดํ๊ฐ ์๋ ํ๋ก์ ํธ ์์ ์์ ํจ๊ป ์์ํ์ฌ, ์ ์ฒด์ ์ผ๋ก ๋ง์ ์์ ํ๋ก์ ํธ ๋น์ฉ๊ณผ ์๊ฐ์ ๊ฐ์์ํจ๋ค.
"attribute"์ "property"์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?
- Attributes๋ HTML ์์์ ์ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ์ ๋ฌํ๊ณ ์ด๋ฆ="๊ฐ" ์ด๋ ๊ฒ ์์ผ๋ก ์จ๋ค. ์๋ฅผ๋ค์ด <div class="my class"></div> ๋ฅผ ๋ณด๋ฉด div ํ๊ทธ๊ฐ class๋ผ๋ ๊ฐ์ด "my class"์ธ attribute๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
Property๋ attribute์ ๋ํ HTML DOMํธ๋ฆฌ ์์์์ ํํ์ด๋ค. ๊ฐ์ ์์์์ attribute๋ ๊ฐ์ด "myclass"์ด๊ณ ์ด๋ฆ์ด className์ธ property๋ฅผ ๊ฐ์ง๋ค.
๋์ ์ฐจ์ด๋ Attribute๋ HTML ํ ์คํธ ๋ฌธ์์ ์๋ ๊ฒ์ด๊ณ , property๋ HTML DOM ํธ๋ฆฌ์ ์๋ ๊ฒ์ด๋ค. attribute๋ ๋ณํ์ง ์๊ณ , property๋ ๋ณํ ์ ์๋ค. ๊ฐ๋ น ์ฌ์ฉ์๊ฐ ์ฒดํฌ๋ฐ์ค๋ฅผ ์ฒดํฌํ๋ฉด property์ ๊ฐ์ ๋ณํ๋ ๊ฒ์ด๋ค.(DOM์์ ์กด์ฌํ๊ณ ๋์ ์ด๊ธฐ ๋๋ฌธ์)CSS์์ margin๊ณผ padding์ด๋?
- margin: ๋ฐ๊นฅ์ชฝ ์ฌ๋ฐฑ์ ์๋ฏธ
- padding: ์์ชฝ ์ฌ๋ฐฑ์ ์๋ฏธ
CSS์์ position์ด๋?
position ์์ฑ์ ๋ฌธ์ ์์ ์์๋ฅผ ๋ฐฐ์นํ๋ ๋ฐฉ๋ฒ์ ์ง์ ํ๋ค.
- static: ์์๋ฅผ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ํ๋ฆ์ ๋ฐ๋ผ ๋ฐฐ์น
- relative: static + ์์ ์ ๊ธฐ์ค์ผ๋ก top, rigth, bottom, left์ ๊ฐ์ ๋ฐ๋ผ ์คํ์ ์ ์ ์ฉ
- absolute: ์์๋ฅผ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ํ๋ฆ์์ ์ ๊ฑฐํ๊ณ , ๊ฐ์ฅ ๊ฐ๊น์ด ์์น ์ง์ ์กฐ์ ์์์ ๋ํด ์๋์ ์ผ๋ก ๋ฐฐ์น
- fixed: ์์๋ฅผ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ํ๋ฆ์์ ์ ๊ฑฐํ๊ณ , ๋ทฐํฌํธ์ ์ด๊ธฐ ์ปจํ ์ด๋ ๋ธ๋ก์ ๊ธฐ์ค์ผ๋ก ์ผ์ ๋ฐฐ์นํ๋ค. => ๋ฐ๊พธ์ง ์๋ ์์น์ ์ง์
- sticky: static + fixed ํน์ง์ ๋์์ ๊ฐ์ง.
CSS ๋ฐ์ค ๋ชจ๋ธ
CSS์์ "๋ฐ์ค ๋ชจ๋ธ"์ด๋ผ๋ ์ฉ์ด๋ ๋์์ธ๊ณผ ๋ ์ด์์์ ๋งํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
CSS ์์ ๋ชจ๋ธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ HTML ์์๋ฅผ ๊ฐ์ธ๋ ์์์ ๋๋ค. ์ฌ๋ฐฑ, ํ ๋๋ฆฌ, ํจ๋ฉ ๋ฐ ์ค์ ์ฝํ ์ธ ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์๋ ์ด๋ฏธ์ง๋ ์์ ๋ชจ๋ธ์ ๋ณด์ฌ์ค๋๋ค.
๋ค๋ฅธ ๋ถ๋ถ์ ๋ํ ์ค๋ช :
- ์ฝํ ์ธ - ํ ์คํธ์ ์ด๋ฏธ์ง๊ฐ ํ์๋๋ ์์์ ์ฝํ ์ธ
- ํจ๋ฉ - ์ฝํ ์ธ ์ฃผ๋ณ ์์ญ์ ์ง์๋๋ค. ํจ๋ฉ์ ํฌ๋ช ํฉ๋๋ค
- ํ ๋๋ฆฌ - ํจ๋ฉ๊ณผ ์ฝํ ์ธ ๋ฅผ ๋๋ฌ์ธ๋ ํ ๋๋ฆฌ
- ์ฌ๋ฐฑ - ํ ๋๋ฆฌ ๋ฐ์ ์์ญ์ ์ง์๋๋ค. ์ฌ๋ฐฑ์ด ํฌ๋ช ํ๋ค
์์ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ฉด ์์ ์ฃผ์์ ํ ๋๋ฆฌ๋ฅผ ์ถ๊ฐํ๊ณ ์์ ์ฌ์ด์ ๊ณต๊ฐ์ ์ ์ํ ์ ์์ต๋๋ค.
Flex ์์ฑ์ ์ค๋ช ํด์ฃผ์ธ์.
- Flexbox๋ ๊ธฐ์กด ์ปจํ ์ธ ๋ฅผ ์ํ์ผ๋ก ๋ฐฐ์นํ ๋, float๋ inline-block์ผ๋ก ๋งํฌ์ ํ ๋์ ๋ถํธํจ์ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋๋ก ์ถ๊ฐ๋ ๊ธฐ๋ฅ์ด๋ค. ๋ค์ํ ๋๋ฐ์ด์ค ํ๊ฒฝ์์ ์ธ์ ๋ ๋๊ฐ์ ๋ ์ด์์์ ์ ์ง์์ผ์ค์ผ๋ก์จ ๋ฐ์ํ ์น ์ฌ์ดํธ์ ์ ์ฉํ๊ฒ ์ฐ์ธ๋ค. Flex๋ ์ปจํ ์ธ ๋ฅผ ๊ฐ์ธ๋ ์์ ๋ถ๋ชจ์์์ธ Flex Container์ ๊ฐ ์ปจํ ์ธ ๋ค์ธ ์์์์ Flex Item์ผ๋ก ๊ตฌ์ฑ๋์ด์๋ค. Flexbox css ์ ์ฉ๋ฐฉ๋ฒ์ ๋ถ๋ชจ์์์ธ container์ display:flex๋ฅผ ์ ์ธํ๋ฉด ๋๋ค. Flex Container์๋ ์ ์ฒด์ ์ธ ์ ๋ ฌ๊ณผ ๊ด๋ จ๋ ์์ฑ์ธ display, flex-direction, align-items, flex-wrap ๊ฐ์ ์์ฑ์ ์ ์ํ๊ณ , ์์์์์ธ flex item์๋ flex-grow, flex-shrink ๊ฐ์ ํฌ๊ธฐ๋ ์์ ๊ฐ์ ์์ฑ์ ์ ์ํ๋ค.
TDD๋?
- ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ์ด๋ผ๋ ๋ป์ผ๋ก, ๋จผ์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑ ํ ํ์ ๊ตฌํ์ ํ๋ ๋ฐฉ์์ด๋ค. ์ด 3๊ฐ์ง์ ์ ์ฐจ๊ฐ ์๋๋ฐ ์คํจ→ ์ฑ๊ณต → ๋ฆฌํฉํ ๋ง์ด ์๋ก ๊ผฌ๋ฆฌ๋ฅผ ๋ฌผ๊ณ ์ด๋ค์ง๋ค. TDD๋ฅผ ์งํํ๋ฉด ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ ๋ ์ฃผ๋ก ์์ ๋จ์๋ก ๋ง๋ค๊ธฐ ๋๋ฌธ์ ์ฝ๋๊ฐ ๋ฐฉ๋ํด์ง์ง ์๊ณ , ์ฝ๋์ ๋ชจ๋ํ๊ฐ ์์ฐ์ค๋ฝ๊ฒ ์ ์ด๋ฃจ์ด์ง๋ค. React์์ ํ ์คํธ๋ฅผ ์ํด jest(ํ๋ ์ ์ํฌ)์ enzyme(๋ผ์ด๋ธ๋ฌ๋ฆฌ)๋ฑ์ด ์๋ค. ์ค์ ํ๋ก์ ํธ์์ ์ฌ์ฉํด๋ณธ ์ ์ ์์ผ๋ ์ธ์ ๊ฐ๋ ๊ผญ ํด๋ณด๊ณ ์ถ๋ค.
์๋ฉํฑ ๋งํฌ์ ์ด๋?
์น ์ ๊ทผ์ฑ์ ๋์ด๊ธฐ ์ํด ์๋ฏธ๋ฅผ ์ ์ ๋ฌ ํ ์ ์๋๋ก HTML ํ๊ทธ ๋ฌธ์๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
์๋ฅผ ๋ค์ด, header,footer,nav,main ๋ฑ์ด ์์ต๋๋ค.
display ์์ฑ
display ์์ฑ์ ์น ํ์ด์ง์ ๋ ์ด์์(layout)์ ๊ฒฐ์ ํ๋ CSS์ ์ค์ํ ์์ฑ ์ค ํ๋์ ๋๋ค.
์ด ์์ฑ์ ํด๋น HTML ์์๊ฐ ์น ๋ธ๋ผ์ฐ์ ์ ์ธ์ ์ด๋ป๊ฒ ๋ณด์ด๋๊ฐ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
๋๋ถ๋ถ์ HTML ์์๋ display ์์ฑ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋ค์ ๋ ๊ฐ์ง ๊ฐ ์ค ํ๋์ ๊ฐ์ ๊ฐ์ง๋๋ค.
1. ๋ธ๋ก(block)
2. ์ธ๋ผ์ธ(inline)
๋ธ๋ก(block)
display ์์ฑ๊ฐ์ด ๋ธ๋ก(block)์ธ ์์๋ ์ธ์ ๋ ์๋ก์ด ๋ผ์ธ(line)์์ ์์ํ๋ฉฐ, ํด๋น ๋ผ์ธ์ ๋ชจ๋ ๋๋น๋ฅผ ์ฐจ์งํฉ๋๋ค.
<div>, <h1>, <p>, <ul>, <ol>, <form>์์๋ ๋ํ์ ์ธ ๋ธ๋ก(block) ์์์ ๋๋ค.
์ธ๋ผ์ธ(inline)
display ์์ฑ๊ฐ์ด ์ธ๋ผ์ธ(inline)์ธ ์์๋ ์๋ก์ด ๋ผ์ธ(line)์์ ์์ํ์ง ์์ต๋๋ค.
๋ํ, ์์์ ๋๋น๋ ํด๋น ๋ผ์ธ ์ ์ฒด๊ฐ ์๋ ํด๋น HTML ์์์ ๋ด์ฉ(content)๋งํผ๋ง ์ฐจ์งํฉ๋๋ค.
Sass(SCSS)์ ๋ฑ์ฅ
๋ฐ๋ฉด Sass(SCSS)๋ Syntactically Awesome StyleSheet์ ์ฝ์ด์ด๋ฉฐ ์ฝ๋์ ์ฌํ์ฉ์ฑ์ ์ฌ๋ฆฌ๊ณ , ๊ฐ๋ ์ฑ์ ์ฌ๋ฆฌ๋ ๋ฑ CSS์์ ๋ณด์ด๋ ๋จ์ ์ ๋ณด์ํ๊ณ , ๊ฐ๋ฐ์ ํจ์จ์ ์ฌ๋ฆฌ๊ธฐ ์ํด ๋ฑ์ฅํ CSS ์ ์ฒ๋ฆฌ๊ธฐ ์ธ์ด์ด๋ค.
CSS๋ฅผ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ฉฐ ์ถ๊ฐ ๊ธฐ๋ฅ ๋ํ ์๋ ํ์ฅํ ์คํฌ๋ฆฝํธ ์ธ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
'CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฉด์ ์์์ง๋ฌธ] React, Recoil, React Query, TypeScript (0) 2023.10.24 [๋ฉด์ ์ง๋ฌธ ์ ๋ฆฌ] ์๊ณ ๋ฆฌ์ฆ (0) 2023.03.04 [๋ฉด์ ์ง๋ฌธ ์ ๋ฆฌ] - React ์ง๋ฌธ (0) 2023.03.01 [๋ฉด์ ์ง๋ฌธ ์ ๋ฆฌ] - CS ์ง์ ์ง๋ฌธ (0) 2023.03.01 [๋ฉด์ ์ง๋ฌธ ์ ๋ฆฌ] - Javascript ๊ด๋ จ ์ง๋ฌธ (0) 2023.03.01