[DAY-29] CSS ์ฌํ (1)
๐ ํท๊ฐ๋ ธ๋ & ๋ชฐ๋๋ ๋ถ๋ถ๋ค๋ง ์ ๋ฆฌํ๋ ๋๋ง์ TIL
๐ฏ ๋ชจ๋ ๊ฐ์ ๋ด์ฉ์ ์ ์ง ์์์!
์ค๋์ ์๊ฐ์?
๋๋ ์ด๋ ๊ฒ ํธํ emmet ๋ฌธ๋ฒ์ ์ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ์ง ๋ชปํ๋๊ฐ.
๊ฐ์ฌ๋ ๋ฐ๋ผํ๋ฉด์ ์ ๋ง ์ฌ๋ฐ๊ฒ ์ฝ๋ฉํ์ต๋๋ค.
BEM ๋ฐฉ๋ฒ๋ก ์ ์ฐพ์๋ณธ ๋ค, ์ ๋ฒ์ ๋กํ ๋๊ป์ ์ ์ธ๋๋ฐ ๋๊ฐ๋ฅผ ์ฐ์
จ๋์ง ๋จ๋ฒ์ ์ดํดํ ์ ์์์ด์. ๋ฌผ๋ก ํด๋น ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ ๊ฒ์ ์๋์ง๋ง..
์ ๋ className์ ์ ๋ถ header-title์ ๊ฐ์ ์ผ๋ฐฅ ์ผ์ด์ค๋ก๋ง ์์ฑํด์๊ธฐ์ ํฅ๋ฏธ๋กญ๊ฒ ์ฐพ์๋ดค์ต๋๋ค.
๋์ค์ ๋ ์์ธํ ๊ธ์ ์์ฑํด๋ณผ๊ฒ์.
์๋ CSS์ ๊ด์ฌ์ด ๋ง์์ด์ ๋ณต์ตํ๋ ์ฐจ์์์ ๊ฐ์๋ฅผ ์๊ฐํ์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ์ ๊ฐ ๋ชฐ๋๋ ๋ถ๋ถ์ด ์๊ฐ๋ณด๋ค ๋ง๋๋ผ๊ณ ์..!
์ด์ฌํ ๊ฐ์ ๋ฃ๊ณ ๊ณต๋ถํด์ SCSS ๋ฌธ๋ฒ์ผ๋ก ์คํ์ผ์ ์ญ์ญ ์์ฑํด๋๊ฐ ์ ์๋ ๊ฐ๋ฐ์๊ฐ ๋๊ณ ์ถ์ต๋๋ค.
[1] CSS ๋ฌธ๋ฒ
[1-1] emmet ๋ฌธ๋ฒ
์ด ํธํ๊ฑธ ์ ๋ ์ ๋ค ๋ชฐ๋์๊น์.
.classname
๊ณผ #idname
์
๋ ฅ ํ tab์ ์๊ณ ์์์ง๋ง, ์ค๋ ๋ ์จ๋์ด ์ด์ธ์ ๋ฐฉ๋ฒ๋ค์ ์ฌ์ฉํด์ ๋น ๋ฅด๊ฒ ์์๋ค์ ์์ฑํ์๋ ๋ชจ์ต ๋ณด๊ณ ๋๋ฌด ๋๋์ต๋๋ค.
๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
- ์์ : >
- ํ์ : +
- ๋ถ๋ชจ : ^
- ๊ทธ๋ฃน : ()
- ์ฌ๋ฌ๊ฐ : *
- ๋๋ฒ๋ง : $
- id : #
- class : .
- ์์ฑ : []
- ํ ์คํธ : {}
์ต์ํ์ง ์์ ์์ ์์ ๋ฌธ๋ฒ์ ์์๋ก ํ์ฉํด๋ณด๋ฉด ์ด๋ฐ ์์ ์์ฑ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ํ type๋ ์ง์ ํด์ค ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด input:radio (input:r)
์ ์
๋ ฅํ๊ณ tab์ ๋๋ฅด๋ฉด <input type="radio" name="" id="">
์ด ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค.
์์ธํ ์ ๋ณด๋ ํ๋จ์ emmet document์์ ํ์ธํ ์ ์์ต๋๋ค.
https://docs.emmet.io/cheat-sheet/
[1-2] BEM ๋ฐฉ๋ฒ๋ก
CSS ๊ตฌ์กฐ ๋ฐ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ CSS ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์ ๋๋ค.
์ฝ๊ฒ ํ์ด์ฐ๋ฉด โCSS ClassName์ ์ด๋ป๊ฒ ์ง์ผ๋ฉด ์ข์์งโ์ ๋ํ ๋ด์ฉ์ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก BEM์ id๋ฅผ ์ฌ์ฉํ์ง ์๊ณ Class๋ง์ ์ฌ์ฉํ๋ฉฐ,
์ด๋ป๊ฒ ๋ณด์ด๋๊ฐ๊ฐ ์๋, ์ด๋ค ๋ชฉ์ ์ธ๊ฐ์ ๋ฐ๋ผ ์ด๋ฆ์ ์ง์ต๋๋ค.
์๋ฅผ ๋ค์ด ์๋ฌ ๋ฉ์ธ์ง๋ฅผ ๋์ฐ๋ P ํ๊ทธ์๋ .error
๋ผ๋ ์ด๋ฆ์ ๋ถ์ฌํฉ๋๋ค.
BEM์ Block, Element, Modifier
์ ๋ปํ๋ฉฐ, ๊ฐ๊ฐ __์ โ๋ก ๊ตฌ๋ถํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ด์ ๊ฐ์ class ์ด๋ฆ์ด ์๋ค๊ณ ์๊ฐํด๋ด ์๋ค.
.header__navigation--navi-text {
color: black;
}
๊ทธ๋ ๋ค๋ฉด header
๋ block, navigation
์ element, navi-text
๋ modifier๊ฐ ๋ฉ๋๋ค.
BEM ๋ฐฉ๋ฒ๋ก ์ ๋์ค์ ์กฐ๊ธ ๋ ์์ธํ ๋ค๋ค์ ๋ฐ๋ก ๊ธ์ ์์ฑํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
[2] CSS Float
CSS๋ฅผ ์ ๋๋ก ๋ค๋ค๋ดค์ ๋, Flex, Grid๋ก ๋ ์์๊ฐ ์ด๋ฏธ ๋๋ฌด๋๋ ๋ง์์ง ์๊ธฐ์์ต๋๋ค.
๋ฐ๋ผ์ Float ์์ฑ์ ์ฌ์ค์ ์ฒ์ ๋ค๋ค ๋ณด์์ต๋๋ค.
Float๋ ์ ๋ ฌ์ ํ ๋ ์ฌ์ฉํ์ง๋ง, ์ฌ์ค์ ์ง๊ธ์ ๋ง์ด ์ฌ์ฉํ์ง ์์ต๋๋ค.
[2-1] Float, Clear
Float ์์ฑ์ ์ฌ์ฉํ๊ณ ๋๋ฉด, ํค์ (Clear)๋ฅผ ํด์ค์ผ ํฉ๋๋ค.
ํ์ง๋ง html์ ์๋ก์ด ์์๋ฅผ ๋ง๋ค๊ณ , ํด๋น ์์์ clear์ ํด์ฃผ๋ฉด ์ฌ์ค์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ํ ์ ๋ ฌ์ด ์ผ์ด๋์ง ์์ต๋๋ค.
๋ฐ๋ผ์ ::after์ ์ฌ์ฉํฉ๋๋ค.
.clearfix::after {
content: "";
}
::after์ ํด๋น ๋ถ๋ถ(.clearfix)์ ๋ง๋ค์ด์ง๋ ๊ฐ์์ ์์๋ฅผ ๋ปํฉ๋๋ค.
ํด๋น ๊ฐ์ ์์๋ clearfix๊ฐ ๋ถ์ฌ๋ ๊ตฌ์ญ ๋ง์ง๋ง ๋ถ๋ถ์ ์ถ๊ฐ๋๋ฉฐ, CSS ์์ฑ์ ๋ถ์ฌํ ์ ์์ต๋๋ค.
์ด๋ ::after๋ content์ ํจ๊ป ์จ ์ค์ผ ๋์ํฉ๋๋ค.
<div class="container clearfix">
<!-- item๋ค์ ๊ฐ์ธ๊ณ ์๋ ์์์ ํด๋น class ์ด๋ฆ์ ์ถ๊ฐ -->
<div class="item float">1</div>
<div class="item float">2</div>
<div class="item float">3</div>
</div>
[2-2] Float ์์ฑ์ ๋ฐฐ์น
ํ container ์์ float ์์ฑ์ด ๋ถ์ฌ๋ item๋ค๊ณผ ๊ทธ๋ ์ง ์์ item๋ค์ด ์๋ ๊ฒฝ์ฐ, ์ด๋ป๊ฒ ๋ฐฐ์น๋ ๊น์?
์ด๋ฐ ์์ผ๋ก ๊ฒน์ณ์ ๋ฐฐ์น๋๋ ๋ชจ์ต์ ํ์ธํ ์ ์์ต๋๋ค.
๋ ์ด์์์ ๋ฌธ์ ๊ฐ ์๊ธฐ๊ธฐ ์ฝ์ฃ .
๋ฐ๋ผ์ Float์ ์ฌ์ฉํ๋ฉด์ ์ฃผ์ํ ์ ์, ์๋ก์ด ์์๋ฅผ ๋ง๋ค๊ณ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด
Float item๋ค์ด ์๋ clearfix ๊ตฌ์ญ์ ํ์ ์์๋ก ๋ง๋ค๋ฉด ์๋๋ค๋ ๊ฒ ์ ๋๋ค.
๋ฐ๋ผ์ ์๋ก์ด ์์๋ฅผ ๋ถ์ด๊ณ ์ถ๋ค๋ฉด clearfix๋ก ๋ฐ๋ก div๋ฅผ ๋ง๋ค์ด float item๋ค์ ํ๋ฒ์ฉ ๊ฐ์ธ์ค์ผ ํฉ๋๋ค.
[2-3] float ๋ฐฐ์น ์์
์ผ์ชฝ ์ ๋ ฌ์ ์ฐ๋ฆฌ๊ฐ ํํ ์๋ค์ํผ ์ผ์ชฝ โ ์ค๋ฅธ์ชฝ ๋ฐฉํฅ์ผ๋ก ์ ๋ ฌ์ด ์ด๋ฃจ์ด์ง๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ค๋ฅธ์ชฝ ์ ๋ ฌ์ ์ด๋ป๊ฒ ์ผ์ด๋ ๊น์?
๋ณด์๋ค์ํผ ์ค๋ฅธ์ชฝ โ ์ผ์ชฝ ๋ฐฉํฅ์ผ๋ก ์ ๋ ฌ์ด ์ผ์ด๋ฉ๋๋ค.
์ผ์ชฝ ์ ๋ ฌ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ผ์ชฝ โ ์ค๋ฅธ์ชฝ ๋ฐฉํฅ์ผ๋ก ์ ๋ ฌ์ํค๊ธฐ ์ํด์๋ ์ด๋ป๊ฒ ํด์ผํ ๊น์?
์ ๋ต์, float ์ ๋ ฌ์ ์ค๋ฅธ์ชฝ์ผ๋ก ํ๋, ์์ ์๋ ์์ ์์๋ค์ ์ ๋ ฌ์ left๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ๋ฉ๋๋ค.
[2-4] float๊ณผ block layout
mdn ๋ฌธ์๋ฅผ ์ฝ์ด๋ณด๋ฉด float์ ๋ธ๋ก ๋ ์ด์์์ ์ฌ์ฉ์ ๋ปํ๊ธฐ ๋๋ฌธ์, ์ผ๋ถ ๊ฒฝ์ฐ์ display ๊ฐ์ ๊ณ์ฐ ๊ฐ์ ์์ ํฉ๋๋ค
๋ผ๋ ๋ง์ด ์์ต๋๋ค.
ํด๋น CSS๊ฐ ๋ถ์ฌ๋ div๋ display๊ฐ inline์ด๋ฉฐ, ๊ฐ๋ก์ ์ธ๋ก ๊ฐ์ด ์ต์๊ฐ์ผ๋ก ์กฐ์ ๋ฉ๋๋ค.
div {
width: 200px;
height: 200px;
border: 4px solid;
display: inline;
}
ํ์ง๋ง ํด๋น ๊ฐ์ด ๋ถ์ฌ๋ div๋, float ์์ฑ์ ์ ์ฉํ๋ฉด ์๋์ผ๋ก display๊ฐ block์ ๊ฐ์ง๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
[3] CSS Position
Position์ ์์์ ์์น ํน์ฑ์ ์ ์ํฉ๋๋ค.
[3-1] absolute
๋ถ๋ชจ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋ฉ๋๋ค.
๋จ ๋ถ๋ชจ ์์์ position ๊ฐ์ static์ ์ ์ธํ relative, absolute, fixed, sticky๋ฅผ ๊ฐ์ ธ์ผ ํฉ๋๋ค.
position์ด absolute๋ฅผ ๊ฐ์ง๋ฉด, left, right, top, bottom์ ์ง์ ํ ์ ์์ต๋๋ค.
[3-2] fixed
fixed๋ ์ด๋ค ๋ถ๋ชจ ์์๊ฐ ์๋ค๊ณ ํ๋๋ผ๋ viewport๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐฐ์น๋ฉ๋๋ค.
ํ์ง๋ง ๋ถ๋ชจ ์์์ transform, perspective, filter ์์ฑ์ ์ํฅ์ ๋ฐ์ fixed์ ๊ธฐ์ค ์์๊ฐ ๋ณ๊ฒฝ๋๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
position๊ณผ fixed๋ ์๋์ผ๋ก ํด๋น ์์์ display๊ฐ block์ผ๋ก ๋ฐ๋๋ ์ฑ์ง์ด ์์ต๋๋ค.
[4] CSS Flex
Flex๋ ํ๋์ ์ฐจ์์ ์ฌ์ฉํ๋ ๋ ์ด์์ ๊ตฌ์กฐ์ ๋๋ค.
๋ฐ๋ผ์ ์ํ, ๋๋ ์์ง ์ ๋ ฌ์ ํ ๋ ๋๋ถ๋ถ Flex ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค.
[4-1] Flex container
Flex container์ flex๊ฐ ์ ์ฉ๋ item๋ค์ ๋ถ๋ชจ ์์๋ฅผ ๋ปํฉ๋๋ค.
.container {
border: 4px solid;
display: flex;
}
[1] display
display
์ ๊ฐ์ flex์ inline-flex๊ฐ ์์ต๋๋ค.
- flex : ์์ง ์ ๋ ฌ / ๊ฐ๋ก ๋์ด๊ฐ viewport๋ฅผ ๊ธฐ์ค์ผ๋ก ์ต๋๋ก ํ์ฅ
- inline-flex: ์ํ ์ ๋ ฌ/ ๊ฐ๋ก ๋์ด๊ฐ ํ์ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ต์๋ก ์ถ์
flex๋ฅผ ์ ์งํ๋ฉฐ block์ฒ๋ผ ์ฌ์ฉํ ๊ฒ ์ธ์ง, flex๋ฅผ ์ ์งํ๋ฉฐ inline์ฒ๋ผ ์ฌ์ฉํ ๊ฒ์ธ์ง์ ์ฐจ์ด์ ๋๋ค.
[2] flex-direction
flex์ ๋ฐฉํฅ์ ๋ฐ๋ผ flex-direction
์ ์ ํํ ์ ์์ต๋๋ค.
- row: ํ(์ค) - default
- column : ์ด(์นธ)
- row-reverse: row์ ๋ฐ๋ ๋ฐฉํฅ (์ค๋ฅธ์ชฝ โ ์ผ์ชฝ)
- column-reverse: column๊ณผ ๋ฐ๋ ๋ฐฉํฅ (์๋ โ ์)
[3] flex-wrap
์์ ์์๋ค์ ํฌ๊ธฐ์ ๋ฐ๋ฅธ ์ค๋ฐ๊ฟ์ ๋ํ ์์ฑ์ผ๋ก flex-wrap
์ ์ ํํ ์ ์์ต๋๋ค.
- nowrap : ๊ฐ๊ฐ์ ์์ดํ ์ ๊ฐ์ธ์ง ์๊ณ , ์ค๋ฐ๊ฟ์ด ์ผ์ด๋์ง ์์ต๋๋ค.
- wrap : ๊ฐ๊ฐ์ ์์ดํ ์ ๊ฐ์ธ ์ค๋ฐ๊ฟ์ด ์ผ์ด๋ ์ ์์ต๋๋ค.
- wrap-reverse: ์ค๋ฐ๊ฟ์ด ์ผ์ด๋๋ ๋ฐฉํฅ์ด ๋ฐ๋๊ฐ ๋ฉ๋๋ค.
[4] justify-content
์ฃผ ์ถ์ ์ ๋ ฌ ๋ฐฉ๋ฒ์ justify-content
๋ฅผ ํตํด ์ ํํ ์ ์์ต๋๋ค.
์ ๋ ฌ ๋ฐฉํฅ์ ๋์ผํ๋ฉฐ, ์ปจํ ์ด๋์ ์์น๋ง ์ง์ ํด์ค๋๋ค.
- flex-start: ์ ๋ ฌ๋ ํ์ ์์๋ค์ด ์ ๋ ฌ ์์ ๋ถ๋ถ์ ์์นํฉ๋๋ค.
- flex-end: ์ ๋ ฌ๋ ํ์ ์์๋ค์ด ์ ๋ ฌ ๋ ๋ถ๋ถ์ ์์นํฉ๋๋ค.
- center : ์ ๋ ฌ๋ ํ์ ์์๋ค์ ๊ฐ์ด๋ฐ์ ์์น์ํต๋๋ค.
- space-between: ๊ฐ์ฅ ์ฒซ๋ฒ์งธ ์์ดํ ์ ์ฃผ ์ถ์ ์์ ๋ถ๋ถ์, ๋ง์ง๋ง ์์ดํ ์ ์ฃผ ์ถ์ ๋ง์ง๋ง ๋ถ๋ถ์, ๋๋จธ์ง ์์๋ค์ ์ฌ์ด์ ๊ท ๋ฑํ ๊ฐ๊ฒฉ์ผ๋ก ๋ฐฐ์นํด์ค๋๋ค.
- space-around: ์์ดํ ์ ์ ์์ ๊ท ๋ฑํ๊ฒ ๊ณต๊ฐ์ ๋ถ๋ฐฐํ์ฌ ๋ฐฐ์นํฉ๋๋ค.
[5] align-items
์์ดํ ๋ค์ ์ปจํ ์ด๋ ์ ๊ต์ฐจ์ถ์์์ ์ ๋ ฌ์ ๋ง๋ค์ด๋ ๋๋ค.
- stretch: ์์ดํ ์ ํน์ ํฌ๊ธฐ๊ฐ ์ ํด์ ธ ์์ง ์์ ๊ฒฝ์ฐ, ๋ถ๋ชจ ์์์ ๊ฝ ๋ง๊ฒ ์์ ์์๋ค์ด ๋์ด๋ฉ๋๋ค.
- flex-start : ๊ต์ฐจ์ถ์์์ ์์ ๋ถ๋ถ์ ์์๋ค์ด ์์นํฉ๋๋ค.
- flex-end: ๊ต์ฐจ์ถ์์์ ๋ ๋ถ๋ถ์ ์์๋ค์ด ์์นํฉ๋๋ค.
- center: ๊ต์ฐจ์ถ์ ๊ธฐ์ค์ผ๋ก ๊ฐ์ด๋ฐ์ ์์๋ค์ด ์์นํฉ๋๋ค.
- baseline: ์์ดํ ์ ๋ค์ด์๋ ๋ฌธ์ ๊ธฐ์ค์ ์ ๋ง์ถฐ์ ์ ๋ ฌ์ด ๋ฉ๋๋ค.
[6] gab
์ปจํ ์ด๋ ์ ํ์ ์์๋ค ์ฌ์ด์ ์ผ์ ๊ฐ๊ฒฉ์ ๋ง๋ค์ด์ค๋๋ค.
[4-2] Flex items
Flex item๋ค์ display๊ฐ flex๋๋ inline flex๋ฅผ ํตํด ์ ๋ ฌ๋ ํ์ ์์๋ค์ ๋ปํฉ๋๋ค.
[1] flex-grow
์์ดํ ๋ค์ ์ฆ๊ฐ๋๋ ๋น์จ์ ์ ๋ ฅํฉ๋๋ค. (default: 0)
์ ๋ ฅ๋๋ ๋น์จ์ ๋ฐ๋ผ ๋ถ๋ชจ ์์ ๋ด ํด๋น ์์ดํ ๋ค์ ํฌ๊ธฐ๊ฐ ์ ํด์ง๋๋ค.
[2] flex-shrink
flex-shirink๋ ์์์ ๊ฐ์ ๋๋น ๋น์จ์ ์ง์ ํ ์ ์์ต๋๋ค. (default: 1)
[3] flex-basis
์์์ ๊ธฐ๋ณธ ๋๋น๋ฅผ ์ค์ ํฉ๋๋ค.
- auto: ํด๋น ์์์ ์ ๋ ฅ๋์ด์๋ ๊ฐ๋ก, ์ธ๋ก ๋๋น๋ ์๋์ ์ผ๋ก ๋์ด๋๊ณ ์ค์ด๋ ๋๋น์ ๋ง์ถฅ๋๋ค. (default)
- ํน์ ํฌ๊ธฐ ์ ๋ ฅ: ๋ ์ด์ ํด๋น ์์์ width, height๋ ์ ์ฉ๋์ง ์์ต๋๋ค.
ํด๋น grow, shrink, basis๋ฅผ flex ์์ฑ์ ์์ฑํ ์ ์์ต๋๋ค.
flex : grow shrink basis;
[4] align-self
align-items์ ์์ ์๋ ๊ฐ๋ณ์ ์ธ ์์ดํ ์ ๊ต์ฐจ์ถ ์ ๋ ฌ์ ๋ง๋ค์ด ์ค ์ ์์ต๋๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