본문으둜 κ±΄λ„ˆλ›°κΈ°

CSS 속성 17. grid

❗️ ν•΄λ‹Ή 글은 패슀트캠퍼슀 - ν”„λ‘ νŠΈμ—”λ“œ 개발 κ°•μ˜μ—μ„œ HTML & CSS, SASS(SCSS) Part의 λ°•μ˜μ›… κ°•μ‚¬λ‹˜μ˜ κ°•μ˜μžλ£Œλ₯Ό μ •λ¦¬ν•œ κ²ƒμž…λ‹ˆλ‹€.

CSS grid (κ·Έλ¦¬λ“œ)λŠ” 2차원(ν–‰κ³Ό μ—΄)의 λ ˆμ΄μ•„μ›ƒ μ‹œμŠ€ν…œμ„ μ œκ³΅ν•œλ‹€.

flexible box λŠ” 비ꡐ적 λ‹¨μˆœν•œ 1차원 λ ˆμ΄μ•„μ›ƒμ„ μœ„ν•˜μ—¬ μ‚¬μš©λ˜κ³ , μ’€ 더 λ³΅μž‘ν•œλ ˆμ΄μ•„μ›ƒμ„ μœ„ν•΄μ„œλŠ” grid λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

πŸ’‘ CSS grid λŠ” μ˜ˆμ „λΆ€ν„° ν•΅(Hack)으둜 뢈린 λ‹€μ–‘ν•œ λ ˆμ΄μ•„μ›ƒ λŒ€μ²΄ 방식듀을 ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ§„ νŠΉλ³„ν•œ CSS λͺ¨λ“ˆμ΄λ‹€.


CSS Grid#

☝️ grid 의 효율적인 ν•™μŠ΅μ„ μœ„ν•΄μ„œλŠ” νŒŒμ΄μ–΄ν­μŠ€ λΈŒλΌμš°μ €κ°€ μ’‹λ‹€.

grid 도 flex 와 λ§ˆμ°¬κ°€μ§€λ‘œ container 와 item μ΄λΌλŠ” 두 가지 κ°œλ…μœΌλ‘œ λ‚˜λ‰œλ‹€. container λŠ” items λ₯Ό κ°μ‹ΈλŠ” λΆ€λͺ¨ μš”μ†Œμ΄κ³  κ·Έ μ•ˆμ— 각 item 을 λ°°μΉ˜ν• μˆ˜ μžˆλ‹€.


grid container#

속성#

μ†μ„±μ˜λ―Έ
displaygrid container λ₯Ό μ •μ˜
grid-template-rowsλͺ…μ‹œμ  ν–‰(Track)의 크기λ₯Ό μ •μ˜
grid-template-columnsλͺ…μ‹œμ  μ—΄(Track)의 크기λ₯Ό μ •μ˜
grid-template-areasμ˜μ—­(Area) 이름을 μ°Έμ‘°ν•΄ ν…œν”Œλ¦Ώ 생성
grid-templategrid-template-xxx 의 단좕 속성
row-gap(grid-row-gap)ν–‰κ³Ό ν–‰ μ‚¬μ΄μ˜ 간격(Line)을 μ •μ˜
column-gap(grid-column-gap)μ—΄κ³Ό μ—΄ μ‚¬μ΄μ˜ 간격(Line)을 μ •μ˜
gap(grid-gap)xxx-gap 의 단좕 속성
grid-auto-rowsμ•”μ‹œμ μΈ ν–‰(Track)의 크기λ₯Ό μ •μ˜
grid-auto-columnsμ•”μ‹œμ μΈ μ—΄(Track)의 크기λ₯Ό μ •μ˜
grid-auto-flowμžλ™ 배치 μ•Œκ³ λ¦¬μ¦˜ 방식을 μ •μ˜
gridgrid-template-xxx 와 grid-auto-xxx 의 단좕 속성
align-contentκ·Έλ¦¬λ“œ μ½˜ν…μΈ (Grid Contents)λ₯Ό 수직(μ—΄ μΆ•) μ •λ ¬
justify-contentκ·Έλ¦¬λ“œ μ½˜ν…μΈ (Grid Contents)λ₯Ό μˆ˜ν‰(ν–‰ μΆ•) μ •λ ¬
place-contentalign-content 와 justify-content 의 단좕 속성
align-itemsκ·Έλ¦¬λ“œ μ•„μ΄ν…œ(item)듀을 수직(μ—΄ μΆ•) μ •λ ¬
justify-itemsκ·Έλ¦¬λ“œ μ•„μ΄ν…œ(item)듀을 μˆ˜ν‰(ν–‰ μΆ•) μ •λ ¬
place-itemsalign-items 와 justify-items 의 단좕 속성

display#

display μ†μ„±μœΌλ‘œ grid container λ₯Ό μ •μ˜ν•œλ‹€.

μ •μ˜λœ μ»¨ν…Œμ΄λ„ˆμ˜ μžμ‹ μš”μ†Œλ“€μ€ μžλ™μœΌλ‘œ grid item 둜 μ •μ˜λœλ‹€.


