반응형

📝display:grid, grid-template-columns, grid-template-rows, gaps

<div class="father">
  <div class="child">1</div>
  <div class="child">2</div>
  <div class="child">3</div>
  <div class="child">4</div>
</div>

.father {
    display: grid;
    grid-template-columns: 100px 200px 50px;
    grid-template-rows: 200px 100px;
    row-gap: 10px;
    column-gap: 20px;
}

.child {
    background-color: tomato;
    display: flex;
    color: white;
    font-size: 28px;
    align-items: center;
    justify-content: center;
}

Flexbox의 경우 1차원에 대한 배치와 정렬이면 Grid의 경우 2차원에 대한 배치와 정렬에 많이 쓰인다.

부모에 display:grid기본적으로 적용시켜야하고 grid-template-columns를 이용해 열의 가로 넓이를 지정하며 grid-template-rows를 이용해 행의 세로 넓이를 지정한다.

gap의 경우는 자식 div의 margin을 의미한다. (row-gap, column-gap으로 개별로 지정도 가능)

 

 

<div class="father">
  <div class="child">1</div>
  <div class="child">2</div>
  <div class="child">3</div>
  <div class="child">4</div>
</div>

.father {
    display: grid;
    grid-template-rows: 1fr 2fr 1fr;
    grid-template-columns: 3fr 1fr;
    // grid-template-columns: repeat(2, 1fr);
    // grid-template-rows: repeat(2, 1fr);
    row-gap: 10px;
    column-gap: 20px;
}

.child {
    background-color: tomato;
    display: flex;
    color: white;
    font-size: 28px;
    align-items: center;
    justify-content: center;
}

만약 비율로 설정이 필요하면 fr로 설정하면 됩니다. 또한 동일한 경우 repeate로 간단하게 표현도 가능합니다.

 

 

📝grid-start, grid-end, grid-column, grid-row

<div class="father">
  <div class="child">1</div>
  <div class="child">2</div>
  <div class="child">3</div>
  <div class="child">4</div>
</div>

.father {
    display: grid;
    grid-template-columns: 100px 200px 50px;
    grid-template-rows: 200px 100px;
    row-gap: 10px;
    column-gap: 20px;
}

.child {
    background-color: tomato;
    display: flex;
    color: white;
    font-size: 28px;
    align-items: center;
    justify-content: center;
}

.child:last-child {
    background-color: turquoise;
    /* grid-column-start: 2;
    grid-column-end: -1; */
    grid-column: 2 / -1;
}

.child:first-child {
    /* grid-row-start: 1;
    grid-row-end: -1; */
    grid-row: 1 / -1;
}

grid-column-start어디서 시작을 의미하고 grid-column-end는 어디까지 차지할지에 대해서 의미합니다. grid-column을 통해 한번에 설정도 가능합니다. (grid-column-start가 2이면 2번째열에서 -1인 마지막열까지 차지하겠다는 의미)

grid-row의 경우는 행에 대해 시작지점과 종료시점을 지정하는 것이 동일합니다

 

📝span

<div class="father">
  <div class="child">1</div>
  <div class="child">2</div>
  <div class="child">3</div>
  <div class="child">4</div>
</div>

.father {
    display: grid;
    grid-template-columns: 100px 200px 50px 50px;
    grid-template-rows: 200px 100px ;
    row-gap: 10px;
    column-gap: 20px;
}

.child {
    background-color: tomato;
    display: flex;
    color: white;
    font-size: 28px;
    align-items: center;
    justify-content: center;
}

.child:last-child {
    background-color: turquoise;
    /* grid-column-start: 2;
    grid-column-end: -1; */
    grid-column: 2 / span 3;
}

.child:first-child {
    /* grid-row-start: 1;
    grid-row-end: -1; */
    grid-row: 1 / -1;
}

spangrid-colum-start로 시작지점을 잡고 종료지점을 정하는게 아닌 몇개까지 차지하겠다라는 걸 표시해줄 수 있습니다. 위 코드를 보면 grid-column의 start는 2번째 열이고 2번째열을 포함한 3개까지 차지하겠다는 의미입니다.

 

