Programing

CSS 그리드 래핑?

lottogame 2020. 10. 19. 07:34
반응형

CSS 그리드 래핑?


미디어 쿼리를 사용하지 않고 CSS 그리드 랩을 만들 수 있습니까?

제 경우에는 그리드에 배치하려는 비 결정적 항목 수가 있고 해당 그리드가 래핑되기를 원합니다. flexbox를 사용하면 안정적으로 공간을 잘 배치 할 수 없습니다. 많은 미디어 쿼리도 피하고 싶습니다.

다음은 몇 가지 샘플 코드입니다 .

.grid {
  display: grid;
  grid-gap: 10px;
  grid-auto-flow: column;
  grid-template-columns: 186px 186px 186px 186px;
}

.grid > * {
  background-color: green;
  height: 200px;
}
<div class="grid">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
</div>

그리고 여기에 gif가 있습니다.

내가보고있는 것의 gif

부수적으로, 내가 함께있는 모든 항목의 너비를 지정하는 것을 피할 수있는 방법을 누구든지 말해 줄 수 있다면 grid-template-columns좋을 것입니다. 나는 아이들이 자신의 너비를 지정하는 것을 선호합니다.


auto-fill또는 중 하나를 표기법 auto-fit의 반복 번호로 사용하십시오 repeat().

repeat( [ <positive-integer> | auto-fill | auto-fit ] , <track-list> )

auto-fill

경우 auto-fill반복 횟수로 주어진 그리드 컨테이너 관련 축에 일정한 크기 또는 최대 크기를 갖는 경우, 다음 반복 수는 그리드는 그리드 컨테이너 오버플로가 발생하지 않는 최대의 가능한 양의 정수이다.

.grid {
  display: grid;
  grid-gap: 10px;
  grid-template-columns: repeat(auto-fill, 186px);
}

.grid>* {
  background-color: green;
  height: 200px;
}
<div class="grid">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
</div>

그리드는 컨테이너를 넘치지 않고 가능한 한 많은 트랙을 반복합니다.

repeat () 표기법의 반복 번호로 자동 채우기 사용

이 경우 위의 예 (이미지 참조) 에서 5 개의 트랙 만 넘치지 않고 그리드 컨테이너에 들어갈 수 있습니다. 그리드에는 4 개의 항목 만 있으므로 나머지 공간에 다섯 번째 항목이 빈 트랙으로 생성됩니다.

나머지 공간 인 트랙 # 6은 명시 적 그리드를 끝냅니다. 이것은 다른 트랙을 배치하기에 충분한 공간이 없음을 의미합니다.


auto-fit

auto-fit키워드와 동일하게 동작 auto-fill후 것을 제외하고, 그리드 항목 배치 알고리즘 나머지 공간 내에서 빈 트랙에 붕괴 될 것이다 0.

.grid {
  display: grid;
  grid-gap: 10px;
  grid-template-columns: repeat(auto-fit, 186px);
}

.grid>* {
  background-color: green;
  height: 200px;
}
<div class="grid">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
</div>

그리드는 컨테이너를 넘치지 않고 가능한 한 많은 트랙을 반복하지만 빈 트랙은로 축소됩니다 0.

접힌 트랙은 고정 트랙 크기 조정 기능이있는 것으로 처리됩니다 0px.

repeat () 표기법의 반복 번호로 자동 맞춤 사용

auto-fill이미지 예제 와 달리 빈 다섯 번째 트랙이 축소되어 네 번째 항목 바로 뒤에 명시 적 격자가 끝납니다.


auto-fill vs auto-fit

이 둘의 차이점은 minmax()함수를 사용할 때 눈에 .니다.

그리드 컨테이너에서 남은 공간의 일부 더하기 minmax(186px, 1fr)위해 항목 범위를 지정하는 데 사용 합니다 .186px186px

를 사용할 때 auto-fill빈 트랙을 배치 할 공간이 없으면 항목이 커집니다.

.grid {
  display: grid;
  grid-gap: 10px;
  grid-template-columns: repeat(auto-fill, minmax(186px, 1fr));
}

.grid>* {
  background-color: green;
  height: 200px;
}
<div class="grid">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
</div>

를 사용하면 auto-fit모든 빈 트랙이로 축소되므로 항목이 나머지 공간을 채울 수 0px있습니다.

.grid {
  display: grid;
  grid-gap: 10px;
  grid-template-columns: repeat(auto-fit, minmax(186px, 1fr));
}

.grid>* {
  background-color: green;
  height: 200px;
}
<div class="grid">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
</div>


운동장:

CodePen

자동 채우기 트랙 검사

자동 채우기


자동 맞춤 트랙 검사

자동 맞춤


함수 내부 auto-fit또는 중 하나를 원합니다 .auto-fillrepeat()

grid-template-columns: repeat(auto-fit, 186px);

minmax()유연한 열 크기를 허용하기 위해 a 사용하는 경우 두 가지의 차이점이 분명해집니다 .

grid-template-columns: repeat(auto-fill, minmax(186px, 1fr));

