플렉스 박스
최소한 깨끗하고 효율적인 방식으로 flexbox를 사용하면 동적 석조 레이아웃을 사용할 수 없습니다.
Flexbox는 1 차원 레이아웃 시스템입니다. 즉, 가로 또는 세로 선을 따라 항목을 정렬 할 수 있습니다. 플렉스 항목은 해당 행 또는 열로 제한됩니다.
진정한 그리드 시스템은 2 차원이므로 가로 및 세로 선을 따라 항목을 정렬 할 수 있습니다. 내용 항목은 행과 열에 동시에 걸쳐있을 수 있지만, 플렉스 항목은 할 수 없습니다.
이것이 flexbox의 그리드 구축 용량이 제한된 이유입니다. W3C가 또 다른 CSS3 기술인 Grid Layout을 개발 한 이유이기도합니다 .
row wrap
가있는 플렉스 컨테이너 flex-flow: row wrap
에서 플렉스 항목은 새 행으로 줄 바꿈되어야합니다 .
즉 , 플렉스 항목은 같은 행의 다른 항목으로 줄 바꿈 할 수 없습니다 .
div # 3이 div # 1 아래로 어떻게 래핑되어 새 행을 만드는지 살펴보십시오 . div # 2 아래를 감쌀 수 없습니다 .
결과적으로, 항목이 행에서 가장 키가 크지 않으면 공백이 남아있어보기 흉한 간격을 만듭니다.
column wrap
로 전환 flex-flow: column wrap
하면 그리드와 유사한 레이아웃을 얻을 수 있습니다. 그러나 열 방향 컨테이너에는 바로 다음과 같은 네 가지 잠재적 문제가 있습니다.
- 플렉스 아이템은 수평이 아닌 수직으로 흐릅니다 (이 경우 필요에 따라).
- 컨테이너는 수직이 아닌 수평으로 확장됩니다 (Gateway 레이아웃과 같이).
- 컨테이너의 높이가 고정되어 있어야 항목을 감쌀 위치를 알 수 있습니다.
- 이 글을 쓰는 시점 에서 컨테이너가 추가 열을 수용하도록 확장되지 않는 모든 주요 브라우저에는 결함이 있습니다 .
결과적으로 열 방향 컨테이너는이 경우와 다른 많은 경우에 옵션이 아닙니다.
항목 크기가 정의되지 않은 CSS 그리드
다양한 높이의 컨텐트 항목을 미리 결정할 수있는 경우 그리드 레이아웃은 문제에 대한 완벽한 솔루션 입니다. 다른 모든 요구 사항은 Grid의 용량 내에 있습니다.
주변 항목과의 간격을 메우려면 격자 항목의 너비와 높이를 알아야합니다.
따라서 가로로 흐르는 벽돌 레이아웃을 구축하기 위해 CSS에서 제공해야하는 최고의 CSS 인 Grid는이 경우 부족합니다.
사실, CSS 기술이 자동으로 틈을 메울 수있을 때까지 CSS는 일반적으로 해결책이 없습니다. 이와 같은 것은 아마도 문서를 리플 로우해야 할 것이므로 얼마나 유용하고 효율적인지 잘 모르겠습니다.
스크립트가 필요합니다.
JavaScript 솔루션은 절대 위치 지정을 사용하는 경향이 있으며, 이는 문서 흐름에서 컨텐츠 항목을 제거하여 간격없이 다시 정렬합니다. 다음은 두 가지 예입니다.
항목 크기가 정의 된 CSS 그리드
컨텐트 항목의 너비와 높이가 알려진 레이아웃의 경우 순수 CSS의 가로로 흐르는 벽돌 레이아웃이 있습니다.
grid-container {
display: grid; /* 1 */
grid-auto-rows: 50px; /* 2 */
grid-gap: 10px; /* 3 */
grid-template-columns: repeat(auto-fill, minmax(30%, 1fr)); /* 4 */
}
[short] {
grid-row: span 1; /* 5 */
background-color: green;
}
[tall] {
grid-row: span 2;
background-color: crimson;
}
[taller] {
grid-row: span 3;
background-color: blue;
}
[tallest] {
grid-row: span 4;
background-color: gray;
}
grid-item {
display: flex;
align-items: center;
justify-content: center;
font-size: 1.3em;
font-weight: bold;
color: white;
}
<grid-container>
<grid-item short>01</grid-item>
<grid-item short>02</grid-item>
<grid-item tall>03</grid-item>
<grid-item tall>04</grid-item>
<grid-item short>05</grid-item>
<grid-item taller>06</grid-item>
<grid-item short>07</grid-item>
<grid-item tallest>08</grid-item>
<grid-item tall>09</grid-item>
<grid-item short>10</grid-item>
<grid-item tallest>etc.</grid-item>
<grid-item tall></grid-item>
<grid-item taller></grid-item>
<grid-item short></grid-item>
<grid-item short></grid-item>
<grid-item short></grid-item>
<grid-item short></grid-item>
<grid-item tall></grid-item>
<grid-item short></grid-item>
<grid-item taller></grid-item>
<grid-item short></grid-item>
<grid-item tall></grid-item>
<grid-item short></grid-item>
<grid-item tall></grid-item>
<grid-item short></grid-item>
<grid-item short></grid-item>
<grid-item tallest></grid-item>
<grid-item taller></grid-item>
<grid-item short></grid-item>
<grid-item tallest></grid-item>
<grid-item tall></grid-item>
<grid-item short></grid-item>
</grid-container>
작동 원리
- 블록 레벨 그리드 컨테이너를 설정하십시오. (
inline-grid
다른 옵션이 될 것입니다)
- 이
grid-auto-rows
속성은 자동으로 생성 된 행의 높이를 설정합니다. 이 격자에서 각 행의 키는 50px입니다.
- 이
grid-gap
속성은 grid-column-gap
및 의 약어입니다 grid-row-gap
. 이 규칙 은 모눈 항목 사이에 10px 간격을 설정 합니다. (항목과 컨테이너 사이의 영역에는 적용되지 않습니다.)
이 grid-template-columns
속성은 명시 적으로 정의 된 열의 너비를 설정합니다.
repeat
표기 반복 열 (또는 행)의 패턴을 정의한다.
이 auto-fill
함수는 컨테이너에 오버플로없이 가능한 한 많은 열 (또는 행)을 정렬하도록 그리드에 지시합니다. (이것은 레이아웃을 조정하는 것과 비슷한 동작을 만들 수 있습니다 flex-wrap: wrap
.)
이 minmax()
함수는 각 열 (또는 행)의 최소 및 최대 크기 범위를 설정합니다. 위의 코드에서 각 열의 너비는 컨테이너의 최소 30 %이며 사용 가능한 여유 공간이 최대가됩니다.
fr
부는 그리드 용기 내의 빈 공간의 일부를 나타낸다. flexbox의 flex-grow
속성 과 비슷 합니다.
와 grid-row
그리고 span
우리는 그들이에 걸쳐해야 얼마나 많은 행 그리드 항목을 말하는 것입니다.
CSS 그리드에 대한 브라우저 지원
- Chrome-2017 년 3 월 8 일 (버전 57)부터 완전 지원
- Firefox-2017 년 3 월 6 일 (버전 52) 전체 지원
- Safari-2017 년 3 월 26 일 (버전 10.1)부터 완벽 지원
- Edge-2017 년 10 월 16 일 (버전 16) 기준 완벽 지원
- IE11-현재 사양을 지원하지 않습니다. 더 이상 사용되지 않는 버전 지원
완전한 그림은 다음과 같습니다. http://caniuse.com/#search=grid
Firefox의 멋진 그리드 오버레이 기능
Firefox 개발자 도구에서 그리드 컨테이너를 검사 할 때 CSS 선언에 작은 그리드 아이콘이 있습니다. 클릭하면 페이지에 그리드의 개요가 표시됩니다.
자세한 내용은 https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Examine_grid_layouts