고도가 다른 내용을'좋은 느낌'으로 동적으로 보여주고 싶어요!창고가 없어요!

14637 단어 JavaScriptCSS
안녕, 세상.
Masonry , magic grid , etc....여러분 이 라이브러리 아세요?
이것은 격자 레이아웃을 실현하는 데 사용되는 라이브러리입니다.
일반적으로 CSS의 flexbox와grid를 사용하면 격자 레이아웃을 할 수 있지만, 이 라이브러리들은 높이가 다른 내용을 잘 표시할 수 있다.
예를 들어 Magic Grid는 다음과 같은 유연한 격자 레이아웃을 실현할 수 있다.(이하 Gif는 Magic Grid의 Github 자술을 참조)
Flexbox로 격자 레이아웃을 만들면 높이가 고정되기 때문에 이상한 공백이 생길 수 있습니다. 그럼에도 불구하고 Grid를 사용할 때 높이와 설정을 미리 결정해야 하기 때문에 동적으로 표시해야 한다...그래서 이런 라이브러리를 사용했다. 그러나 이 라이브러리들도 유지보수가 없는 것이 아니라 TypeScript의 type이 없는 것이 아니다. 실현을 보면 left, top,transform에 좌표를 지정하고 즐겁게 사용하고 싶은 라이브러리(개인적인 소감)이다. 그래서 이번에는 라이브러리가 없어서 가능한 한 CSS로만 재현하고 싶어서 투고했습니다. 실제로는 CSS만 할 수 없다. 더 간단하게 할 수 있으면 알려주세요. 최종 품목 See the Pen Card Grid Layout without Library by sa2taka ( @sa2taka )
on CodePen .

설명


위의 동작은 CSS의 Grid를 이용하여 거의 간신히 이루어진다p>

css


css는 별거 아니기 때문에 자세한 설명이 필요 없을 수도 있습니다(js도 그렇습니다)


#grid


우선, 상술한 html에서
<div id="grid">
</div>

의 부분.이grid는 다음 스타일에 적용됩니다p>

#grid {
  display: grid;
  grid-auto-rows: 20px;
  grid-template-columns: repeat(auto-fit, minmax(80px, 1fr));
}

display: grid의 설명은 좋다grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)), 자세한 사항은 MDNgrid-template-columns,repeat에 의뢰한 결과 창의 가로폭에 따라 열 수를'좋은 느낌'에 맞는 녀석으로 만들었다.이것 덕분에 상당히 유연한 동작을 할 수 있다p>
이번에 중요한 것은 grid-auto-rows이다.기준 MDN


grid-auto-rows와grid-auto-columns 속성은 은식 격자에 생성된 궤적 집합의 크기를 정의할 수 있습니다


.명확하고 은밀하게 표현되었지만 동적 내용의 크기에 대해서는 이번에rows이기 때문에 세로 크기를 정의하는 의미로 생각된다p>

보충 정도,grid-template-rows도 가능합니다.좀 다르지만 별로 안 달라 보여요.그렇게 지도 모른다, 아마, 아마...p>

.item


다음은 item반, 이것은


.item {
  min-width: 80px;
  margin-left: 8px;
  margin-top: 8px;
  box-sizing: border-box;

  background: green;
  color: white;
}

별거 아니니까 설명 안 할게요.p>
참고로 box-sizing: border-box; 를 지정하지 않으면 예상대로 표시되지 않습니다.대개p>

JavaScript


다음은 JavaScript의 전체 코드이지만 필요한 것은 addItemp>

let index = 1;
const addItem = () => {
  const height = randomNum();
  const grid = document.querySelector('#grid');
  const item = document.createElement('div');
  item.setAttribute('class', 'item');
  item.setAttribute('style', `height: ${height}px;grid-row: span ${Math.ceil(height / 20)};`);
  item.innerHTML = index;
  index += 1;
  grid.appendChild(item);
}

const randomNum = () => {
  const min = 40;
  const max = 200;
  return Math.floor(Math.random() * (max - min + 1) + min)
}

window.addEventListener('load', () => {
  for (let i = 0; i < 10; i++) {
    addItem();
  }
  document.querySelector('#addItemButton').addEventListener('click', () => {
    addItem();
  })
})

addItem


다음은 addItem 섹션만 게재
const addItem = () => {
  const height = randomNum();
  const grid = document.querySelector('#grid');
  const item = document.createElement('div');
  item.setAttribute('class', 'item');
  item.setAttribute('style', `height: ${height}px;grid-row: span ${Math.ceil(height / 20)};`);
  item.innerHTML = index;
  index += 1;
  grid.appendChild(item);
}

단순히 #griddiv.item 코드를 추가하는 것뿐, 중요한 것은 여기에 있다p>
item.setAttribute('style', `height: ${height}px;grid-row: span ${Math.ceil(height / 20)};`);

style 요소에 높이와 grid-row를 기록합니다.Height 됐어, grid-row 뭐지?p>

MDN은grid 프로젝트의 실제 높이를 결정하는 프로젝트입니다.grid-row 실제로는 절대적으로 숫자를 입력해야 하지만, 입력span을 통해 자동으로 위치를 정하여 지정된 값의 높이를 메울 수 있다p>

예컨대 grid-row: 3 시,row는 3부터,grid-row: span 3 시,grid의 높이는 3으로 자동 진입한다.참고로 이 높이의 단위는 방금 지정한 grid-auto-rows 값입니다. span 3 이면 Grid가 채워져 60px에 달합니다.p>
즉, 여기grid-row: span 高さ / grid-auto-rowsで指定した値를'좋은 느낌'으로 지정하면 설정도 CSS의grid의 힘을 빌려'감각이 좋다'는 것이다p>

언어만으로는 이해하기 어려울 수 있지만 크롬의 개발자 도구인 Elements에서 확인하면 의외로 이해하기 쉽다.



CSSgrid-auto-rows에서 20px마다 선을 그립니다.그게 보라색 실이잖아.그리고 grid-row를 통해 높이를 결정하고grid의 강도를 활용하는 동시에 높이도 "잘"표시할 수 있다p>

단, 유감스럽게도 창 폭을 이동할 때 Magic-Grid처럼 열을 이동하는 애니메이션이 없습니다.용서해 주십시오p>

마지막


이번 설명에서 MDN을 이용하여 간단하게 설명하지만 저도 Grid 초보자 같은 존재로 해석 오류가 있을 수 있습니다. 실제로 Grid를 이동하면 자바스크립트도 사용하지 않아도 될 수 있습니다.<가장 좋은 것은 매직-grid를 사용하는 것이다

빠른 걸음으로 해설한 것이기 때문에 난문이다.br/>
'이런 방법이 있구나''이 라이브러리가 편하구나'등이 있으면 부탁해요.p>

좋은 웹페이지 즐겨찾기