๊ฐœ๋ฐœ ๊ณต๋ถ€/๋ฐ๋ธŒ์ฝ”์Šค TIL

[ํด๋ผ์šฐ๋”ฉ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—”์ง€๋‹ˆ์–ด๋ง TIL] 5์ผ์ฐจ - CSS II

๊ฐ€์šค์ด 2023. 12. 22. 19:55

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 ์ง€์ • ๊ฐ€๋Šฅ
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;
      • ์‹œ๊ฐ์ ์œผ๋กœ ๋ฐ”๋€ ๊ฒƒ์ด๊ณ  ๋งˆํฌ์—…์€ ๊ณ ๋Œ€๋กœ ์œ ์ง€๋œ๋‹ค.
  • 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 ๋ฐฐ์šด ๊ฑธ๋กœ ํ‹ฐ์Šคํ† ๋ฆฌ ์Šคํ‚จ ๋งŒ๋“œ๋Š” ๊ฑฐ์— ๋„์ „ํ•ด ๋ณผ ์˜ˆ์ •์ด๋‹ค. ํ™”์ดํŒ…!