GODRICH

벤토 그리드 디자인 — 요즘 핀터레스트에서 유행하는 부품 9개

벤토 그리드 디자인은 도시락 칸처럼 크기가 다른 사각형 타일을 한 격자에 채워 화면을 구성하는 방식으로, 핀터레스트·드리블에서 포트폴리오와 SaaS 랜딩 페이지를 중심으로 유행하고 있습니다. 특징은 다섯 가지입니다.

아래는 이 스타일로 실제로 만든 원페이지 랜딩입니다. 내비게이션부터 푸터까지 스크롤하면서 전체 흐름을 먼저 보십시오.

새 창에서 원페이지 열기

원페이지를 이루는 부품 아홉 개를 하나씩 뜯어서 격자로도 모아 뒀습니다. 각 부품은 히어로부터 시작해서 방문자가 실제로 페이지를 훑는 순서(눈에 띄기, 둘러보기, 값 확인, 신뢰, 행동, 가입)를 따라갑니다.

자동 재생 · 눌러서 해당 항목으로 · 전부 한 zip

01히어로

히어로 영역을 하나의 큰 블록이 아니라 크기가 다른 타일 세 개로 쪼갭니다. 가장 큰 타일에 헤드라인과 CTA 버튼을 넣고, 작은 두 칸에는 상태 배지와 색 블록 하나만 둡니다.

2x2radius 24호버 확대
<div class="grid grid-cols-3 grid-rows-2 gap-4">
  <div class="col-span-2 row-span-2 flex flex-col justify-center gap-4
              rounded-tile bg-white p-10 shadow-bento">
    <h1 class="text-4xl font-extrabold">일과 팀을 한 화면에</h1>
    <button class="w-fit rounded-pill bg-ink px-6 py-3 text-sm font-bold text-cream">
      무료로 시작
    </button>
  </div>
  <div class="flex items-center gap-3 rounded-tile bg-white p-6 shadow-bento">
    <span class="h-3 w-3 rounded-full bg-accent"></span>
    <span class="text-sm font-semibold">실시간 동기화</span>
  </div>
</div>

02내비게이션

메뉴 전체가 알약 모양 하나에 담기고, 안쪽의 진한 칩이 현재 위치를 표시하며 항목 사이를 옮겨 다닙니다. 브랜드와 CTA 버튼은 알약 바깥 양 끝에 고정합니다.

radius 999padding 6px그림자 얕게
<nav class="flex items-center gap-4 rounded-pill bg-white/80 backdrop-blur
            px-3 py-2 shadow-bento">
  <span class="pl-3 font-display font-extrabold text-sm">Nectar</span>
  <div class="relative flex flex-1 rounded-pill bg-ink/5 p-1">
    <span class="absolute inset-y-1 left-1 w-1/4 rounded-pill bg-accent"></span>
    <span class="relative z-10 flex-1 text-center text-xs font-semibold py-2">홈</span>
    <span class="relative z-10 flex-1 text-center text-xs font-semibold py-2">기능</span>
  </div>
  <button class="rounded-pill bg-accent px-4 py-2 text-xs font-bold text-cream">
    무료로 시작
  </button>
</nav>

03카드 격자

이 스타일의 몸통입니다. 칸마다 열·행 폭이 달라 한눈에 훑을 때 시선이 가장 큰 칸부터 멈추고, 나머지 칸으로 차례로 흘러갑니다.

grid-template-columnsgap 16px2열→1열
<div class="grid grid-cols-3 grid-rows-2 gap-4">
  <div class="row-span-2 flex flex-col justify-end gap-3 rounded-tile
              bg-white p-5 shadow-bento hover:shadow-bento-hover transition-shadow">
    <div class="flex-1 rounded-[14px] bg-accent/10"></div>
    <p class="text-sm font-semibold">빠른 검색</p>
  </div>
  <div class="rounded-tile bg-white p-5 shadow-bento">자동 정리</div>
  <div class="col-span-2 rounded-tile bg-white p-5 shadow-bento">리포트</div>
</div>

04기능 목록

기능마다 아이콘 자리와 강조 숫자 하나를 카드 안에 크게 배치해 스캔하기 쉽게 합니다. 숫자 아래 얇은 바는 그 값의 크기를 시각적으로 보여줍니다.

숫자 강조아이콘 40px호버 살짝 뜸
<div class="flex gap-4">
  <div class="flex-1 rounded-tile bg-white p-6 shadow-bento">
    <span class="mb-2 block h-6 w-6 rounded-lg bg-accent"></span>
    <p class="text-2xl font-extrabold">12,000+</p>
    <p class="text-xs font-semibold text-ink/70">연동 앱</p>
    <span class="mt-3 block h-1 w-full rounded-pill bg-accent"></span>
  </div>
</div>

05가격

추천 플랜만 칸을 1.1배 크게 잡고 배지를 얹어, 비교 표 없이도 어떤 플랜을 밀고 있는지 바로 보이게 합니다. 나머지 플랜은 옅은 배경으로 물러납니다.