📝place-items, place-self

<div class="father">
  <div class="child">1</div>
  <div class="child">2</div>
  <div class="child">3</div>
  <div class="child">4</div>
  <div class="child">5</div>
  <div class="child">6</div>
  <div class="child">7</div>
  <div class="child">8</div>
  <div class="child">9</div>
  <div class="child">10</div>
</div>


.father {
    display: grid;
    gap: 10px;
    min-height: 50vh;
    grid-template-columns: repeat(2, 1fr);
    grid-template-rows: repeat(2, 1fr);
    grid-auto-rows: 1fr;
    grid-auto-columns: 1fr;
    grid-auto-flow: column;
    place-items: end center;
}

.child {
    width: 50px;
    height: 50px;
    background-color: tomato;
    color: white;
    font-size: 28px;
    display: flex;
    justify-content: center;
    align-items: center;
}

.child:nth-child(6) {
    background-color: teal;
    /* align-self: start;
    justify-self: end; */
    place-self: center center;
    grid-column: span 2;
}

place-items의 경우 부모에 적용시키며 전체 grid안에 있는 contents를 정렬을 해줍니다. 앞에 나오는 건 행에 대한 정렬 뒤에 나오는 건 열에 대한 정렬입니다. (end center)

place-self는 부모 전체가 아니라 개별로 자식에 적용시키며 해당 grid의 상하좌우 정렬을 해줍니다.

 

📝justifiy-content, align-content, place-content

<div class="father">
  <div class="child">1</div>
  <div class="child">2</div>
  <div class="child">3</div>
  <div class="child">4</div>
  <div class="child">5</div>
  <div class="child">6</div>
  <div class="child">7</div>
  <div class="child">8</div>
  <div class="child">9</div>
  <div class="child">10</div>
</div>

.father {
    display: grid;
    gap: 10px;
    height: 100vh;
    grid-template-columns: repeat(3, 100px);
    grid-template-rows: repeat(2, 100px);
    background-color: lightblue;
    /*justify-content: center;*/
    /*align-content: center;*/
    place-content: center center;
}

.child {
    background-color: tomato;
    color: white;
    font-size: 28px;
    display: flex;
    justify-content: center;
    align-items: center;
}

place-items, place-self의 경우는 grid안에서의 정렬이지만 flexbox처럼 전체에 대한 정렬의 경우좌우 정렬 justify-content하고 상하 정렬 align-content를 사용합니다. (place-content로 축약해서 상하좌우 정렬을 입력할 수 있습니다)

 

📝minmax

<div class="father">
  <div class="child">1fr</div>
  <div class="child">1fr</div>
  <div class="child">1fr</div>
</div>

.father {
    display: grid;
    gap: 10px;
    height: 100vh;
    grid-template-columns: repeat(3, minmax(200px, 400px));
}

.child {
    background-color: tomato;
    color: white;
    font-size: 50px;
    display: flex;
    justify-content: center;
    align-items: center;
}

minmax의 경우 grid 한개당 최소 크기 최대크기를 설정할 수 있습니다

 

 

📝auto-fit, auto-fill (반응형)

<div class="father">
  <div class="child">1fr</div>
  <div class="child">1fr</div>
  <div class="child">1fr</div>
</div>

.father {
    display: grid;
    gap: 10px;
    height: 100vh;
    grid-template-columns: repeat(auto-fill, minmax(200px, 400px));
    /*grid-template-columns: repeat(auto-fit, minmax(200px, 400px));*/
}

.child {
    background-color: tomato;
    color: white;
    font-size: 50px;
    display: flex;
    justify-content: center;
    align-items: center;
}

auto-fit auto-fill

auto-fit의 경우는 HTML에 있는 자식 개수만큼만 딱 채웁니다.

auto-fill의 경우 HTML에 있는 자식 개수만큼 그리지만 max크기만큼 더 그릴 수 있을 때는 그만큼 자리를 차지합니다.

 

 

공통점으로 둘다 화면크기를 줄였을 때 max크기에 맞춰서 반응형처럼 바뀝니다.

 

 

반응형