RRenDSv0.13.0

Pattern

Empty State CSS-only

"Nothing here yet" panels — the first impression a user has of a feature before they've created data. Icon, headline, supporting copy, and one clear next action. Get them right and the empty page becomes onboarding.

About

Overview

Use an empty state when a list, table, or section has no content yet. The structure is rigid for a reason — it makes empty pages feel intentional instead of broken: a small illustration, a one-line headline ("No invoices yet"), one short paragraph of context, and a single primary action to get started.

Empty states are onboarding in disguise. First-time users land here. Phrase the copy as encouragement, not as an apology — "Create your first project" beats "Sorry, you have no projects".

Live

Demo

No projects yet

Projects are how you organize your work. Create one to start inviting collaborators and tracking progress.

<div class="ren-empty-state">
  <div class="ren-empty-state-icon">
    <!-- SVG illustration -->
  </div>
  <h2 class="ren-empty-state-title">No projects yet</h2>
  <p class="ren-empty-state-desc">
    Projects are how you organize your work. Create one to start
    inviting collaborators and tracking progress.
  </p>
  <button class="ren-btn ren-btn-primary">Create your first project</button>
</div>

Reference

API

ClassEffect
.ren-empty-stateThe container. Center-aligned, generous vertical padding.
.ren-empty-state-iconThe illustration slot. Sized to ~64–80 px square.
.ren-empty-state-titleHeadline. Use a real heading tag (h2 or h3) at the right document level.
.ren-empty-state-descSupporting copy — one or two lines max. Capped to ~38ch for readability.
.ren-empty-state-actionsOptional cluster for one or two action buttons. Right-align primary action when there are two.

Variants

  • First run — the default. "Get started" tone.
  • Search returned nothing — different copy. "No results for 'foo'. Try a different keyword."
  • Filtered out — "All your items are in another tab. Clear filters to see them."
  • Permission — "You don't have access. Ask an admin to invite you."

Inclusive by default

Accessibility

  • The illustration is decorative — wrap it in aria-hidden="true" so screen readers skip it.
  • The headline is a real <h2> or <h3> at the appropriate document level. Don't use a styled <p>.
  • The action button is reachable by Tab. If there's just one action, make it the page's primary CTA.
  • Don't replace the empty state with a permanent loading spinner — show a skeleton during load, then the empty state when the response arrives.

Empty states deserve copy review. The wording is the entire pattern — bad copy makes a beautifully designed empty state feel hollow. Have someone read it cold and confirm they know what to do next.