강조 칸 1.4배border 2pxbadge 위치
<div class="flex items-end gap-4">
  <div class="flex-1 rounded-tile bg-white/60 p-6">
    <p class="font-bold">무료</p>
  </div>
  <div class="relative flex-[1.1] rounded-tile bg-white pt-8 p-6 shadow-bento-hover">
    <span class="absolute -top-3 left-6 rounded-pill bg-accent px-3 py-1
                 text-xs font-bold text-cream">추천</span>
    <p class="font-bold">프로</p>
    <p class="mt-1 text-sm text-ink/70">월 19,000원</p>
  </div>
</div>

06후기

후기 카드를 격자 사이사이에 섞어 넣어 광고 캐러셀처럼 몰려 보이지 않게 합니다. 별점 칸 하나를 더해 신뢰 신호를 시각적으로 한 번 더 반복합니다.

따옴표 아이콘별점 옵션1칸 폭
<div class="grid grid-cols-3 gap-4">
  <div class="col-span-2 rounded-tile bg-white p-6 shadow-bento">
    <p class="text-sm font-semibold">"덕분에 온보딩 시간이 반으로 줄었어요"</p>
    <p class="mt-3 text-xs text-ink/60">김도현 · 프로덕트 매니저</p>
  </div>
  <div class="rounded-tile bg-white p-6 shadow-bento">
    <p class="text-sm font-semibold">"복잡한 툴 세 개를 이걸로 정리했어요"</p>
  </div>
</div>

07CTA 띠

격자 안에서 한 칸만 가로 전체를 차지하게 해 마지막으로 시선이 그 칸에 멈추게 합니다. 어두운 배경 위에 은은한 빛 하나를 얹어 CTA 버튼 쪽으로 무게를 실었습니다.

열 전체 spanradius 24배경 대비
<div class="relative overflow-hidden rounded-tile bg-ink px-10 py-12">
  <span class="absolute -right-16 -top-24 h-64 w-64 rounded-full
               bg-accent opacity-30 blur-sm"></span>
  <h3 class="relative max-w-md text-3xl font-extrabold text-cream">
    지금 팀에 합류시켜 보세요
  </h3>
  <button class="relative mt-6 rounded-pill bg-cream px-6 py-3
                 text-sm font-bold text-ink">무료로 시작</button>
</div>

08푸터

푸터의 링크 묶음마다 옅은 칸 하나씩을 줘서 격자 스타일을 페이지 끝까지 끌고 갑니다. 구분선 대신 배경 톤 차이만으로 칸을 나눕니다.

칸 배경 5%4열→2열구분선 없음
<footer class="grid grid-cols-3 gap-4">
  <div class="rounded-tile bg-ink/[.04] p-5">
    <p class="mb-2 text-xs font-bold uppercase text-ink/50">제품</p>
    <p class="text-sm font-semibold">기능</p>
  </div>
  <div class="rounded-tile bg-ink/[.04] p-5">
    <p class="mb-2 text-xs font-bold uppercase text-ink/50">회사</p>
    <p class="text-sm font-semibold">소개</p>
  </div>
</footer>

09버튼·입력

버튼과 입력창의 모서리 반경을 카드와 같은 값으로 맞춰 화면 전체가 하나의 규격으로 보이게 합니다. 포커스 링도 카드 반경보다 살짝 더 둥글게 감쌉니다.

radius 12포커스 링 2px높이 44px
<form class="flex gap-3 rounded-tile bg-white p-6 shadow-bento">
  <label class="relative flex-1 rounded-[12px] bg-cream">
    <input class="w-full rounded-[12px] bg-transparent px-4 py-3 text-sm
                  outline-none ring-2 ring-accent/40" type="email"
           placeholder="이메일 주소">
  </label>
  <button class="rounded-[12px] bg-accent px-5 py-3 text-sm font-bold text-cream">
    가입하기
  </button>
</form>

tailwind.config 커스텀

원페이지와 부품 아홉 개가 전부 이 값 하나에서 나옵니다. 반경·그림자·간격을 여기서만 바꾸면 전체 페이지의 톤이 한 번에 바뀝니다.

theme: {
  extend: {
    colors: {
      cream: "#fff7e6",
      ink: "#17141a",
      accent: "#2f6df6",
      line: "rgba(23,20,26,.08)",
    },
    fontFamily: {
      display: ["'Plus Jakarta Sans'", "system-ui", "sans-serif"],
      body: ["'Inter'", "system-ui", "sans-serif"],
    },
    borderRadius: {
      tile: "20px",
      pill: "999px",
    },
    boxShadow: {
      bento: "0 14px 24px rgba(23,20,26,.10)",
      "bento-hover": "0 20px 32px rgba(23,20,26,.16)",
    },
    spacing: {
      gutter: "14px",
    },
  },
},

