๐ŸŽจ CSS Layout

Yeonnยท2024๋…„ 8์›” 21์ผ
0

HTML+CSS

๋ชฉ๋ก ๋ณด๊ธฐ
16/18
post-thumbnail

๐Ÿ’ก display ? none block inline inline-block flex grid



โ“ย  flex

โ—๏ธย flex container

๐Ÿ“Œ
display: flex container ์ •์˜
flex-direction: flex items๊ฐ€ ์ •๋ ฌ๋˜๋Š” ์ฃผ ์ถ•( main-axis ) ์„ค์ •
justify-content: ์ฃผ ์ถ•( main-axis )์˜ ์ •๋ ฌ ๋ฐฉ๋ฒ• ์„ค์ •
align-items: ๊ต์ฐจ ์ถ•( cross-axis )์˜ ์ •๋ ฌ ๋ฐฉ๋ฒ• ์„ค์ •
flex-wrap: flex items์˜ ์ค„ ๋ฐ”๊ฟˆ ์„ค์ •
flex-flow: a, b: flex-direction๊ณผ flex-wrap ๋‹จ์ถ• ์†์„ฑ

โœ”๏ธย display

  • display: flex

    • ๋ธ”๋ก ๋ ˆ๋ฒจ ์š”์†Œ ์ทจ๊ธ‰
    • ๋ถ€๋ชจ ์š”์†Œ์˜ ์ „์ฒด ๋„ˆ๋น„๋ฅผ ์ฐจ์ง€
    • ์ƒˆ๋กœ์šด ์ค„์—์„œ ์‹œ์ž‘
    • ์ „์ฒด ๋ ˆ์ด์•„์›ƒ์˜ ์ผ๋ถ€๋กœ ์‚ฌ์šฉ
    • ex. ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”, ์นด๋“œ ๋ ˆ์ด์•„์›ƒ ๋“ฑ
  • display: inline-flex

    • ์ธ๋ผ์ธ ์š”์†Œ๋กœ ์ทจ๊ธ‰
    • ๋ถ€๋ชจ ์š”์†Œ์˜ ์ปจํ…์ธ  ํ๋ฆ„์— ๋”ฐ๋ผ ๋„ˆ๋น„๋ฅผ ์ฐจ์ง€ํ•˜๋ฉฐ, ๋‹ค๋ฅธ ์ธ๋ผ์ธ ์š”์†Œ๋“ค๊ณผ ๊ฐ™์€ ์ค„์— ๋ฐฐ์น˜
    • ์ธ๋ผ์ธ ์ปจํ…์ŠคํŠธ ๋‚ด์—์„œ ์‚ฌ์šฉ
    • ex. ๋ฒ„ํŠผ, ์ธ๋ผ์ธ ์•„์ด์ฝ˜๊ณผ ํ…์ŠคํŠธ ๋“ฑ

โœ”๏ธย flex-direction

  • ํšŒ์ƒ‰ ํ™”์‚ดํ‘œ๊ฐ€ ์ฃผ์ถ• ๋ฐฉํ–ฅ ! items์˜ ์ •๋ ฌ ๋ฐฉํ–ฅ
    • row: items๋ฅผ ์ˆ˜ํ‰์ถ•( ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ ! )์œผ๋กœ ์ •๋ ฌ
    • row-reverse: row ๋’ค์ง‘๊ธฐ !
    • column: items๋ฅผ ์ˆ˜์ง์ถ•( ์œ„์—์„œ ์•„๋ž˜ ! )์œผ๋กœ ์ •๋ ฌ
    • column-reverse: column ๋’ค์ง‘๊ธฐ !

โœ”๏ธย justify-content

  • ์ฃผ ์ถ•( main-axis )์˜ ์ •๋ ฌ ๋ฐฉ๋ฒ•์„ ์„ค์ • !
    • flex-start: ์ฃผ์ถ• ์‹œ์ž‘๋ถ€ํ„ฐ ์ฐจ๊ณก์ฐจ๊ณก ์ •๋ ฌ
    • flex-end: ์ฃผ์ถ• ๋๋ถ€ํ„ฐ ์ฐจ๊ณก์ฐจ๊ณก ์ •๋ ฌ
    • center: ๊ฐ€์šด๋ฐ ์ •๋ ฌ
    • space-evenly: ๋นˆ ๊ณต๊ฐ„์„ ๊ท ์ผํ•˜๊ฒŒ ๋‚˜๋ˆ„์–ด ์ •๋ ฌ โ†’ ๋นˆ ๊ณต๊ฐ„ / 3
    • space-between: item๊ฐ„์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๋™์ผํ•˜๊ฒŒ ์ •๋ ฌ
    • space-around: item์˜ ์–‘์ชฝ margin ๋„ˆ๋น„๋ฅผ ๊ท ์ผํ•˜๊ฒŒ ์ •๋ ฌ โ†’ ๋นˆ ๊ณต๊ฐ„ / 6

