4주차 위치 정렬 - grid 1
2022. 11. 16. 23:06ㆍ배울수록 연봉은 늘어간다./자바스크립트
728x90
- ▲ 위에 보이는 화면처럼 만들어 봅니다.
- 프로그램은 구름 IDE를 사용했습니다.
- 소프트웨어 스택은 HTML , CSS, JS 선택을 했고 프로젝트는 빈 프로젝트로 시작하였습니다.
1. Grid 란?
- 격자 또는 눈금을 뜻합니다.
- 즉 행렬을 통해 요소들을 좀 더 정교하게 배치할 수 있는 레이아웃입니다.
- Grid 내부는 Lines , Track , Area , Gap 이라는 영역으로 이루어져 있습니다.
2. Grid 명칭
1. Lines
- 행과 열의 선들을 모두 Grid Lines라고 합니다.
- Grid Lines에서 행은 Grid column , 열은 Grid row라고 합니다.
2. Track
- 평평한 Grid Line의 두 줄 사이의 공간을 Grid Track라고 부릅니다.
3. Area
- 네 줄의 Grid Line으로 둘러 쌓인 공간을 Grid Area라고 부릅니다.
4.Gap
- Grid Lines의 두께 입니다.
3. Gird의 구성
html |
<div class="grid-container"> <header class="grid-item">Header</header> <section class="grid-item">Section</section> <section class="grid-item">Section</section> <aside class="grid-item">Aside</aside> <footer class="grid-item">Footer</footer> </div> |
- Grid Container와 Grid Items로 구성되어 있습니다.
- Grid Item 들은 Grid Container 안에 담겨 있어야 합니다.
4. Gird container : template
<예제>
html | CSS |
<div class="main"> <!--해당 요소가 Grid Container가 됨--> <header>Header</header> <nav>Navbar</nav> <section>Section</section> <aside>Aside</aside> <footer>Footer</footer> </div> |
.main { display: grid; grid-template-rows: 40px 40px 40px; grid-template-columns: 40px 80px 40px; } |
- Grid Container를 사용하고 싶다면 display를 통해 사용하겠다고 선언해야 합니다.
- 값으로는 grid(block의 특성) or inline-grid(inline의 특성)를 설정할 수 있습니다.
- grid-template-rows와 grid-template-columns 는 Grid Track의 크기를 정의 합니다.
<실행화면>
<검사를 통해 실제 확인한 화면>
반복되는 값을 쉽게 할당하기 위해서는??
- repeat() 함수를 사용하면 복잡한 코드를 쉽고 간단하게 줄일 수 있습니다.
- 첫번째는 반복 횟수를 두번째는 Grid Track의 크기를 넣어 줍니다.
- grid-template-rows: repeat(10, 40px);
- grid-template-columns 도 사용이 가능합니다.
- ▼아래 예시는 동일한 뜻을 가지고 있습니다. 참고해 주세요.
/* 2, 3번째 라인은 동일한 뜻을 지님 */ grid-template-columns: 40px repeate(4, 80px) 40px; grid-template-columns: 40px 80px 80px 80px 80px 40px; /* 6, 7번째 라인은 동일한 뜻을 지님 */ grid-template-columns: repeate(4, 40px 80px); grid-template-columns: 40px 80px 40px 80px 40px 80px 40px 80px; |
fr 이란?
<예시>
css |
.main { display: grid; grid-template-rows: 128px auto 240px; grid-template-columns: 1fr 3fr 1fr; } |
- fr은 fraction의 약자이며 공간의 비율을 나타내는 유연한 단위 입니다.
- ▼아래 그림을 보면 이해가 빠릅니다.
5. grid-template-areas
: 같은 이름끼리 합쳐집니다.
<예제>
html | css |
<div class="main"> <!--해당 요소가 Grid Container가 됨--> <header>Header</header> <nav>Navbar</nav> <section>Section</section> <aside>Aside</aside> <footer>Footer</footer> </div> |
.main { display: grid; grid-template-rows: 128px auto 240px; grid-template-columns: 1fr 3fr 1fr; grid-template-areas: "hd hd hd" "nav content ad" "ft ft ft"; } header,nav,section,aside,footer { border: 4px solid; padding: 8px; margin: 2px; text-align: center; } header { grid-area: hd; border-color: purple; } nav { grid-area: nav; border-color: blue; } section { grid-area: content; border-color: yellow; } aside { grid-area: ad; border-color: red; } footer { grid-area: ft; border-color: green; } |
<검사>
위에 검사 영역을 보면 Gird container : template 에서 나누었던 영역은 그대로 유지되고 있는 것을 확인할 수 있습니다.
단축 프로퍼티
css | |
1 | .main { display: grid; grid-template: "hd hd hd" 128px "nav content ad" auto "ft ft ft" 240px / 1fr 3fr 1fr; } |
2 | .main { display: grid; grid-template-rows: 128px auto 240px; grid-template-columns: 1fr 3fr 1fr; grid-template-areas: "hd hd hd" "nav content ad" "ft ft ft"; } |
해당 코드는 단축 코드로 위에 있는 코드와 동일 합니다.
5. grid-gap
:행과 열 사이의 간격을 조정합니다.
html | css |
<div class="main"> <!--해당 요소가 Grid Container가 됨--> <header>Header</header> <nav>Navbar</nav> <section>Section</section> <aside>Aside</aside> <footer>Footer</footer> </div> |
.main { display: grid; grid-template: "hd hd hd" 128px "nav content ad" auto "ft ft ft" 240px / 1fr 3fr 1fr; grid-row-gap: 16px; grid-column-gap: 16px; } header,nav,section,aside,footer { border: 4px solid; padding: 8px; text-align: center; } header { grid-area: hd; border-color: purple; } nav { grid-area: nav; border-color: blue; } section { grid-area: content; border-color: yellow; } aside { grid-area: ad; border-color: red; } footer { grid-area: ft; border-color: green; } |
grid-row-gap: 16px;
grid-column-gap: 16px;
=> 이 부분을 0으로 하게 되면 어떠한 변화가 있는지 실행해 보세요.
단축 프로퍼티
css |
grid-row-gap: 16px; grid-column-gap: 16px; /* 위와 아래의 코드는 동일합니다. */ grid-gap: 16px 16px; /* 모두 동일한 코드입니다. */ grid-gap: 16px; |
처음값을 row 두번째 값을 column으로 사용합니다.
6. grid-auto-rows / columns
: Track의 크기를 지정할 수 있는 프로퍼티
<예시>
html | css |
<article class="photos"> <div class="card">1</div> <div class="card">2</div> <div class="card"> Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.</div> <div class="card">4</div> <div class="card">5</div> </article> |
body { background-color: #eee; } .photos { display: grid; grid-gap: 8px; grid-template-columns: repeat(3, 1fr); grid-template-rows: repeat(3, 200px); } .card { background: #fff; box-shadow: 0px 2px 8px rgba(0,0,0, .2); border-radius: 8px; padding: 24px; } |
<실행화면>
- 기본 크기는 200px 이면서 넘치는 내용이 빠져 나가지 않도록 카드의 크기를 자동으로 늘려봅니다.
- minmax(최대값,최소값)라는 함수를 이용해 봅니다.
- grid-auto-rows: minmax(200px, auto); 으로 수정을 합니다.
<실행화면>
7. grid-auto-flow
: Grid가 자동으로 배치되는 방향을 결정합니다.
<예시>
html | css |
<article class="photos"> <div class="card">1</div> <div class="card">2</div> <div class="card">3</div> </article> |
body { background-color: #eee; } .photos { display: grid; grid-gap: 8px; grid-template-columns: repeat(2, 100px); grid-auto-flow: row; } .card { background-color: #fff; box-shadow: 0px 2px 8px rgba(0,0,0, .2); border-radius: 8px; padding: 24px; } .card:nth-child(1) { grid-column-start: 2; } |
<실행화면>
- grid-column-start: 2; = > 이 아이가 2로 설정되어 있기 때문에 카드의 첫번째가 비어 있습니다.
- grid-auto-flow 의 값은 row , column 값을 가지고 있지만 뒤에 dense 가 붙으면 비어있는 공간을 차지 합니다.
- grid-auto-flow: row dense; => 값을 이렇게 바꾸면 어떻게 변하는지 아래에서 확인을 해봅니다.
<실행화면>
Total :
Today :
Yesterday :