빈 상태 문구

Empty-State Copy

목록이 비었을 때 화면에 뜨는 문구. "데이터 없음"은 끝이지만 "첫 항목을 만들어보세요"는 시작입니다.

다른 이름: Zero state copy
···
html
<div class="stage">
  <div class="pane bad"><span class="mark">✕</span><span class="label">Before</span>
    <svg class="icon" viewBox="0 0 40 40"><circle cx="20" cy="20" r="15" fill="none" stroke="var(--muted)" stroke-width="2"/><line x1="12" y1="20" x2="28" y2="20" stroke="var(--muted)" stroke-width="2"/></svg>
    <p class="copy" id="bt"></p>
    <p class="why" id="bw"></p></div>
  <div class="pane good"><span class="mark">✓</span><span class="label">After</span>
    <svg class="icon" viewBox="0 0 40 40"><circle cx="20" cy="20" r="15" fill="none" stroke="var(--accent-3)" stroke-width="2"/><line x1="20" y1="13" x2="20" y2="27" stroke="var(--accent-3)" stroke-width="2"/><line x1="13" y1="20" x2="27" y2="20" stroke="var(--accent-3)" stroke-width="2"/></svg>
    <p class="copy" id="gt"></p>
    <button class="cta" id="gb"></button>
    <p class="why" id="gw"></p></div>
</div>
css
.stage{width:94%;height:88%;display:flex;gap:4%}
.pane{position:relative;flex:1;border-radius:14px;border:1px solid var(--line);background:var(--surface);padding:16px 14px 12px;display:flex;flex-direction:column;align-items:center;gap:6px;text-align:center}
.mark{position:absolute;top:10px;right:12px;font:800 16px/1 system-ui;color:var(--accent-2)}
.good .mark{color:var(--accent-3)}
.label{position:absolute;top:10px;left:12px;font:700 10px/1 monospace;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}
.icon{width:20%;margin-top:14%}
.copy{margin:2px 0 0;font:650 clamp(11px,3vmin,14px)/1.35 -apple-system,sans-serif;color:var(--fg)}
.cta{margin-top:2px;padding:5px 12px;border-radius:8px;border:0;background:var(--accent);color:#fff;font:700 11px/1 -apple-system,sans-serif}
.why{margin:auto 0 0;font:500 11px/1.3 -apple-system,sans-serif;color:var(--muted)}
js
const bt = document.getElementById('bt'), bw = document.getElementById('bw');
const gt = document.getElementById('gt'), gw = document.getElementById('gw'), gb = document.getElementById('gb');
const L = {
  ko: { bt: '데이터가 없습니다', bw: '그다음 행동이 없음', gt: '아직 프로젝트가 없어요', gb: '첫 프로젝트 만들기', gw: '원인 설명 + 바로 실행 버튼' },
  en: { bt: 'No data', bw: 'no next step', gt: 'No projects yet', gb: 'Create your first project', gw: 'explains why + gives an action' },
};
let lang = 'ko';
function paint() {
  const t = L[lang];
  bt.textContent = t.bt; bw.textContent = t.bw; gt.textContent = t.gt; gb.textContent = t.gb; gw.textContent = t.gw;
}
paint();
setInterval(() => { lang = lang === 'ko' ? 'en' : 'ko'; paint(); }, 2400);

빈 화면은 실패가 아니라 기회입니다 — 사용자가 아직 아무것도 안 했다는 뜻이고, 그다음 행동을 가장 자연스럽게 제안할 수 있는 자리입니다. "데이터가 없습니다"만 띄우면 이 기회를 그냥 버리는 셈입니다.

좋은 빈 상태 문구는 왜 비었는지 설명하고(신규 사용자인지, 필터 결과가 없는지), 바로 실행할 수 있는 다음 행동(버튼·링크)을 함께 둡니다. 두 상황(신규 vs 필터 결과 없음)은 원인이 다르므로 문구도 달라야 합니다.

데모의 ✕는 상태만 보고하고 끝나지만, ✓는 같은 자리에서 바로 첫 행동으로 이어집니다.

언제 쓰나

신규 목록, 검색 결과 0건, 필터링 결과 0건 화면마다 원인이 다르면 문구도 따로 쓰세요.