โœ”๏ธย align-items

  • ๊ต์ฐจ ์ถ•( cross-axis )์˜ ์ •๋ ฌ ๋ฐฉ๋ฒ•์„ ์„ค์ • !
  • flex-start: ๊ต์ฐจ ์ถ• ์‹œ์ž‘๋ถ€ํ„ฐ ์ฐจ๊ณก์ฐจ๊ณก ์ •๋ ฌ
  • flex-end: ๊ต์ฐจ ์ถ• ๋๋ถ€ํ„ฐ ์ฐจ๊ณก์ฐจ๊ณก ์ •๋ ฌ
  • center: ๊ต์ฐจ ์ถ• ๊ฐ€์šด๋ฐ ์ •๋ ฌ

โœ”๏ธย flex-wrap

  • nowrap: ๋ชจ๋“  items๋ฅผ ๊ณต๊ฐ„ ๋„ˆ๋น„์™€ ๊ด€๊ณ„ ์—†์ด ์—ฌ๋Ÿฌ ์ค„๋กœ ๋‚˜๋ˆ„์ง€ ์•Š๋Š”๋‹ค ( ํ•œ ์ค„์— ๋ชจ๋‘ ํ‘œ์‹œ ! )
  • wrap: item์ด ๊ณต๊ฐ„ ๋ฐ–์œผ๋กœ ๋‚˜๊ฐˆ ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ์ค„๋กœ ๋‚˜๋ˆ„์–ด ํ‘œ์‹œ
  • wrap-reverse: wrap์˜ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ํ‘œ์‹œ !

โœ”๏ธย flex-flow

  • flex-direction๊ณผ flex-wrap์„ ํ•œ๋ฒˆ์— ์ง€์ • !
.container{
	flex-flow: row wrap;
	// flex-direction: row;
	// flex-wrap: wrap;
}

โ—๏ธย flex item

  • order: item์˜ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ • / ๊ธฐ๋ณธ๊ฐ’: 0 / ์ˆซ์ž๊ฐ€ ์ž‘์„์ˆ˜๋ก ์•ž ์ˆœ์„œ !
  • flex-grow: item์˜ ์ฆ๊ฐ€ ๋„ˆ๋น„ ๋น„์œจ ์„ค์ • / ๊ธฐ๋ณธ๊ฐ’: 0
  • flex-shrink: item์˜ ๊ฐ์†Œ ๋„ˆ๋น„ ๋น„์œจ ์„ค์ • / ๊ธฐ๋ณธ๊ฐ’: 1
  • flex-basis: item์˜ ๊ณต๊ฐ„ ๋ฐฐ๋ถ„ ์ „ ๊ธฐ๋ณธ ๋„ˆ๋น„ ์„ค์ •( ์ตœ์†Œ ๊ธฐ์ค€ ) / ๊ธฐ๋ณธ๊ฐ’: auto
  • flex: flex-grow flex-shrink flex-basis ์ถ•์•ฝ ์†์„ฑ
  • align-self: ๊ต์ฐจ ์ถ•( cross-axis )์—์„œ item์˜ ์ •๋ ฌ ๋ฐฉ๋ฒ• ์„ค์ •
    • flex-start, flex-end, center

โ“ grid

โ—๏ธ grid layout ๊ตฌ์„ฑ์š”์†Œ

๐Ÿ“Œ
grid container: ์ „์ฒด grid layout์„ ๊ฐ์‹ธ๋Š” ์—ญํ• 
grid item: grid container์— ์†ํ•ด ์žˆ๋Š” ํ•˜์œ„ DOM ์š”์†Œ
grid track: grid layout์˜ ํ–‰ ๋˜๋Š” ์—ด
grid line: grid track์„ ๊ตฌ๋ถ„ํ•˜๋Š” ์„ 
grid cell: grid layout์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„์š”์†Œ, ํ…Œ์ด๋ธ”์˜ ์…€๊ณผ ์œ ์‚ฌ !
grid area: ๋‹ค์ˆ˜์˜ grid๋กœ ์ด๋ฃจ์–ด์ง„ ์˜์—ญ

โœ”๏ธย display

display: flex , display: inline-flex ์™€ ๊ฐ™์€ ๊ฐœ๋… !

  • display: grid

  • display: inline-grid

  • display: flex

  • display: inline-flex

