CSS 및 HTML만 사용하여 응답성이 빠르고 단계적으로 향상된 블록 레이아웃을 구성합니다.
재설계의 일부로서 저는 학생들의 추천서를 어떻게 배치해야 할지 생각하려고 했습니다. 이 추천서들은 길이/내용이 다를 수 있습니다. 저는 우연히 벽돌 구조를 사용해야 한다는 생각을 하게 되었습니다(벽돌을 생각하고 Pinterest를 생각하세요).
벽돌과 돌의 구조를 구축하는 데 많은 방법이 있는데 이 CSS 기교 문장은 몇 가지 옵션을 열거했다Approaches for a CSS Masonry Layout.
솔루션을 검토할 때 다음과 같은 규칙을 준수하고 싶습니다.
우리 뭐 짓고 있어?
grid-template-rows: masonry
의 블록 레이아웃마지막 시범은 Firefox에서만 사용할 수 있는 기능을 사용했고 그 뒤에 표지가 하나 있는데 본고는 이에 대해 상세하게 소개했다.
다음은 전체 데모 코드입니다.
CSS 격자가 이 정도는 할 수 있다고 생각하실 거예요.
CSS Grid는 매우 훌륭합니다. 간단한 석재 레이아웃 방법을 제공했다고 생각할 수도 있지만, 규범화된 초기 버전은 그 레이아웃을 진정으로 돕는 어떤 것도 제공하지 않습니다.
하지만 걱정 마세요. Firefox에서 요리하는 게 있어요!
Before I continue, the specification we're going to look into is experimental, and at the time of writing only is available in Firefox behind a flag, however, this article will outline how you could use the feature today and fallback to another approach for browsers without support.
Firefox에서 스톤 레이아웃 사용
지금은 2021년 1월입니다. Firefox 84.0.2를 사용하고 있습니다. 이것은 규범의 진전에 따라 이 로고를 사용하지 않아도 되고 다른 브라우저에서도 사용할 수 있습니다this link may have more information.
Firefox에서 활성화하기
about:config
를 입력합니다.layout.css.grid-template-masonry-value.enabled
를 찾아 활성화합니다.그것은 매우 유사한 예를 상세하게 소개했다.
이 소량의 CSS가 있으면 우리는 거의 우리가 원하는 레이아웃을 얻을 수 있어 사람을 흥분시킨다!하드 인코딩 사이즈가 있어서 개선하고 응답 블록 레이아웃을
우리들의 본보기를 세우다
새로운 예부터 시작하여 약간의 html과'lorem ipsum'부터 벽돌 구조를 위해'벽돌'을 생성합시다.
효과를 보려면 벽돌 레이아웃을 지원하는 브라우저에서 이 예시들을 보십시오. (Firefox를 작성할 때 표지 뒤에 있습니다.)
이 코드는 벽돌과 돌 모양의 레이아웃을 생성합니다. 화면이 축소되면 자동으로 한 열에 도달할 때까지 열 수를 줄일 것입니다.
만약 이 예를 실행한다면, 가장 깨끗한 가장자리가 없다는 것을 주의해야 한다.
wonky bottom
No one likes a
soggywonky bottom.
축체규범은 새로운 속성을 사용할 수 있습니다:
align-tracks
, 이 문제를 해결하기 위해 stretch
로 설정할 수 있습니다.align-tracks
또 다른 support modes가 있습니다. align-tracks
의 잠재적인 문제에 주의하세요. 벽돌 구조를 원한다면 벽돌 하나가 여러 기둥을 뛰어넘을 수 있습니다. 이 일들이 규범의 진전에 따라 해결되기를 바랍니다..masonry {
display: grid;
gap: 1rem;
grid-template-rows: masonry;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
/* no more wonky bottom */
align-tracks: stretch;
}
/* some styling not important */
.brick {
color: var(--Text, #F0F0F0);
background: var(--Primary, #74baff);
padding:1rem;
}
지금은 마술을 부리는 것 같고, 밑부분은 지금 곧다.한 걸음 물러나는 게 어때요?
알겠습니다. 현재 우리는 브라우저에서만 일부 물건을 실행하고 있지만, 거기에서 발표하지 않았습니다. 이것은 이상적이지 않습니다.
이번에는 CSS 열을 사용하여 유사한 기능을 시도해 보겠습니다.
CSS 칼럼을 연구하여 이러한 벽돌과 돌의 구조를 실현하기 전에 나는 그것들을 사용한 적이 없다. 그들은 실제로는 매우 똑똑하고 호응할 수 있으며 미디어 조회가 필요하지 않다. 우리가 지금 바로 살펴보자.
이 예에서, 나는 CSS Custom Properties을 사용하기 시작할 것이다. 이것은 매우 유용해질 것이다. 점진적인 강화를 사용하면, 우리는 이 변수를 사용하여 크기와 다른 설정을 공유할 수 있다.
css의 경우 다음과 같은 열 속성을 사용합니다.
column-gap: 1rem;
column-fill: initial;
column-width: 300px;
acolumn-width
를 설정하면 열이 축소되기 전에 열의 최소 너비를 설정합니다. 이것은 작은 장치에서 CSS 격자와 같은 단일 열을 얻을 수 있음을 의미합니다.특정 열 수를 설정하려면
column-count
속성을 사용할 수 있습니다.원하는 기능:옵션 예:
/* larger */
@media (min-width: 1024px) {
.masonry {
column-count: 4;
}
}
/* medium */
@media (max-width: 1023px) and (min-width: 768px) {
.masonry {
column-count: 3;
}
}
/* small, anything smaller will be 1 column by default */
@media (max-width: 767px) and (min-width: 540px) {
.masonry {
column-count: 2;
}
}
우리는 이렇게 하지 않을 것이다. 우리는 column-width
만 이용하고 우리의 열을 최대 카드 폭으로 늘릴 수 있을 뿐이다.이전과 같은 html에서 css를 변경했습니다.
결과는 매우 비슷하지만 두 가지 주요 차이가 있다.
점진적 증강
현재 우리는 미래에 어떻게 벽돌과 돌의 구조를 실현할 수 있는지 알고 있으며 css의 신기함
@supports
키워드와 결합시킬 예비 방안을 제공했다.@supports(grid-template-rows: masonry) {
.masonry {
display: grid;
gap: var(--masonry-gap);
grid-template-rows: masonry;
grid-template-columns: repeat(auto-fill, minmax(var(--masonry-brick-width), 1fr));
align-tracks: stretch;
}
.masonry > * {
/* use this to reset the margin that the column variant set */
margin-bottom: initial;
}
}
마찬가지로 HTML을 변경하지 않고 css 격자를 사용하여 블록 레이아웃을 만듭니다@supports
..masonry {
--masonry-gap: 1rem;
--masonry-brick-width: 300px;
column-gap: var(--masonry-gap);
column-fill: initial;
column-width: var(--masonry-brick-width);
}
.masonry > * {
break-inside: avoid;
margin-bottom: var(--masonry-gap);
}
@supports(grid-template-rows: masonry) {
.masonry {
display: grid;
gap: var(--masonry-gap);
grid-template-rows: masonry;
grid-template-columns: repeat(auto-fill, minmax(var(--masonry-brick-width), 1fr));
align-tracks: stretch;
}
.masonry > * {
margin-bottom: initial;
}
}
/* some styling not important */
.brick {
color: var(--Text, #F0F0F0);
background: var(--Primary, #74baff);
padding:1rem;
}
현재, 이 예에서 브라우저가 지원하는 내용에 따라 CSS 격자나 CSS 열 버전을 얻을 수 있습니다.grid-template-rows: masonry
현재와 더 많은 브라우저 발표 사이에 변화가 없다면, 우리는 몇 가지 CSS를 작성했습니다. 이것은 시간의 추이에 따라 자동으로 업그레이드되고, 수평 정렬이 아닌 밑바닥의 불안정하고 수직 정렬된 기술 채무/UX '결함'을 복구합니다.상금 라운드
나의 실현에서 나는 벽돌과 돌의 배치에서 N개의'벽돌'마다 서로 다른 카드 배경을 가지고 놀고 있다.
.brick:nth-child(4n - 7) {
background: #5A363A;
}
.brick:nth-child(4n - 6) {
background: #82212C;
}
.brick:nth-child(4n - 5) {
background: #3A3E41;
}
.brick:nth-child(4n - 4) {
background: #292A2B;
}
CSS의 nth-child
속성을 사용하면 아주 교묘한 기교를 사용할 수 있습니다. 만약에 초보자라면 유용한 배경 자료를 읽을 수 있습니다.전편을 읽어 주셔서 감사합니다. 저는 이것이 유용하길 바랍니다. 언젠가 저희가 CSS에서 흔들리는 밑부분을 가볍게 처리할 수 있기를 바랍니다.
Reference
이 문제에 관하여(CSS 및 HTML만 사용하여 응답성이 빠르고 단계적으로 향상된 블록 레이아웃을 구성합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/griffadev/building-a-responsive-progressively-enhanced-masonry-layout-with-only-css-and-html-4bd0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)