[ํด๋ผ์ฐ๋ฉ ์ดํ๋ฆฌ์ผ์ด์ ์์ง๋์ด๋ง TIL] 5์ผ์ฐจ - CSS II

Intro..
์ค๋์ CSS์์ ๊ฐ์ฅ ์ค์ํ ๋ด์ฉ์ ๋ง์ด ๋ฐฐ์ ๋ค.
ํนํ, CSS์ ๊ฝ(?)์ด๋ผ๊ณ ์๊ณ ์๋ flex์ ๋ํด ํ์ตํ๋ค.
ํท๊ฐ๋ฆฌ๊ณ ์ด๋ ต์ง๋ง ์ฌ๋ฐ๋ CSS!
์ค๋ ํ์ตํ ๋ด์ฉ
: CSS margin, padding, border, display, float, position, flex, grid...
๋ฐ์ค ๋ชจ๋ธ
ํฌ๊ธฐ ์ง์
- width, height (๋๋น, ๋์ด) / max-width, max-height (์ต๋ ๋๋น, ์ต๋ ๋์ด)
- ๋ธ๋ก ๋ ๋ฒจ ์์์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
- auto ๊ฐ์ ์ฌ์ฉํด ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์ ๊ณ์ฐํด์ ์ง์ ํ๊ฒ ํ ์๋ ์๋ค.
- margin, padding (๋ฐ์ค ์ธ๋ถ, ๋ด๋ถ ์ฌ๋ฐฑ)
- ๋ธ๋ก ๋ ๋ฒจ ์์์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ, ์ธ๋ผ์ธ ์์์์ ์ข/์ฐ๋ง ์ ์ฉ ๊ฐ๋ฅํ๋ค.
- margin์ ์์ ๊ฐ์ด ๊ฐ๋ฅ
- ๋ง์ง ์์: ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์์ ๊ฐ ์ธ๋ถ ์ฌ๋ฐฑ์ด ์์๋๋ ํ์
- ์ธ์ ํ์ ๊ฐ์ ์ธ๋ถ ์ฌ๋ฐฑ ์์ ํ์์ผ๋ก ์ ์ผ ํฐ ์ฌ๋ฐฑ์ ๋ฐ๋ผ๊ฐ
- ๋ถ๋ชจ์ ์์ ์์์ ์ฌ๋ฐฑ์ ๋ถ๋ฆฌํ ๊ถํ์ด ์์ ๋ ์์
- ๋ถ๋ชจ์ ์์ ์์ ๋ถ๋ฆฌํ๋ ๋ฒ
- ๋ถ๋ชจ์ ํ ๋๋ฆฌ(border) ๋ฃ๊ธฐ
- ๋ถ๋ชจ์ ์์ ์ฌ์ด์ ์ฝํ ์ธ ๋ฃ๊ธฐ
- ๋ถ๋ชจ์ ๋ด๋ถ ์ฌ๋ฐฑ(padding) ๋ฃ๊ธฐ
- ๋ถ๋ชจ์ ์์ ์์ ๋ถ๋ฆฌํ๋ ๋ฒ
<style>
.line1 { margin-bottom: 20px; }
.line2 { margin-top: 30px; }
</style>
<p class="line1">line1</p>
<p class="line2">line2</p>
<!-- (20+30)px = 50px์ด ์๋ ์ ์ผ ํฐ ์ซ์์ธ 30px ์ ์ฉ -->
ํ ๋๋ฆฌ
- border
- color, style, width (top, right, bottom, left ๊ฐ์ ๊ฐ๋ณ๋ก ์ค ์๋ ์๋ค. 'border-top: ...')
- border-color: CSS color ๊ฐ
- border-style: solid, dotted...
- border-width: ์ ์ ๋๊ป
- border๋ก ํ๋ฒ์ color, style, width ์ง์ ๊ฐ๋ฅ
- color, style, width (top, right, bottom, left ๊ฐ์ ๊ฐ๋ณ๋ก ์ค ์๋ ์๋ค. 'border-top: ...')
div {
border: 1px solid black;
}
- box-sizing
- ๋ฐ์ค ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํ ๋ ๋ด๋ถ ์ฌ๋ฐฑ, ํ ๋๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ํฌํจํ ์ง ๊ฒฐ์ ํ๋ ์์ฑ
- ๊ธฐ๋ณธ ๊ฐ์ 'content-box'์ด๋ฉฐ padding, width/height, border-width ํฌ๊ธฐ๊ฐ ๋ชจ๋ ๋ํด์ง๋ค.
- 'border-box': width, height ๊ฐ์ ๋ง์ถฐ pading, border ์ ์ฉ
- ์ฃผ๋ก border-box๋ก ๋ง์ด ์ฌ์ฉํ๋ค.
.content-box {
box-sizing: content-box;
width: 100px;
border: 1px solid red;
padding: 10px;
} /* 100 + 2 + 20 = 122px */
div {
width: 200px;
height: 100px;
background-color: #ddd;
padding: 10px; /* 10 10 10 10 */
border: 1px solid black; /* 1 1 1 1 */
/* (300 + 20 + 2) X (300 + 20 + 2) */
overflow: auto;
box-sizing: border-box;
/* 300 X 300 */
}
์ด๊ณผ
- overflow: ์ง์ ํ ๋ฐ์ค ํฌ๊ธฐ๋ฅผ ์ด๊ณผํ์ ๊ฒฝ์ฐ ๋์ฒ ๋ฐฉ๋ฒ
- visible (๊ธฐ๋ณธ ๊ฐ): ๊ทธ๋๋ก ๋์น๊ฒ ๋ ธ์ถ
- hidden: ๋์น ์ฝํ ์ธ ์จ๊น
- scroll: ์คํฌ๋กค๋ฐ (์ฝํ ์ธ ๊ฐ ๋์ง ์์๋ ์คํฌ๋กค๋ฐ๊ฐ ์๊น)
- auto: ๋ธ๋ผ์ฐ์ ๊ฐ ์๋์ผ๋ก ์คํฌ๋กค๋ฐ on/off
- overflow-x, overflow-y๋ก ๋ถ๋ฆฌํด์ ์ง์ ๊ฐ๋ฅํ๋ค.
- opacity: ๋ฐ์ค ํฌ๋ช
๋
- ๊ธฐ๋ณธ ๊ฐ์ 1
- 0~1์ฌ์ด ๊ฐ (์์์ ์ฌ์ฉ ๊ฐ๋ฅ)
- ํฌ๋ช ๋๊ฐ ์ ์ฉ๋๋ฉด ์์ ์์๋ ํจ๊ป ํฌ๋ช ํด์ง๋ ๊ทธ๋ ๋ค๊ณ opacity๊ฐ ์์๋ ๊ฑด ์๋๋ค.
ํ์ ์ ํ
display
- ์์ ๋ธ๋ก, ์ธ๋ผ์ธ์ ๋ํ ์ฒ๋ฆฌ์ ์ ํ๊ณผ ์์ ์์๋ฅผ ๋ฐฐ์นํ๋ ๋ ์ด์์์ ์ค์ ํ ์ ์๋ ์์ฑ
- ํ๊ทธ๋ง๋ค ๊ฐ์ง ๊ธฐ๋ณธ ๊ฐ์ด ์๋ค. (block์ด๋ inline)
- display: none; ๊ฐ์ ์ง์ ํ๋ฉด ์์๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒ์ฒ๋ผ ์ฒ๋ฆฌํ ์ ์๋ค.
- none์ผ๋ก ์ฌ๋ผ์ง ์์๋ ์ ๊ทผ์ฑ ํธ๋ฆฌ์์๋ ์ ์ธ๋๊ธฐ ๋๋ฌธ์ ์คํฌ๋ฆฐ ๋ฆฌ๋๊ฐ ์ฝ์ง ์๋๋ค.
visibility
- ์๊ฐ์ ์ผ๋ก ์จ๊ธฐ๋ ์์ฑ
- visibility: hidden;
- display: none; ๊ณผ ๋ฌ๋ฆฌ ์๊ฐ์ ์ผ๋ก ์จ๊ธฐ๋ ๊ธฐ๋ฅ์ด๋ผ ๊ณต๊ฐ์ ๊ทธ๋๋ก ์ฐจ์งํ๋ค.
- ์จ๊ฒจ์ง ์์๋ ์ ๊ทผ์ฑ ํธ๋ฆฌ์์ ์ ์ธ๋๋ฏ๋ก ์คํฌ๋ฆฐ๋ฆฌ๋๊ฐ ์ฝ์ง ์๋๋ค.
float
- ๋ฌธ๋งฅ์์ ๋น ์ ธ ์ข์ฐ์ธก์ ๋ฐฐ์น๋๋ ์์ฑ
position
- ๋ฌธ์ ์์ ์์๋ฅผ ๋ฐฐ์นํ๋ ๋ฐฉ๋ฒ
- top, right, bottom, left ๊ฐ์ผ๋ก ์์น๋ฅผ ์ ์ดํ ์ ์๋ค.
- z-index๋ก z ์ถ์ ์ ์ดํด์ ์์ด๋ ์์๋ ์ ์ ๊ฐ๋ฅ ํจ.
- ์ ์ฉ ๊ฐ๋ฅ ๊ฐ
- static: ๋ฌธ์์ ํ๋ฆ์ ๋ฐ๋ผ ๋ฐฐ์น. offset, z-index๋ ์ ์ด ๋ถ๊ฐ
- relative: ๋ฌธ์ ํ๋ฆ์ ๋ฐ๋ผ ๋ฐฐ์นํ๊ณ ํ์ฌ ์์น ๊ธฐ์ค์ผ๋ก offset, z-index ์ ์ด ๊ฐ๋ฅํ๋ค.
- absolute: ๋ฌธ์ ํ๋ฆ์์ ์ ๊ฑฐํ๊ณ ๊ฐ์ฅ ๊ฐ๊น์ด ์์น์ relative ์์์ ์๋์ ์ผ๋ก ๋ฐฐ์น (์์ผ๋ฉด body ๊ธฐ์ค)
- fixed: ๋ฌธ์ ํ๋ฆ์์ ์ ๊ฑฐํ๊ณ ๋ธ๋ผ์ฐ์ ์ ํ๋ฉด ๊ธฐ์ค์ผ๋ก ๋ฐฐ์น
- sticky: ๋ฌธ์ ํ๋ฆ์ ๋ฐ๋ผ ๋ฐฐ์น๋๋ ์์๊ฐ ์คํฌ๋กค์ ๋ฟ์ผ๋ฉด ๋ฐ๋ผ๋ค๋ (ํค๋๊ฐ์ ๊ณณ์์ ๋ง์ด ์ฐ์)
์ ์ฐํ ์์ ๋ง๋ค๊ธฐ Flexbox
: ์ผ์ฐจ์ ๋ ์ด์์
- justify-content: ๊ฐ๋ก์ถ ์ ๋ ฌ
- flex-start, flex-end, center
- space-between: ์ฝํ ์ธ ์ฒ์, ๋ง์ง๋ง์ ๋์ ๋๋จธ์ง๋ ๊ท ๋ฑํ๊ฒ ์ ๋ ฌ
- space-around: ์ฝํ ์ธ + ์ฌ๋ฐฑ์ด ๊ท ๋ฑํ๊ฒ ์ ๋ ฌ
- space-evenly: ์ฝํ ์ธ ์ ์ธ, ์ฌ๋ฐฑ๋ง ๊ท ๋ฑํ๊ฒ ์ ๋ ฌ
- align-items: ์ธ๋ก์ถ ์ ๋ ฌ
- stretch: (๊ธฐ๋ณธ ๊ฐ) ๋ถ๋ชจ์ ํฌ๊ธฐ๋งํผ ์์ ์์๋ค ๋์ด๋จ
- flex-start, flex-end, center
- baseline: ํฐํธ ํฌ๊ธฐ์ ๋ฐ๋ผ ์ ๋ ฌ ๋จ
- flex-grow, flex-shrink (๊ฐ 0 or 1): ์ ์ฐ์ฑ ์กฐ์
- ์์์์์ ์์ฑ์ ์ ์ฉํด์ผ ํจ
- flex-basis: ํฌ๊ธฐ ์กฐ์
- ์์์์์ ์์ฑ์ ์ ์ฉํด์ผ ํจ
- ๊ธฐ๋ณธ ๊ฐ์ auto์ด๊ณ , px๊ฐ์ผ๋ก ํฌ๊ธฐ ์กฐ์ ๊ฐ๋ฅ
- ๋ณดํต grow, shrink, basis ๋ฌถ์ด์ ์ฌ์ฉํ๋ค
- ex) flex: 1 1 auto
- flex-direction: ์ถ ๋ณ๊ฒฝ (row: ๊ฐ๋ก, column: ์ธ๋ก)
- gap, order: ์ฌ๋ฐฑ๊ณผ ์์
- order: ์์ ์์์ ์์ (๊ธฐ๋ณธ ๊ฐ 0)
- ๋ค์ ์๋ ์์๋ฅผ ๋งจ ์์ผ๋ก ๋ณด๋ด๊ณ ์ถ๋ค๋ฉด -> ์์์ order: -1;
- ์๊ฐ์ ์ผ๋ก ๋ฐ๋ ๊ฒ์ด๊ณ ๋งํฌ์ ์ ๊ณ ๋๋ก ์ ์ง๋๋ค.
- order: ์์ ์์์ ์์ (๊ธฐ๋ณธ ๊ฐ 0)
- flex-wrap: ์์ ์์๋ค์ด ๋์น ๋ ์๋๋ก ๋ด๋ ค ์ค ์ง ๊ฒฐ์ (wrap, nowrap, wrap-reverse)
๋ฐ๋ํ ์์ ๋ง๋ค๊ธฐ Grid
: ์ํ์ ๊ณผ ์์ง์ ์ ๊ฐ์ง 2์ฐจ์ ๋ ์ด์์ ๋ง๋ค๊ธฐ
flex๋ณด๋ค ์ฌ์ฉ ๋น๋๊ฐ ๋ฎ์ง๋ง grid๋ ํ์ด์ง ์ ์ฒด ๋ ์ด์์์ ๋ง๋ค ๋ ์ข์
- grid-template: ๋ฐ๋ํ ์กฐ์
- grid-template-rows, grid-template-columns
- repeat: ๋ฐ๋ณต
.wrapper {
display: grid;
grid-template-rows: repeat(3, 100px);
/* ํ ์ค์ 100px 3๊ฐ ๋ฐ๋ณต */
}
- grid-row, grid-column: ์ ํ์ฅ
.content {
grid-row: 1 / 3;
} /* 1์์ 3๊น์ง ๋ ์นธ ์ฐจ์งํ๊ฒ ๋ค๋ ์๋ฏธ */
.content2 {
grid-row: span 2;
} /* content2๊ฐ ์์นํ ์ง์ ์์ 2์นธ ์ฐจ์งํ๊ฒ ๋ค๋ ์๋ฏธ */
- grid-template-areas, grid-area: ์์ญ ์ง์ ํ๊ณ ๋ฐฐ์น
- header, slider, content ๋ฑ ์์น ์ก์ ๋ ์ฌ์ฉ
- ์ด๋ฆ์ ๋์ด์ฐ๊ธฐ ์ฌ์ฉ X
.wrapper {
display: grid;
grid-template-rows: repeat(3, 100px);
grid-template-areas: 'header slider slider' 'header content content' 'header banner footer';
}
.content1 {
grid-area: header;
}
.content2 {
grid-area: slider;
}
.content3 {
grid-area: content;
}
.content4 {
grid-area: banner;
}
.content5 {
grid-area: footer;
}
- gap, order: ์ฌ๋ฐฑ๊ณผ ์์
โ ๊ธฐํ ํ!
- ํ๋์ ํ๊ทธ์ class๋ ์ฌ๋ฌ๊ฐ ๊ฐ์ง ์ ์์ง๋ง id๋ ๋ฌด์กฐ๊ฑด ํ๋๋ง ๊ฐ๋ฅํ๋ค.
- ์ฐ์ตํ ๋ VSCode์์ lorem + ์ํฐ๋ฅผ ์น๋ฉด ์๋ฌด ์๋ฏธ ์๋ ๋ฌธ์ฅ์ ๋ง๋ค์ด ์ค๋ค.
- ํด๋์ค/์์ด๋ ๋ช ์์ฑํ ๋ ๋์๋ฌธ์๋ฅผ ์ฃผ์ํด์ผ ํจ (ํด๋์ค/์์ด๋ ๋ช ์ ํ๊ธ๋ง๊ณ ์์ด๋ก ์์ฑํ๊ธฐ, ์ซ์ ๋จผ์ ์์ฑ๋ ์๋จ)
- ๊ณ์ธต ์ ์ฒดํฌํ๊ธฐ (๋งํฌ์ ์์์ CSS ์์๋ฅผ ๊ฐ๊ฒ ํด์ฃผ๋ฉด ๋ ํท๊ฐ๋ฆฌ๊ฒ ์์ ํ ์ ์๋ค.)
๋ง๋ฌด๋ฆฌ
ํ ์ฃผ์ ๊ฐ์๊ฐ ๋ฒ์จ ๋์ด๋ฌ๋ค. ๋ง์ ๋ด์ฉ์ ๋ฐฐ์์ ๋ณต์ต์ ํ์ง ์์ผ๋ฉด ๋จธ๋ฆฟ์์ ๋จ์ง ์์ ๊ฒ ๊ฐ๋ค. ๋ณต์ต์ ๊พธ์คํ ํด์ผ๊ฒ ๋ค.
๋ค์์ฃผ๋ ๋ฐ๋ธ์ฝ์ค ์์ํ์๋ง์ ๋ฐฉํ์ด ์์๋๋๋ฐ ์ฐ๋ง์ด๋๊น ์ด์ฌํ ๋จน๊ณ ๋๊ณ ๊ณต๋ถ๋ ํํํ ํด์ผ์ง!
๋ฐฉํ๋์ ๊ณํ์ HTML/CSS ๋ฐฐ์ด ๊ฑธ๋ก ํฐ์คํ ๋ฆฌ ์คํจ ๋ง๋๋ ๊ฑฐ์ ๋์ ํด ๋ณผ ์์ ์ด๋ค. ํ์ดํ !