โœ”๏ธย grid box model: ํ˜•ํƒœ ์ •์˜

  • grid-template-rows: row์˜ ๋ฐฐ์น˜ ์™€ ์ˆ˜ ๊ฒฐ์ •
  • grid-template-columns: column์˜ ๋ฐฐ์น˜ ์™€ ์ˆ˜ ๊ฒฐ์ •
  • grid-auto-rows: grid-template-rows์˜ ํ†ต์ œ๋ฅผ ๋ฒ—์–ด๋‚œ ์œ„์น˜์˜ ํŠธ๋ž™ ํฌ๊ธฐ ์ง€์ •
  • grid-auto-columns: grid-template-columns์˜ ํ†ต์ œ๋ฅผ ๋ฒ—์–ด๋‚œ ์œ„์น˜์˜ ํŠธ๋ž™ ํฌ๊ธฐ ์ง€์ •

โœ”๏ธย grid box model: auto

  • fr: fraction, ๋‚จ์€ ๊ณต๊ฐ„์„ ๋ถ„๋ฐฐํ•˜๋Š” ๋‹จ์œ„
    .grid_container {
    	grid-template-columns: 1fr 2fr 1fr; 
    	/* ์ „์ฒด ๊ฐ€๋กœ๋ฅผ 4๋กœ ๊ท ๋“ฑํ•˜๊ฒŒ ๋‚˜๋ˆˆ ๋’ค 1, 2, 1 ๋น„์œจ๋กœ ๋ถ„๋ฐฐํ•œ๋‹ค */
    }
  • span: ์š”์†Œ๊ฐ€ ๊ทธ๋ฆฌ๋“œ์˜ ์—ฌ๋Ÿฌ ์—ด์ด๋‚˜ ํ–‰์— ๊ฑธ์ณ์„œ ์œ„์น˜ํ•˜๋„๋ก ์ง€์ •ํ•  ๋•Œ ์‚ฌ์šฉ
    .item {
      grid-column: span 2; /* 2๊ฐœ์˜ ์—ด์— ๊ฑธ์ณ์„œ ํ™•์žฅ */
    }
  • repeat(๋ฐ˜๋ณตํšŸ์ˆ˜, ๋ฐ˜๋ณต๊ฐ’): ๋ฐ˜๋ณต์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜
    .grid-container{
    	grid-template-columns: repeat( 4, 1fr);
    }
  • minmax(์ตœ์†Œ๊ฐ’, ์ตœ๋Œ€๊ฐ’): ์ตœ์†Œ, ์ตœ๋Œ€์˜ ํญ์„ ์ง€์ •ํ•˜๋Š” ํ•จ์ˆ˜

  • auto-fillcolumn์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์ •ํ•˜์ง€ ์•Š๊ณ  ์„ค์ •๋œ ๋„ˆ๋น„๋งŒํผ ์…€ ์ฑ„์šฐ๊ธฐ
    • ์„ค์ •๋œ ๋„ˆ๋น„์—์„œ ๊ฐ€๋Šฅํ•œ ๋งŽ์€ ์…€๋“ค์„ ๋งŒ๋“ค์–ด ๋นˆ ๊ณต๊ฐ„์ด ์žˆ์–ด๋„ ์…€์ด ์ปค์ง€์ง€ ์•Š์Œ
  • auto-fit: column์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์ •ํ•˜์ง€ ์•Š๊ณ  ์„ค์ •๋œ ๋„ˆ๋น„๋งŒํผ ์…€ ์ฑ„์šฐ๊ธฐ
    • ๋นˆ ๊ณต๊ฐ„์„ ์…€๋“ค์ด ๋‚˜๋ˆ„์–ด ๊ฐ€์ ธ์„œ ๋”ฑ ๋งž๊ฒŒ ๊ธธ์ด๋ฅผ ์„ค์ •

      .grid-container{
      	grid-template-columns: repeat(auto-fit, minmax(20%, auto);
      }

โœ”๏ธย grid cell gap

  • row-gap: grid cell ์‚ฌ์ด์˜ row ๊ฐ„๊ฒฉ ์„ค์ •
  • column-gap: grid cell ์‚ฌ์ด์˜ column ๊ฐ„๊ฒฉ ์„ค์ •
  • gap: grid cell ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ ์„ค์ •

โœ”๏ธย grid cell ์˜์—ญ ์ง€์ •

  • grid-column-start grid-column-end grid-column
  • grid-row-start grid-row-end `grid-row`
/* item_red ๋ฒ”์œ„ ์ง€์ •ํ•˜๊ธฐ, ์•„๋ž˜ ๋‘ ์ฝ”๋“œ๋Š” ๋ชจ๋‘ ๋™์ผํ•œ ์˜์—ญ์„ ์ง€์ •ํ•œ๋‹ค */
.item_red {
	grid-column: 1/3;
	grid-row: 1/3;
}

.item_red {
	grid-column-start: 1;
	grid-column-end: 3;
	grid-row-start: 1;
	grid-row-end: 3;
}

โœ”๏ธย grid ์ด๋ฆ„์œผ๋กœ ์ •์˜

์—…๋กœ๋“œ์ค‘..

  • grid-template-areas: ๊ฐ ์˜์—ญ( grid area )์— ์ด๋ฆ„์„ ๋ถ™์ด๊ณ  ๊ทธ ์ด๋ฆ„์„ ์ด์šฉํ•˜์—ฌ ๋ฐฐ์น˜
    .grid_container {
    	grid-template-areas: 
    		"a b c"
    		". . ."
    		"d e f";
    }
    
    .title { grid-area: title; } /* title ์•„์ดํ…œ์ด ์ฐจ์ง€ํ•˜๋Š” ์˜์—ญ title ์ด๋ฆ„ ๋ถ™์ด๊ธฐ */

โœ”๏ธย others

  • grid-auto-flow: ์•„์ดํ…œ ์ž๋™ ๋ฐฐ์น˜ ์„ค์ •
  • order: ๊ฐ ์•„์ดํ…œ์˜ ์‹œ๊ฐ์  ๋‚˜์—ด ์ˆœ์„œ ์ง€์ •
  • align-items justify-items place-items: ์•„์ดํ…œ๋“ค ์„ธ๋กœ, ๊ฐ€๋กœ, ์„ธ๋กœ+๊ฐ€๋กœ ์ •๋ ฌ
  • align-content justify-content place-content:์•„์ดํ…œ๊ทธ๋ฃน ์„ธ๋กœ, ๊ฐ€๋กœ, ์„ธ๋กœ+๊ฐ€๋กœ ์ •๋ ฌ
  • align-self justify-self place-self:์•„์ดํ…œ ์„ธ๋กœ, ๊ฐ€๋กœ, ์„ธ๋กœ+๊ฐ€๋กœ ์ •๋ ฌ

โ“position

๐Ÿ’ก HTML ๋ฌธ์„œ ์ƒ์—์„œ ์š”์†Œ๊ฐ€ ๋ฐฐ์น˜๋˜๋Š” ๋ฐฉ์‹ ๊ฒฐ์ • !

  • position ์‚ฌ์šฉ ์‹œ top right bottom left ์†์„ฑ์œผ๋กœ ์œ„์น˜ ์กฐ์ • ๊ฐ€๋Šฅ

โœ”๏ธย position: relative

  • ๊ธฐ์ค€์ด ๋˜๋Š” ์š”์†Œ๋กœ ์ž์‹ ์˜ ์›๋ž˜ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ƒ๋Œ€์  ๋ฐฐ์น˜ํ•จ
  • ์š”์†Œ๋ฅผ ์ด๋™์‹œ์ผœ๋„ ์›๋ž˜ ์ฐจ์ง€ํ•˜๋˜ ๊ณต๊ฐ„์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋จ (๋ ˆ์ด์•„์›ƒ ํ๋ฆ„์— ์˜ํ–ฅ ์—†์Œ)
    • relative๋Š” ์ฃผ๋กœ ์ž์‹ ์š”์†Œ์— position: absolute๋ฅผ ์„ค์ •ํ•  ๋•Œ ์‚ฌ์šฉ

โœ”๏ธย absolute

  • ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด relative absolute fixed ์กฐ์ƒ ์š”์†Œ์— ๋Œ€ํ•ด ์ง€์ •๋œ ๊ฐ’์„ ์ƒ๋Œ€์ ์œผ๋กœ ์ด๋™
  • ex. image carousel ์˜ ํŽ˜์ด์ง€ ๋„˜๊ธฐ๊ธฐ ๋ฒ„ํŠผ ์œ„์น˜ ์กฐ์ • ๋“ฑ

โœ”๏ธย fixed

  • Viewport์— ๋Œ€ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ์ด๋™
  • ์Šคํฌ๋กค๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ํ™”๋ฉด์— ๊ณ ์ •๋œ ์œ„์น˜์— ์š”์†Œ๋ฅผ ๋ฐฐ์น˜
    • ex. ๋„ค๋น„๊ฒŒ์ด์…˜ ๋“ฑ

โœ”๏ธย sticky

  • ์Šคํฌ๋กค ์œ„์น˜์— ๋”ฐ๋ผ ์ƒ๋Œ€์ , ์ ˆ๋Œ€์ ์œผ๋กœ ์ด๋™
  • ํŠน์ • ์Šคํฌ๋กค ์œ„์น˜์— ๋„๋‹ฌํ•˜๋ฉด relative์—์„œ fixed๋กœ ๋ณ€ํ™˜๋จ
    • ์ƒ๋‹จ ๊ณ ์ • ๊ฒ€์ƒ‰์ฐฝ, ์ตœ์ƒ๋‹จ์œผ๋กœ ์ด๋™ ๋ฒ„ํŠผ ๋“ฑ



0๊ฐœ์˜ ๋Œ“๊ธ€