속성 κ°’#

κ°’μ˜λ―Έ
gridblock νŠΉμ„±μ˜ grid container λ₯Ό μ •μ˜
inline-gridinline νŠΉμ„±μ˜ grid container λ₯Ό μ •μ˜

☝️ flex , inline-flex 와 λ§ˆμ°¬κ°€μ§€λ‘œ gird container 의 μŒ“μ΄λŠ” 방식을 μ •μ˜ν•˜λ©°, 내뢀에 μŒ“μ΄λŠ” 방식은 λ‘˜μ΄ μ™„μ „νžˆ κ°™λ‹€.


grid-template-rows , grid-template-columns#

λͺ…μ‹œμ  ν–‰, μ—΄(Track)의 크기λ₯Ό μ •μ˜

λ™μ‹œμ— 라인(Line)의 이름도 μ •μ˜ν•  수 있고, fr (fraction, 곡간 λΉ„μœ¨) λ‹¨μœ„λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.


μ‚¬μš©λ²•#

grid-template-rows: 1행크기 2행크기 ...;grid-template-rows: [선이름] 1행크기 [선이름] 2행크기 [선이름] ...;grid-template-columns: 1열크기 2열크기 ...;grid-template-columns: [선이름] 1열크기 [선이름] 2열크기 [선이름] ...;
/* 각 ν–‰κ³Ό μ—΄μ˜ 크기λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. */.container {grid-template-rows: 100px 200px;grid-template-columns: 100px 200px;}/* λ™μ‹œμ— 각 라인의 이름도 μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. */.container {grid-template-rows: [first] 100px [second] 200px [third];grid-template-columns: [first] 100px [second] 200px [third];}/* 라인에 μ€‘λ³΅λœ 이름을 지정할 수 μžˆμŠ΅λ‹ˆλ‹€. */.container {grid-template-rows: [row1-start] 100px [row1-end row2-start] 200px [row2-end];grid-template-columns: [col1-start] 100px [col1-end col2-start] 200px [col2-end];}

κ·Έλ¦¬λ“œ 라인에 이름 짓기 - Layout using named grid lines


예제#

<div class="container"><div class="item">1</div><div class="item">2</div><div class="item">3</div><div class="item">4</div><div class="item">5</div><div class="item">6</div></div>
.container {display: grid;grid-template-rows: 100px 100px;grid-template-columns: repeat(3, 1fr);border: 4px solid lightgray;}.item {border: 2px dashed red;}

☝️ px λ‹¨μœ„λ‘œ 값을 μž…λ ₯ν•  μˆ˜λ„ μžˆμ§€λ§Œ fr λ‹¨μœ„λ₯Ό μž…λ ₯ν•˜λ©΄ container 의 λ„ˆλΉ„κ°€ κ°€λ³€ν•  λ•Œ ν–‰, μ—΄μ˜ 크기가 κ°€λ³€ν•˜κ²Œ λœλ‹€.✌️ repeat() ν•¨μˆ˜λŠ” 2번째 인수λ₯Ό 1번째 인수만큼 λ°˜λ³΅ν•œλ‹€.


grid-template-areas#

μ§€μ •λœ κ·Έλ¦¬λ“œ μ˜μ—­ 이름( grid-area )을 μ°Έμ‘°ν•΄ κ·Έλ¦¬λ“œ ν…œν”Œλ¦Ώμ„ 생성

☝️ grid-area λŠ” grid container κ°€ μ•„λ‹Œ grid item 에 μ μš©ν•˜λŠ” 속성이닀.


예제#

<div class="container"><div class="item">Header</div><div class="item">Main</div><div class="item">Aside</div><div class="item">Footer</div></div>
.container {width: 600px;display: grid;grid-template-rows: repeat(3, 100px);grid-template-columns: repeat(3, 1fr);grid-template-areas:"header header header""main main aside""footer footer footer";}.item {border: 10px solid red;}.item:nth-child(1) {grid-area: header;}.item:nth-child(2) {grid-area: main;}.item:nth-child(3) {grid-area: aside;}.item:nth-child(4) {grid-area: footer;}

2020-02-03-css-속성-17-grid-image-0

grid-template-areas-1

☝️ . (λ§ˆμΉ¨ν‘œ)λ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜ λͺ…μ‹œμ μœΌλ‘œ none 을 μž…λ ₯ν•΄ 빈 μ˜μ—­μ„ μ •μ˜ν•  수 μžˆλ‹€.


grid-template#

grid-template-rows , grid-template-columns , grid-template-areas 의 단좕속성


μ‚¬μš©λ²•#

.container {grid-template: <grid-template-rows> / <grid-template-columns>;grid-template: <grid-template-areas>;}

λ˜λŠ”

.container {grid-template:[1ν–‰μ‹œμž‘μ„ μ΄λ¦„] "AREAS" ν–‰λ„ˆλΉ„ [1행끝선이름][2ν–‰μ‹œμž‘μ„ μ΄λ¦„] "AREAS" ν–‰λ„ˆλΉ„ [2행끝선이름]/ <grid-template-columns>;}

