Masonry Layout은 전통적인 그리드 레이아웃과는 다른 방식으로, 요소들을 불규칙한 높이로 자연스럽게 배치할 수 있는 기술입니다. 이 방식은 Pinterest와 같은 사이트에서 자주 볼 수 있으며, 사용자가 다양한 크기의 콘텐츠를 더욱 효율적으로 볼 수 있도록 합니다. 본 칼럼에서는 CSS만을 사용해 어떻게 Masonry Layout을 구현할 수 있는지, 그리고 불규칙한 높이를 가진 요소들을 어떻게 자연스럽게 배치할 수 있는지에 대해 다뤄보겠습니다.
Masonry Layout이란?
MasonryLayout은 격자형 레이아웃의 한 형태로, 각 요소들이 서로 다른 높이를 가질 수 있지만, 공간을 최대한 효율적으로 채울 수 있도록 자동으로 배치됩니다. 이 방식은 특히 이미지 갤러리나 블로그 포스트 목록과 같이 콘텐츠의 크기가 일정하지 않은 경우 유용하게 활용됩니다.
전통적인 그리드와의 차이점
전통적인 그리드 레이아웃은 고정된 크기의 셀로 요소들을 배치하는 방식입니다. 반면, MasonryLayout은 불규칙한 크기의 콘텐츠가 자동으로 적절한 위치에 배치되므로, 그리드와는 다르게 더 자유롭고 유연한 디자인을 제공합니다.
CSS로 Masonry Layout 구현하기
1. CSS Columns를 활용한 MasonryLayout
CSS에서 가장 기본적으로 제공하는 columns 속성을 사용하면, 간단히 MasonryLayout을 구현할 수 있습니다. 이 방법은 몇 가지 제한이 있지만, 복잡한 자바스크립트 없이도 효과적인 격자형 배치를 제공합니다.
.container {
column-count: 3;
column-gap: 1rem;
}
.item {
break-inside: avoid;
margin-bottom: 1rem;
}
위 코드는 .container 요소 안에 3개의 열을 만들고, 각 .item 요소를 자동으로 이 열들에 배치합니다. break-inside: avoid 속성은 아이템이 열 중간에서 나누어지지 않도록 방지합니다. 이 방법은 콘텐츠가 불규칙한 높이를 가질 때도 효과적으로 작동합니다.
2. CSS Grid로 Masonry Layout 구현하기
최근 CSS Grid를 활용한 MasonryLayout 구현도 많이 사용되고 있습니다. grid-template-columns를 활용하여 자동으로 불규칙한 높이를 가진 요소들을 배치할 수 있습니다. 이 방법은 더 유연하게 레이아웃을 관리할 수 있게 해줍니다.
.container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 1rem;
}
.item {
grid-row-end: span 2; /* 불규칙한 높이의 요소를 처리 */
}
위 코드에서는 auto-fill을 사용하여 반응형 그리드를 만들고, minmax로 최소와 최대 크기를 설정하여 자동 열 배치를 합니다. grid-row-end: span 2를 사용하면 불규칙한 높이를 가진 아이템들이 두 행 이상에 걸쳐 배치되도록 할 수 있습니다. 이렇게 하면 높이가 다른 요소들이 자연스럽게 레이아웃에 맞춰 배치됩니다.
3. Flexbox와 Masonry Layout
CSS Flexbox는 기본적으로 일렬로 배치되는 요소들에 적합하지만, flex-wrap을 사용하여 MasonryLayout을 만들 수도 있습니다. 하지만 Flexbox를 활용할 때는 높이가 다른 요소들을 배치하는 데 제약이 있을 수 있습니다. 그렇지만 기본적인 레이아웃을 만드는 데는 충분히 유용합니다.
.container {
display: flex;
flex-wrap: wrap;
gap: 1rem;
}
.item {
flex: 1 1 30%; /* 아이템의 최소 크기 설정 */
margin-bottom: 1rem;
}
flex-wrap: wrap을 사용하면 아이템들이 너비에 맞춰 자동으로 줄을 바꿔가며 배치됩니다. flex 속성을 통해 아이템들이 적절한 크기로 늘어나거나 줄어들게 할 수 있습니다. 다만, 요소들의 높이가 불규칙하면 완벽한 MasonryLayout을 구현하기는 어려울 수 있습니다.
불규칙한 높이의 요소 배치하기
1. CSS로 불규칙한 높이 처리하기
MasonryLayout에서 가장 중요한 부분은 불규칙한 높이를 가진 요소들을 어떻게 배치하느냐입니다. CSS만으로 완벽하게 처리하기는 어려운 부분이 있지만, 위에서 소개한 grid나 columns 속성은 불규칙한 높이를 상당히 잘 처리해줍니다.
2. 자바스크립트와의 결합
CSS만으로 MasonryLayout을 구현할 때는 한계가 있을 수 있기 때문에, 때로는 자바스크립트를 결합하여 더 정확한 레이아웃 조정을 할 수 있습니다. Masonry.js와 같은 라이브러리들은 동적으로 요소들의 크기를 계산하여 최적의 배치를 제공하는데, CSS와 자바스크립트를 결합하여 사용할 경우 더욱 세밀한 조정이 가능합니다.
Masonry Layout의 장점
- 공간 활용도: 불규칙한 크기의 콘텐츠들이 자연스럽게 배치되어, 공간을 효율적으로 활용할 수 있습니다.
- 반응형 웹 구현: 다양한 화면 크기에 대응할 수 있는 레이아웃을 만들 수 있습니다.
- 시각적인 매력: 비정형적인 배치 덕분에 시각적으로 더 흥미롭고 역동적인 디자인을 구현할 수 있습니다.
CSS만을 사용하여 MasonryLayout을 구현하는 것은 간단하면서도 강력한 기술입니다. 이 방법은 다양한 콘텐츠를 다룰 때 유용하며, 특히 이미지 갤러리나 블로그 같은 사이트에서 자주 활용됩니다. CSS의 columns, grid 또는 flexbox를 사용하여 불규칙한 높이를 가진 요소들을 자연스럽게 배치하고, 반응형 웹 디자인에 맞는 레이아웃을 손쉽게 구현할 수 있습니다. 또한, 더 복잡한 레이아웃을 원할 경우 자바스크립트와의 결합을 고려할 수 있습니다. 이를 통해, 더욱 효율적이고 매력적인 웹사이트를 만들 수 있을 것입니다.