바이브코딩 프롬프트

이 config를 프로젝트에 넣고 Claude Code·Cursor에 아래 조각처럼 시키면 됩니다. 전체 프롬프트 원문은 zip의 prompt.md에 있습니다.

히어로는 하나의 큰 블록이 아니라 크기가 다른 타일 여러 개(2x2 비대칭 모자이크)로 나눈다.
모든 카드는 rounded-tile, shadow-bento 를 쓴다. 호버하면 shadow-bento-hover 로
그림자만 커진다 — 위치는 움직이지 않는다.
배경은 cream 하나. 강조가 필요한 곳에만 accent 를 쓰고 그라데이션으로 채우지 않는다.

위 프롬프트를 실제로 page/index.html에 적용해 나온 결과를 1280px 뷰포트에서 전체 페이지로 캡처했습니다.

결과

어디서 깨지는가 — 함정

타일 크기를 세 가지 넘게 섞으면 격자가 아니라 콜라주가 됩니다. grid-template-areas로 큰 화면에서 짠 배치는 컨테이너 폭이 좁아지면 특정 칸이 다른 칸을 밀어내며 겹치기 쉬운데, MDN CSS Grid Layout 문서가 안내하는 대로 좁은 폭에서는 영역 이름을 아예 다시 선언하는 편이 안전합니다. 이 프로젝트도 처음엔 칸 넷을 그대로 세로로만 쌓았더니 큰 칸의 여백이 모바일 화면에서 절반 넘게 비어 보였고, 결국 폭 640px 아래에서는 큰 칸의 높이를 줄이는 규칙을 따로 추가했습니다. 그림자를 칸마다 다르게 주는 실수도 흔합니다. shadow-bentoshadow-bento-hover 두 단계로 못을 박아 둔 것은, 칸마다 그림자 진하기가 달라지면 페이지가 아니라 서로 다른 사이트를 붙여 놓은 것처럼 보이기 때문입니다. 이 아홉 개 부품과 원페이지 소스가 담긴 zip의 압축 비밀번호는 j7zbg3ef이고, 아래 버튼으로 받을 수 있습니다.

강조색을 두 개 이상 쓰는 것도 벤토 그리드에서는 함정입니다. accent 하나로 시선을 모으는 게 이 스타일의 핵심이라, 두 번째 강조색이 들어오는 순간 어느 칸이 진짜 중요한 칸인지 알 수 없어집니다.

접근성

ink(#17141a) 텍스트를 accent(#2f6df6) 배경 위에 올리는 배지·CTA 버튼은 대비가 낮은 편이라, 크기가 작은 배지 글자는 cream 배경 위로 옮기고 버튼처럼 큰 요소에만 accent 배경을 씁니다. 애니메이션이 들어간 09번 데모의 포커스 링·CTA 띠의 은은한 빛은 MDN prefers-reduced-motion 문서가 정의한 미디어 쿼리로 감쌌고, 동작 줄이기를 켠 방문자에게는 움직임 대신 정지된 상태만 보입니다. 원페이지의 CTA 버튼은 텍스트만으로도 뜻이 통하게 썼고, 색 블록으로 채운 자리는 나중에 실제 아이콘이나 이미지가 들어갈 때 alt를 채우도록 zip의 README에 적어 뒀습니다.

다른 트렌드는 디자인 트렌드 카테고리에 모아 뒀고, 사이트가 무엇을 다루는지는 소개 페이지에 정리했습니다.

FAQ

벤토 그리드는 CSS Grid로만 만들 수 있나요?

Flexbox로도 비슷하게 흉내는 낼 수 있지만, 칸마다 열·행을 몇 칸씩 차지할지 지정하려면 grid-column·grid-row를 쓰는 CSS Grid 쪽이 코드가 훨씬 짧습니다. 이 편의 부품 아홉 개도 격자가 필요한 03·06·08번은 Grid, 한 줄로 충분한 나머지는 Flexbox를 씁니다.

사진이나 일러스트 없이도 벤토 그리드가 어울리나요?

네, 오히려 색 블록만으로도 충분히 신뢰감 있게 보입니다. 이 편의 원페이지와 부품 데모 전부 사진 한 장 없이 accent 색 블록과 아이콘 자리만으로 채웠고, 실제 서비스 화면을 넣기 전 와이어프레임 단계에서 특히 유용합니다.

타일이 몇 개부터 벤토 그리드라고 부를 수 있나요?

정해진 기준은 없지만 최소 네 칸은 있어야 크기 차이가 눈에 들어옵니다. 이 편의 03번 카드 격자처럼 큰 칸 하나와 작은 칸 셋을 섞는 4칸 구성이 가장 흔하고, 섹션이 넓다면 06번 후기처럼 6~8칸까지 늘려도 무리 없습니다.

압축 비밀번호를 입력하세요

비밀번호는 이 글 본문 안에 있습니다. 읽다 보면 나옵니다.