예제#

<div class="container"><header>HEADER</header><main>MAIN</main><aside>ASIDE</aside><footer>FOOTER</footer></div>
.container {display: grid;grid-template:"header header header" 80px"main main aside" 350px"footer footer footer" 130px/ 2fr 100px 1fr;}.container > * {border: 10px solid red;}header { grid-area: header; }main   { grid-area: main; }aside  { grid-area: aside; }footer { grid-area: footer; }

row-gap(grid-row-gap) , column-gap(grid-column-gap) , gap(grid-gap)#

각 ν–‰κ³Ό ν–‰ 사이, μ—΄κ³Ό μ—΄ μ‚¬μ΄μ˜ 간격(Gutter)을 지정

더 λͺ…ν™•ν•˜κ²Œ κ·Έλ¦¬λ“œ μ„ (Grid Line)의 크기λ₯Ό 지정

gap 은 row-gap κ³Ό column-gap 의 단좕 속성이닀.


μ‚¬μš©λ²•#

.container {row-gap: 크기;column-gap: 크기;gap: <grid-row-gap> <grid-column-gap>;}
.container {display: grid;grid-template-rows: repeat(2, 150px);grid-template-columns: repeat(3, 1fr);gap: 20px 10px;}/* ν•˜λ‚˜μ˜ κ°’μœΌλ‘œ 톡일할 수 μžˆμŠ΅λ‹ˆλ‹€. */.container {gap: 10px;  /* row-gap: 10px; + column-gap: 10px; */}/* ν•˜λ‚˜μ˜ κ°’λ§Œ μ μš©ν•˜κ³ μž ν•œλ‹€λ©΄ λ‹€μŒκ³Ό 같이 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. */.container {gap: 10px 0; /* row-gap */gap: 0 10px; /* column-gap */}

☝️ 접두사 grid- λŠ” 더 이상 μ‚¬μš©λ˜μ§€ μ•Šμ§€λ§Œ, 일뢀 λ²„μ „μ˜ λΈŒλΌμš°μ € 지원을 μœ„ν•΄μ ‘λ‘μ‚¬μ˜ μ‚¬μš©μ„ κ³ λ €ν•  수 μžˆλ‹€.


grid-auto-rows , grid-auto-columns#

μ•”μ‹œμ  ν–‰, μ—΄(Track)의 크기λ₯Ό μ •μ˜

item 이 grid-template-rows λ‚˜ grid-template-columns 둜 μ •μ˜ν•œ λͺ…μ‹œμ  ν–‰, μ—΄ 외뢀에 λ°°μΉ˜λ˜λŠ” 경우 μ•”μ‹œμ  ν–‰, μ—΄μ˜ 크기가 μ μš©λœλ‹€.


예제#

<div class="container"><div class="item">1</div><div class="item">2</div><div class="item">3</div><div class="item">4</div><div class="item">5</div><div class="item">6</div></div>
.container {width: 600px;display: grid;grid-template-rows: repeat(2, 100px);  /* λͺ…μ‹œμ  ν–‰ */grid-template-columns: repeat(3, 1fr);  /* λͺ…μ‹œμ  μ—΄ */grid-auto-rows: 100px;  /* μ•”μ‹œμ  ν–‰ */grid-auto-columns: 100px;  /* μ•”μ‹œμ  μ—΄ */}.item {border: 10px solid red;}.item:nth-child(1) {grid-column: 1 / 3;}.item:nth-child(2) {grid-column: 3 / 5;}.item:nth-child(3) {grid-column: span 2;}.item:nth-child(4) {grid-row: 5 / 7;grid-column: 6 / 7;}

☝️ μ•”μ‹œμ  크기가 적용된 ν–‰κ³Ό 열은 μ–‘μˆ˜ 라인 번호만 μ‚¬μš©ν•  수 있고, μŒμˆ˜λŠ” μ‚¬μš©ν•  수 μ—†λ‹€.


grid-auto-flow#

λ°°μΉ˜ν•˜μ§€ μ•Šμ€ item 을 μ–΄λ–€ λ°©μ‹μ˜ β€™μžλ™ 배치 μ•Œκ³ λ¦¬μ¦˜β€™μœΌλ‘œ μ²˜λ¦¬ν• μ§€ μ •μ˜

λ°°μΉ˜ν•œ item 은 grid-area (μ΄ν•˜ κ°œλ³„ 속성 포함)λ₯Ό μ‚¬μš©ν•œ item


속성값#

κ°’μ˜λ―ΈκΈ°λ³Έκ°’
row각 ν–‰ 좕을 따라 μ°¨λ‘€λ‘œ 배치row
column각 μ—΄ 좕을 따라 μ°¨λ‘€λ‘œ 배치
row dense(dense)각 ν–‰ 좕을 따라 μ°¨λ‘€λ‘œ 배치, 빈 μ˜μ—­ 메움!
column dense각 μ—΄ 좕을 따라 μ°¨λ‘€λ‘œ 배치, 빈 μ˜μ—­ 메움!

