<div class="container">
<div class="item A">A</div>
<div class="item B">B</div>
<div class="item C">C</div>
<div class="item D">D</div>
<div class="item E">E</div>
<div class="item F">F</div>
<div class="item G">G</div>
<div class="item H">H</div>
<div class="item I">I</div>
</div>
.container {
diplay: grid;
}
설정해주면 적용 끝😊
.container {
grid-template-columns: 1fr 2fr ;
}
width가 300px 이면 1fr은 100px 2fr은 200px
.container {
grid-template-columns: min-content 1fr;
}
<div class="container">
<div class="item">---내용의 최소 크기---</div>
<!-- ... -->
</div>
.container {
grid-template-columns: max-content 1fr;
}
<div class="container">
<div class="item">---내용의 최대 크기---</div>
<!-- ... -->
</div>
한글을 사용하는 경우 word-break: keep-all;를 설정하면 정상적으로 동작합니다.
.container {
grid-template-columns : 1fr 1fr 1fr; /*열의 배치*/
/*grid-template-columns : 100px 100px 100px;*/
/*grid-template-columns : 1fr 200px 300px;*/
/*grid-template-columns : repeat(3,2fr);*/
/*grid-template-columns : 1fr 200px auto;*/
grid-template-rows : 1fr 1fr 1fr; /*행의 배치*/
/*grid-template-rows : 100px 100px 100px;*/
/*grid-template-rows : 1fr 200px 300px;*/
/*grid-template-rows : repeat(3,2fr);*/
/*grid-template-rows : 1fr 200px auto;*/
}
.container {
grid-template-columns : 1fr 200px 2fr;
}
-> width가 1000px일 때 1000px 에서 200px을 제외한 800px 중 A : C = 1 : 2비율로 레이아웃을 만든다
반복되는 값을 처리해 주는 함수
repeat(3,100px,200px)은 100px 200px 100px 200px 100px 200px과 같다
최솟값과 최댓값을 지정할 수 있는 함수
minmax(200px,auto) -> 최소값: 200px 최대값:auto
grid 내용의 양이 적더라도 200px 밑으로는 내려가지 않고 최대값은 자동적으로 늘어나게 처리함
비슷한 함수로 fit-content가 있음
fit-content(최대크기);
.container {
grid-template-columns: fit-content(100px) fit-content(100px);
}
해석하면
.container {
grid-template-columns: minmax(auto,100px) fit-content(auto,100px);
}
두 속성 모두 레이아웃의 개수를 정하지 않고 설정된 너비 안에서 최대한 셀을 채운다
.container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(20%, auto))
};
.container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(20%, auto))
};
auto-fill과 auto-fit의 차이는 위와 같다
auto-fill은 width:100%일 때 갯수가 모자라면 공간이 남지만
auto-fit은 공간을 무조건 채운다
.container {
row-gap: 10px; /* row의 간격을 10px로 */
column-gap: 10px; /* column의 간격을 10px로 */
gap: 10px 20px /*row-gap:10px ; column-gap:20px*/
}
grid-template-columns와 grid-template-rows로 정의한 레이아웃을 Item이 정의된 레이아웃이 아닌 외부에 배치되었을 때 크기를 조절할 수 있는 속성
위처럼 정의한 열과 행은 3X3 이지만 통제를 벗어난 부분의 Item의 크기를 조정할 수 있다
.container {
grid-auto-columns : minmax(100px,auto);
}
.container {
grid-template-columns: 100px;
grid-auto-columns: 1fr 2fr 3fr;
}
.item:nth-child(1) { grid-column: 2; }
.item:nth-child(2) { grid-column: 3; }
.item:nth-child(3) { grid-column: 4; }
.item:nth-child(4) { grid-column: 5; }
.item:nth-child(5) { grid-column: 6; }
.item:nth-child(6) { grid-column: 7; }
명시한 columns: 100px을 제외하고는 모든 셀을 1:2:3 비율로 레이아웃을 정해준다
grid-column: (grid-column-start) / (grid-column-end)
grid-row: (grid-row-start) / (grid-row-end)
grid-column: 1 / span 2;
grid-column: span 2; //그 자리에서 column 2칸을 점유
.container {
display: grid;
grid-template-rows: repeat(4, 100px);
grid-template-columns: repeat(3, 1fr);
grid-template-areas:
"header header header"
"main main aside"
" . . . " /*.(마침표) 또는 none을 입력해 빈 영역을 정의해 줄 수 있다*/
"footer footer footer";
}
header { grid-area: header; }
main { grid-area: main; }
aside { grid-area: aside; }
footer { grid-area: footer; }
.container{
grid-template: 100px 100px 100px , 100px 100px 100px;
}
.container {
grid-template:
"grid-template-areas" row
/ <grid-template-columns>;
}
예를 들면
.container {
display: grid;
grid-template:
"header header header" 100px
"main main aside" 250px
" . . . "
"footer footer footer" 120px
/ 2fr 150px 1fr;
}
해석하면
.container {
display: grid;
grid-template-rows: grid-template-rows: 100px 250px 120px;
grid-template-columns: 2fr 150px 1fr;
grid-template-areas:
"header header header"
"main main aside"
"footer footer footer";
}
아직 배치하지 않은 Item을 어떤 방식으로 배치할지 정의하는 속성
grid-template-rows/columns와 grid-auto-rows/columns 단축 속성
.container {
grid: grid-template;
/*grid: grid-template-rows / grid-auto-flow grid-auto-columns;*/
/*grid: grid-auto-flow grid-auto-rows / grid-template-columns;*/
}
.container {
grid: 100px 200px / 1fr 2fr;
}
해석하면
.container {
grid-template-rows: 100px 200px;
grid-template-columns: 1fr 2fr;
}
출처:https://heropy.blog/2019/08/17/css-grid/
.item {
grid-area: grid-row-start / grid-column-start / grid-row-end / grid-column-end;
}
예로
.item {
grid-area: 3 / 2 / 5 / -1;
}
해석하면
.item {
grid-row: 3 / 5;
grid-column: span 2 / -1;
}
Grid Item들의 높이를 모두 합한 값이 Grid Contanier의 높이보다 작을 때 Grid Item들 모두를 정렬합니다
출처:https://heropy.blog/2019/08/17/css-grid/
Grid Item들의 너비를 모두 합한 값이 Grid Container의 너비보다 작을 때 Grid 아이템들을 통째로 정렬합니다.
align-content와 justify-content를 같이 쓸 수 있는 단축 속성
.container {
place-content: align-content justify-content;
}
.container {
place-content: center space-around;
/*해석*/
/*align-content: center*/
/*justify-content: space-around*/
}
.container {
place-content: center ;
/*해석*/
/*align-content: center*/
/*justify-content: center*/
}
Grid Items들을 열 축 정렬함
Grid Items의 세로 너비가 자신이 속한 그리드 행 크기보다 작아야함
Grid Items들을 행 축 정렬함
Grid Items의 가로 너비가 자신이 속한 그리드 열 크기보다 작아함
Grid Item의 시각적 나열 순서를 변경할 수 있음
낮은 숫자일 수록 앞에 배치되며 단순히 시각적인 효과임으로 시각 장애인분들이 사용하는 스크린리더로 화면을 읽을 때, order를 이용해 순서를 바꾼것은 의미가 없음
.item:nth-child(1){
order:4;
}
.item:nth-child(2){
order:2;
}
.item:nth-child(3){
order:3;
}
.item:nth-child(4){
order:1;
}
Z축 정렬해줄 수 있는 속성 숫자가 클 수록 위로 올라옴
.item{
z-index: 1; /*0이 기본값*/
}