이를 통해 186px에서 컨테이너의 전체 너비에 걸쳐 펼쳐지는 동일한 너비의 열에 이르기까지 열의 크기를 조정할 수 있습니다. auto-fill너비에 맞는만큼의 열을 생성합니다. 예를 들어, 그리드 항목이 4 개만 있더라도 5 개의 열이 맞으면 다섯 번째 빈 열이 있습니다.

여기에 이미지 설명 입력

Using auto-fit instead will prevent empty columns, stretching yours further if necessary:

여기에 이미지 설명 입력


are you looking for auto-fill?

grid-template-columns: repeat(auto-fill, 186px);

Demo: http://codepen.io/alanbuchanan/pen/wJRMox

To use up the available space more efficiently, you could use minmax, and pass in auto as the second argument:

grid-template-columns: repeat(auto-fill, minmax(186px, auto));

Demo: http://codepen.io/alanbuchanan/pen/jBXWLR

If you don't want the empty columns, you could use auto-fit instead of auto-fill.


I had a similar situation. On top of what you did, I wanted to center my columns in the container while not allowing empty columns to for them left or right:

.grid { 
    display: grid;
    grid-gap: 10px;
    justify-content: center;
    grid-template-columns: repeat(auto-fit, minmax(200px, auto));
}

Here's my attempt. Excuse the fluff, I was feeling extra creative.

내 방법은 고정 치수를div 가진 부모 입니다 . 나머지는 그에 따라 div 내부의 콘텐츠를 맞추는 것입니다.

이렇게하면 종횡비에 관계없이 이미지 크기다시 조정 됩니다 . 없을 것 더 열심히 자르기 중 하나.

body {
        background: #131418;
	text-align: center;
	margin: 0 auto;
}

.my-image-parent {
	display: inline-block;
	width: 300px;
	height: 300px;
	line-height: 300px; /* should match your div height */
	text-align: center;
	font-size: 0;
}

/* Start demonstration background fluff */
    .bg1 {background: url(https://unsplash.it/801/799);}
    .bg2 {background: url(https://unsplash.it/799/800);}
    .bg3 {background: url(https://unsplash.it/800/799);}
    .bg4 {background: url(https://unsplash.it/801/801);}
    .bg5 {background: url(https://unsplash.it/802/800);}
    .bg6 {background: url(https://unsplash.it/800/802);}
    .bg7 {background: url(https://unsplash.it/802/802);}
    .bg8 {background: url(https://unsplash.it/803/800);}
    .bg9 {background: url(https://unsplash.it/800/803);}
    .bg10 {background: url(https://unsplash.it/803/803);}
    .bg11 {background: url(https://unsplash.it/803/799);}
    .bg12 {background: url(https://unsplash.it/799/803);}
    .bg13 {background: url(https://unsplash.it/806/799);}
    .bg14 {background: url(https://unsplash.it/805/799);}
    .bg15 {background: url(https://unsplash.it/798/804);}
    .bg16 {background: url(https://unsplash.it/804/799);}
    .bg17 {background: url(https://unsplash.it/804/804);}
    .bg18 {background: url(https://unsplash.it/799/804);}
    .bg19 {background: url(https://unsplash.it/798/803);}
    .bg20 {background: url(https://unsplash.it/803/797);}
/* end demonstration background fluff */

.my-image {
	width: auto;
	height: 100%;
	vertical-align: middle;
	background-size: contain;
	background-position: center;
	background-repeat: no-repeat;
}
<div class="my-image-parent">
 <div class="my-image bg1"></div>
</div>

<div class="my-image-parent">
 <div class="my-image bg2"></div>
</div>

<div class="my-image-parent">
 <div class="my-image bg3"></div>
</div>

<div class="my-image-parent">
 <div class="my-image bg4"></div>
</div>

<div class="my-image-parent">
 <div class="my-image bg5"></div>
</div>

<div class="my-image-parent">
 <div class="my-image bg6"></div>
</div>

<div class="my-image-parent">
 <div class="my-image bg7"></div>
</div>

<div class="my-image-parent">
 <div class="my-image bg8"></div>
</div>

<div class="my-image-parent">
 <div class="my-image bg9"></div>
</div>

<div class="my-image-parent">
 <div class="my-image bg10"></div>
</div>

<div class="my-image-parent">
 <div class="my-image bg11"></div>
</div>

<div class="my-image-parent">
 <div class="my-image bg12"></div>
</div>

<div class="my-image-parent">
 <div class="my-image bg13"></div>
</div>

<div class="my-image-parent">
 <div class="my-image bg14"></div>
</div>

<div class="my-image-parent">
 <div class="my-image bg15"></div>
</div>

<div class="my-image-parent">
 <div class="my-image bg16"></div>
</div>

<div class="my-image-parent">
 <div class="my-image bg17"></div>
</div>

<div class="my-image-parent">
 <div class="my-image bg18"></div>
</div>

<div class="my-image-parent">
 <div class="my-image bg19"></div>
</div>

<div class="my-image-parent">
 <div class="my-image bg20"></div>
</div>

참고 URL : https://stackoverflow.com/questions/43129360/css-grid-wrapping

반응형