2020-02-03-css-속성-17-grid-image-1

grid-auto-flow-1

2020-02-03-css-속성-17-grid-image-2

grid-auto-flow-2


예제#

<div class="container"><div class="item">1</div><div class="item">2</div><div class="item">3</div><div class="item">4</div></div>
.container {width: 600px;display: grid;grid-template-rows: repeat(3, 100px);grid-template-columns: repeat(3, 1fr);grid-auto-flow: column;}.item {border: 10px solid red;}.item:nth-child(1) {grid-column: span 2;}.item:nth-child(2) {grid-column: -1 / -3;}

grid#

grid-template-xxx 와 grid-auto-xxx 의 단좕 속성


μ‚¬μš©λ²•#

.container {grid: <grid-template>;grid: <grid-template-rows> / <grid-auto-flow> <grid-auto-columns>;grid: <grid-auto-flow> <grid-auto-rows> / <grid-template-columns>;}
  1. grid-template-rows & grid-template-columns μ„€μ •

  2. grid-template-rows & grid-auto-flow: column; & grid-auto-columns μ„€μ •

  3. grid-auto-flow: row; & grid-auto-rows & grid-template-columns μ„€μ •

  4. grid-template μ„€μ •

☝️ grid-auto-flow λ₯Ό μž‘μ„±ν•  λ•ŒλŠ” auto-flow ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ”λ°, / 둜 ꡬ뢄해 μž‘μ„±ν•˜λŠ” μœ„μΉ˜κ°€ 곧 row , column 값을 μ˜λ―Έν•œλ‹€. dense 값은 auto-flow 뒀에 λΆ™μ—¬μ£Όλ©΄ λœλ‹€.


align-content#

κ·Έλ¦¬λ“œ μ½˜ν…μΈ (contents)λ₯Ό 수직(μ—΄ μΆ•) μ •λ ¬ν•œλ‹€.

κ·Έλ¦¬λ“œ μ½˜ν…μΈ μ˜ μ„Έλ‘œ λ„ˆλΉ„κ°€ κ·Έλ¦¬λ“œ container 보닀 μž‘μ•„μ•Ό ν•œλ‹€.


속성 κ°’#

κ°’μ˜λ―ΈκΈ°λ³Έκ°’
normalstretch 와 κ°™λ‹€normal
startμ‹œμž‘μ (μœ„μͺ½) μ •λ ¬
center수직 κ°€μš΄λ° μ •λ ¬
end끝점(μ•„λž˜μͺ½) μ •λ ¬
space-around각 ν–‰ μœ„μ•„λž˜μ— 여백을 κ³ λ₯΄κ²Œ μ •λ ¬
space-between첫 행은 μ‹œμž‘μ μ—, 끝 행은 끝점에 μ •λ ¬λ˜κ³  λ‚˜λ¨Έμ§€ μ—¬λ°±μœΌλ‘œ κ³ λ₯΄κ²Œ μ •λ ¬
space-evenlyλͺ¨λ“  여백을 κ³ λ₯΄κ²Œ μ •λ ¬
stretchμ—΄ 좕을 μ±„μš°κΈ° μœ„ν•΄ κ·Έλ¦¬λ“œ μ½˜ν…μΈ λ₯Ό 늘림

2020-02-03-css-속성-17-grid-image-3

align-content


justify-content#

κ·Έλ¦¬λ“œ μ½˜ν…μΈ (contents)λ₯Ό μˆ˜ν‰(ν–‰ μΆ•) μ •λ ¬ν•œλ‹€.

κ·Έλ¦¬λ“œ μ½˜ν…μΈ μ˜ κ°€λ‘œ λ„ˆλΉ„κ°€ κ·Έλ¦¬λ“œ container 보닀 μž‘μ•„μ•Ό ν•œλ‹€.


속성 κ°’#

κ°’μ˜λ―ΈκΈ°λ³Έκ°’
normalstretch와 κ°™λ‹€normal
startμ‹œμž‘μ (μ™Όμͺ½) μ •λ ¬
centerμˆ˜ν‰ κ°€μš΄λ° μ •λ ¬
end끝점(였λ₯Έμͺ½) μ •λ ¬
space-around각 μ—΄ μ’Œμš°μ— 여백을 κ³ λ₯΄κ²Œ μ •λ ¬
space-between첫 열은 μ‹œμž‘μ μ—, 끝 열은 끝점에 μ •λ ¬λ˜κ³  λ‚˜λ¨Έμ§€ μ—¬λ°±μœΌλ‘œ κ³ λ₯΄κ²Œ μ •λ ¬
space-evenlyλͺ¨λ“  여백을 κ³ λ₯΄κ²Œ μ •λ ¬
stretchν–‰ 좕을 μ±„μš°κΈ° μœ„ν•΄ κ·Έλ¦¬λ“œ μ½˜ν…μΈ λ₯Ό 늘림

2020-02-03-css-속성-17-grid-image-4

justify-content


align-items#

κ·Έλ¦¬λ“œ Item 듀을 수직(μ—΄ μΆ•) μ •λ ¬ν•œλ‹€. κ·Έλ¦¬λ“œ Item 의 μ„Έλ‘œ λ„ˆλΉ„κ°€ μžμ‹ μ΄ μ†ν•œ κ·Έλ¦¬λ“œ ν–‰(Track)의 크기보닀 μž‘μ•„μ•Ό ν•œλ‹€.

κ°’μ˜λ―ΈκΈ°λ³Έκ°’
normalstretch와 κ°™λ‹€normal
startμ‹œμž‘μ (μœ„μͺ½) μ •λ ¬
center수직 κ°€μš΄λ° μ •λ ¬
end끝점(μ•„λž˜μͺ½) μ •λ ¬
stretchμ—΄ 좕을 μ±„μš°κΈ° μœ„ν•΄ κ·Έλ¦¬λ“œ μ•„μ΄ν…œμ„ 늘림

2020-02-03-css-속성-17-grid-image-5

align-items


justify-items#

κ·Έλ¦¬λ“œ Item 듀을 μˆ˜ν‰(ν–‰ μΆ•) μ •λ ¬ν•œλ‹€. κ·Έλ¦¬λ“œ Item 의 κ°€λ‘œ λ„ˆλΉ„κ°€ μžμ‹ μ΄ μ†ν•œ κ·Έλ¦¬λ“œ μ—΄(Track)의 크기보닀 μž‘μ•„μ•Ό ν•œλ‹€.

κ°’μ˜λ―ΈκΈ°λ³Έκ°’
normalstretch와 κ°™λ‹€.normal
startμ‹œμž‘μ (μ™Όμͺ½) μ •λ ¬
centerμˆ˜ν‰ κ°€μš΄λ° μ •λ ¬
end끝점(였λ₯Έμͺ½) μ •λ ¬
stretchν–‰ 좕을 μ±„μš°κΈ° μœ„ν•΄ κ·Έλ¦¬λ“œ μ•„μ΄ν…œμ„ 늘림

2020-02-03-css-속성-17-grid-image-6

justify-items


grid Item#

속성#

μ†μ„±μ˜λ―Έ
grid-row-startκ·Έλ¦¬λ“œ μ•„μ΄ν…œ(Item)의 ν–‰ μ‹œμž‘ μœ„μΉ˜ 지정
grid-row-endκ·Έλ¦¬λ“œ μ•„μ΄ν…œμ˜ ν–‰ 끝 μœ„μΉ˜ 지정
grid-rowgrid-row-xxx의 단좕 속성(ν–‰ μ‹œμž‘/끝 μœ„μΉ˜)
grid-column-startκ·Έλ¦¬λ“œ μ•„μ΄ν…œμ˜ μ—΄ μ‹œμž‘ μœ„μΉ˜ 지정
grid-column-endκ·Έλ¦¬λ“œ μ•„μ΄ν…œμ˜ μ—΄ 끝 μœ„μΉ˜ 지정
grid-columngrid-column-xxx의 단좕 속성(μ—΄ μ‹œμž‘/끝 μœ„μΉ˜)
grid-areaμ˜μ—­(Area) 이름을 μ„€μ •ν•˜κ±°λ‚˜, grid-row와 grid-column의 단좕 속성
align-self단일 κ·Έλ¦¬λ“œ μ•„μ΄ν…œμ„ 수직(μ—΄ μΆ•) μ •λ ¬
justify-self단일 κ·Έλ¦¬λ“œ μ•„μ΄ν…œμ„ μˆ˜ν‰(ν–‰ μΆ•) μ •λ ¬
place-selfalign-self와 justify-self의 단좕 속성
orderκ·Έλ¦¬λ“œ μ•„μ΄ν…œμ˜ 배치 μˆœμ„œλ₯Ό 지정
z-indexκ·Έλ¦¬λ“œ μ•„μ΄ν…œμ˜ μŒ“μ΄λŠ” μˆœμ„œλ₯Ό 지정

grid-row-start , grid-column-start , grid-row-end , grid-column-end#

item 을 λ°°μΉ˜ν•˜κΈ° μœ„ν•΄ μ„ (Line)의 β€™μ‹œμž‘ μœ„μΉ˜β€™μ™€ ’끝 μœ„μΉ˜β€™λ₯Ό μ§€μ •ν•œλ‹€.

β€™μˆ«μžβ€™λ₯Ό μ§€μ •ν•˜κ±°λ‚˜ ’선 이름’을 μ§€μ •ν•˜κ±°λ‚˜, span ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.


μ‚¬μš©λ²•#

.item {grid-row-start: 1;grid-row-end: 3;grid-column-start: 2;grid-column-end: 4;}

☝️ span ν‚€μ›Œλ“œμ™€ β€™μˆ«μžβ€™λ₯Ό μ‘°ν•©ν•˜λ©΄ β€™μˆ«μžβ€™λ§ŒνΌ 라인을 ν™•μž₯ν•˜λŠ” κ°œλ…μΈλ°, λ§Œμ•½ ’ 끝 μœ„μΉ˜β€™λ₯Ό 지정해놓고, β€™μ‹œμž‘ μœ„μΉ˜β€™μ— span + β€™μˆ«μžβ€™λ₯Ό μ‚¬μš©ν•˜λ©΄ ’끝 μœ„μΉ˜β€™κΉŒμ§€ κ°€κΈ° μ „ span 숫자만큼 ν™•μž₯ν•œλ‹€.


grid-row , grid-column#

item 을 μ›ν•˜λŠ” μœ„μΉ˜μ— 놓기 μœ„ν•΄ μ‚¬μš©ν•˜λŠ” 속성

각각 grid-row-start, grid-row-end ,grid-column-start, grid-column-end μ˜λ‹¨μΆ• 속성이닀.

각 속성을 / 둜 κ΅¬λΆ„ν•œλ‹€.

span ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄ β€™μˆ«μžβ€™λ₯Ό μ§€μ •ν•˜κ±°λ‚˜ ’선 이름’을 지정해 μ‚¬μš©ν•  수 μžˆλ‹€.


μ‚¬μš©λ²•#

.item {grid-row: <grid-row-start> / <grid-row-end>;grid-column: <grid-column-start> / <grid-column-end>;}

grid-area#

grid-row-start , grid-column-start , grid-row-end , grid-column-end μ˜λ‹¨μΆ• μ†μ„±μœΌλ‘œ μ‚¬μš©ν•  μˆ˜λ„ 있고, grid-template-areas κ°€ μ°Έμ‘°ν•  μ˜μ—­(Area) 이름을섀정할 μˆ˜λ„ μžˆλ‹€.

μ˜μ—­ 이름을 μ„€μ •ν•  경우 grid-row , grid-column 의 κ°œλ…μ€ λ¬΄μ‹œλœλ‹€.


μ‚¬μš©λ²•#

.item {grid-area: <grid-row-start> / <grid-column-start> / <grid-row-end> / <grid-column-end>;grid-area: μ˜μ—­μ΄λ¦„;}

☝️ 단좕 μ†μ„±μ˜ μˆœμ„œμ— μœ μ˜ν•œλ‹€.


align-self#

단일 κ·Έλ¦¬λ“œ Item 을 수직(μ—΄ μΆ•) μ •λ ¬. κ·Έλ¦¬λ“œ Item 의 μ„Έλ‘œ λ„ˆλΉ„κ°€ μžμ‹ μ΄ μ†ν•œκ·Έλ¦¬λ“œ ν–‰(Track)의 크기보닀 μž‘μ•„μ•Ό ν•œλ‹€.

κ°’μ˜λ―ΈκΈ°λ³Έκ°’
normalstretch와 κ°™λ‹€normal
startμ‹œμž‘μ (μœ„μͺ½) μ •λ ¬
center수직 κ°€μš΄λ° μ •λ ¬
end끝점(μ•„λž˜μͺ½) μ •λ ¬
stretchμ—΄ 좕을 μ±„μš°κΈ° μœ„ν•΄ κ·Έλ¦¬λ“œ μ•„μ΄ν…œμ„ 늘림

2020-02-03-css-속성-17-grid-image-7

align-self


justify-self#

단일 κ·Έλ¦¬λ“œ Item 을 μˆ˜ν‰(ν–‰ μΆ•) μ •λ ¬ν•œλ‹€. κ·Έλ¦¬λ“œ Item 의 κ°€λ‘œ λ„ˆλΉ„κ°€ μžμ‹ μ΄μ†ν•œ κ·Έλ¦¬λ“œ μ—΄(Track)의 크기보닀 μž‘μ•„μ•Ό ν•œλ‹€.

κ°’μ˜λ―ΈκΈ°λ³Έκ°’
normalstretch와 κ°™λ‹€normal
startμ‹œμž‘μ (μ™Όμͺ½) μ •λ ¬
centerμˆ˜ν‰ κ°€μš΄λ° μ •λ ¬
end끝점(였λ₯Έμͺ½) μ •λ ¬
stretchν–‰ 좕을 μ±„μš°κΈ° μœ„ν•΄ κ·Έλ¦¬λ“œ μ•„μ΄ν…œμ„ 늘림

2020-02-03-css-속성-17-grid-image-8

justify-self


order#

κ·Έλ¦¬λ“œ μ•„μ΄ν…œμ΄ μžλ™ λ°°μΉ˜λ˜λŠ” μˆœμ„œλ₯Ό λ³€κ²½ μˆ«μžκ°€ μž‘μ„μˆ˜λ‘ μ•žμ„œ 배치됨

.container {display: grid;grid-template-rows: repeat(2, 1fr);grid-template-columns: repeat(3, 1fr);}.item:nth-child(1) { order: 1; }.item:nth-child(3) { order: 5; }.item:nth-child(5) { order: -1; }

☝️ μŒμˆ˜λ„ μ‚¬μš© κ°€λŠ₯

2020-02-03-css-속성-17-grid-image-9

order


z-index#

item 이 μŒ“μ΄λŠ” μˆœμ„œλ₯Ό λ³€κ²½

2020-02-03-css-속성-17-grid-image-10

z-index

☝️ position μ—μ„œ 배운 κ°œλ…κ³Ό 동일


Grid function#

repeat#

repeat() ν•¨μˆ˜λŠ” ν–‰/μ—΄(Track)의 크기 μ •μ˜λ₯Ό λ°˜λ³΅ν•œλ‹€.

β€™λ°˜λ³΅λ˜λŠ” νšŸμˆ˜β€™μ™€ ’행/μ—΄μ˜ 크기 μ •μ˜β€™λ₯Ό 인수둜 μ‚¬μš©

grid-template-rows 와 grid-template-columns μ—μ„œ μ‚¬μš©

/* 9컬럼 κ·Έλ¦¬λ“œ */.container {  grid-template-columns: 100px 100px 100px 100px 100px 100px 100px 100px 100px;}.container {  grid-template-columns: repeat(9, 100px);}
.container {grid-template-rows: [row-start] 200px [row-end row-start] 200px [row-end];grid-template-columns: [col-start] 100px [col-end col-start] 100px [col-end col-start] 100px [col-end];}.container {grid-template-rows: repeat(2, [row-start] 200px [row-end]);grid-template-columns: repeat(3, [col-start] 100px [col-end]);}.container {grid-template: repeat(2, [row-start] 200px [row-end]) / repeat(3, [col-start] 100px [col-end]);}
.container {/* 12컬럼 κ·Έλ¦¬λ“œ */grid-template-columns: 1fr 2fr 1fr 2fr 1fr 2fr 1fr 2fr 1fr 2fr 1fr 2fr;}.container {grid-template-columns: repeat(6, 1fr 2fr);}

minmax#

minmax() ν•¨μˆ˜λŠ” ν–‰/μ—΄(Track)의 β€™μ΅œμ†Œ/μ΅œλŒ€ 크기’λ₯Ό μ •μ˜ν•œλ‹€.

첫 번째 μΈμˆ˜λŠ” β€™μ΅œμ†Ÿκ°’β€™μ΄κ³  두 번째 μΈμˆ˜λŠ” β€™μ΅œλŒ“κ°’β€™μ΄λ‹€.

grid-template-row , grid-template-columns , grid-auto-rows 그리고 grid-auto-columns μ—μ„œ μ‚¬μš©ν•œλ‹€.

일반 μš”μ†Œμ— min-width 와 max-width 속성을 λ™μ‹œμ— μ§€μ •ν•˜λŠ” 것과 μœ μ‚¬ν•˜λ‹€.

2020-02-03-css-속성-17-grid-image-11

minmax

☝️ minmax()λ₯Ό 톡해 μ•”μ‹œμ  ν–‰/μ—΄(Track) 크기λ₯Ό μ’€ 더 μœ μ—°ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€. λ‹€μŒ μ˜ˆμ œλŠ” μ•”μ‹œμ  β€˜ν–‰/μ—΄β€™μ˜ 크기λ₯Ό μ΅œμ†Œ β€˜200px/300pxβ€™μœΌλ‘œ μ§€μ •ν•˜μ§€λ§Œ autoλ₯Όν†΅ν•΄ κ·Έλ¦¬λ“œ μ•„μ΄ν…œμ˜ 크기에 따라 ν™•μž₯될 수 μžˆλ‹€.

.container {grid-auto-rows: minmax(200px, auto);grid-auto-columns: minmax(300px, auto);}

fit-content#

fit-content() ν•¨μˆ˜λŠ” ν–‰/μ—΄(Track)의 크기λ₯Ό κ·Έλ¦¬λ“œ Item 이 ν¬ν•¨ν•˜λŠ” λ‚΄μš© (contents) 크기에 λ§žμΆ˜λ‹€. β€˜λ‚΄μš©μ˜ μ΅œλŒ€ 크기’λ₯Ό 인수둜 μ‚¬μš©ν•œλ‹€.

☝️ minmax(auto, max-content) 와 μœ μ‚¬

.container {grid-template-columns: fit-content(300px) fit-content(300px);}

Grid Units#

κ·Έλ¦¬λ“œμ—μ„œ μ‚¬μš©ν•˜λŠ” μ£Όμš” λ‹¨μœ„λ“€μ— λŒ€ν•΄μ„œ μ•Œμ•„λ΄…μ‹œλ‹€.


fr#

fr (fractional unit)은 μ‚¬μš© κ°€λŠ₯ν•œ 곡간에 λŒ€ν•œ λΉ„μœ¨μ„ λ§ν•œλ‹€.


예제#

.container {grid-template-columns: 1fr 2fr 100px 25%;}

2020-02-03-css-속성-17-grid-image-12

fr


min-content#

κ·Έλ¦¬λ“œ Item 이 ν¬ν•¨ν•˜λŠ” λ‚΄μš©(contents)의 μ΅œμ†Œ 크기

<div class="container"><div class="item">Hello HEROPY~</div><!-- ... --></div>
.container {grid-template-columns: min-content 1fr;}

2020-02-03-css-속성-17-grid-image-13

min-content

☝️ ν•œκΈ€μ„ μ‚¬μš©ν•˜λŠ” 경우 container 에 word-break: keep-all; 을 μ„€μ •ν•˜λ©΄ μ •μƒμ μœΌλ‘œ λ™μž‘


max-content#

κ·Έλ¦¬λ“œ Item 이 ν¬ν•¨ν•˜λŠ” λ‚΄μš©(contents)의 μ΅œλŒ€ 크기

<div class="container"><div class="item">Hello HEROPY~</div><!-- ... --></div>
.container {grid-template-columns: max-content 1fr;}

2020-02-03-css-속성-17-grid-image-14

max-content


auto-fill , auto-fit#

ν–‰/μ—΄(Track)의 개수λ₯Ό κ·Έλ¦¬λ“œ container 및 ν–‰/μ—΄ 크기에 맞게 μžλ™μœΌλ‘œ(μ•”μ‹œμ ) μ‘°μ •ν•œλ‹€. repeat() ν•¨μˆ˜μ™€ 같이 μ‚¬μš©ν•˜λ©°, ν–‰/μ—΄κ³Ό Item κ°œμˆ˜κ°€ λͺ…ν™•ν•  ν•„μš”κ°€μ—†κ±°λ‚˜ λͺ…ν™•ν•˜μ§€ μ•Šμ€ 경우 유용.(λ°˜μ‘ν˜• κ·Έλ¦¬λ“œ)

☝️ auto-fill κ³Ό auto-fit 은 κ°„λ‹¨ν•œ 차이점을 μ œμ™Έν•˜λ©΄ λ™μΌν•˜κ²Œ λ™μž‘ν•œλ‹€

λ‹€μŒ 4컬럼 κ·Έλ¦¬λ“œ μ˜ˆμ œμ—μ„œ μ»¨ν…Œμ΄λ„ˆμ˜ 크기가 μ•„μ΄ν…œλ“€μ„ μˆ˜μš©ν•˜κΈ° μΆ©λΆ„ν•˜μ§€ μ•Šμ€κ²½μš° μ•„μ΄ν…œμ€ λ„˜μΉ˜κΈ° μ‹œμž‘ν•œλ‹€.

.container {grid-template-columns: repeat(4, minmax(120px, 1fr));}

2020-02-03-css-속성-17-grid-image-15

auto-fill

λ§Œμ•½ 4컬럼 κ·Έλ¦¬λ“œλ₯Ό 고집할 ν•„μš”κ°€ μ—†λ‹€λ©΄, λ‹€μŒκ³Ό 같이 β€˜λ°˜λ³΅νšŸμˆ˜β€™( repeat() ν•¨μˆ˜μ˜ 첫 번째 인수)λ₯Ό auto-fill μ΄λ‚˜ auto-fit 으둜 μˆ˜μ •ν•  수 μžˆλ‹€. μ΄λŠ” μ»¨ν…Œμ΄λ„ˆμ˜ 크기가 μ•„μ΄ν…œλ“€μ„ μˆ˜μš©ν•˜κΈ° μΆ©λΆ„ν•˜μ§€ μ•Šμ„ 경우 μ•„μ΄ν…œμ„ μžλ™μœΌλ‘œ 쀄 λ°”κΏˆμ²˜λ¦¬ν•˜λ©°, 그에 맞게 μ•”μ‹œμ  ν–‰/열도 μžλ™μœΌλ‘œ μˆ˜μ •ν•œλ‹€.

.container {grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));}

2020-02-03-css-속성-17-grid-image-16

auto-fill


auto-fill 과 auto-fit 의 차이#

auto-fillκ³Ό auto-fit은 차이점은 κ·Έλ¦¬λ“œ μ»¨ν…Œμ΄λ„ˆκ°€ ν•˜λ‚˜μ˜ ν–‰/μ—΄(Track)에 λͺ¨λ“ μ•„μ΄ν…œμ„ μˆ˜μš©ν•˜κ³  λ‚¨λŠ” 곡간이 μžˆμ„ λ•Œ λ°œμƒν•œλ‹€. λ‹€μŒκ³Ό 같이 auto-fill μ€λ‚¨λŠ” 곡간(빈 νŠΈλž™)을 κ·ΈλŒ€λ‘œ μœ μ§€ν•˜κ³ , auto-fit 은 λ‚¨λŠ” 곡간을 μΆ•μ†Œν•œλ‹€.

.container.auto-fill {grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));}.container.auto-fit {grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));}

2020-02-03-css-속성-17-grid-image-17

auto-fill


Reference#

패슀트캠퍼슀 - ν”„λ‘ νŠΈμ—”λ“œ 개발 κ°•μ˜ - HTML & CSS, SASS(SCSS) Part by ParkYoungWoong

CSS Grid μ™„λ²½ κ°€μ΄λ“œ