Surface Component
A versatile surface component built with Tailwind CSS for creating layered visual hierarchies and content containers. Structure content with multiple depth layers from base to elevated surfaces. Supports rounded shapes for flexible card alternatives and nested layout primitives.
Surface components are versatile layout primitives that create layered visual hierarchies and content containers. Built with semantic HTML, surfaces provide flexible depth and styling options. The Frutjam surface system supports multiple sizes, shapes, and layers—ideal for card alternatives, content blocks, and nested layouts.
| Class | Type | Description |
|---|---|---|
| surface | Base | Base surface container |
| surface-1 | Style | Elevation level 1 (subtle) |
| surface-2 | Style | Elevation level 2 |
| surface-outline | Style | Transparent fill with a visible border |
| surface-dashed | Style | Dashed border style |
| surface-rounded | Style | Moderately rounded corners |
| surface-xs | Size | Extra small padding |
| surface-sm | Size | Small padding |
| surface-md | Size | Medium padding (default) |
| surface-lg | Size | Large padding |
| surface-xl | Size | Extra large padding |
Basic Usage
Surface Container
Content displayed on a surface
1 2 3 4 | <div class="surface p-6"> <h2>Surface Container</h2> <p>Content displayed on a surface</p> </div> |
1 2 3 4 | <div className="surface p-6"> <h2>Surface Container</h2> <p>Content displayed on a surface</p> </div> |
Surface Layers
Use surface-1 and surface-2 to create depth hierarchy by mixing the base color with the foreground color.
1 2 3 | <div class="surface p-4">Base</div> <div class="surface surface-1 p-4">Surface 1 — subtle lift</div> <div class="surface surface-2 p-4">Surface 2 — more contrast</div> |
Surface Shapes
1 2 | <div class="surface surface-md">Default (square)</div> <div class="surface surface-md surface-rounded">Rounded</div> |
Border Styles
Use surface-outline or surface-dashed for transparent containers defined by a border. These work correctly when nested inside colored layers because the background is explicitly transparent.
Surface 1 (colored parent)
1 2 3 4 5 6 7 | <div class="surface surface-1 surface-rounded surface-md"> <p class="mb-3 font-medium">Surface 1 (colored parent)</p> <div class="flex gap-3"> <div class="surface surface-outline surface-rounded surface-sm grow">Outline — transparent fill, solid border</div> <div class="surface surface-dashed surface-rounded surface-sm grow">Dashed — transparent fill, dashed border</div> </div> </div> |
Surface Sizes
Size utilities set the internal padding via --surface--padding. Do not combine with Tailwind p-* utilities—they will override the variable and defeat the size class.
1 2 3 4 5 | <div class="surface surface-xs surface-rounded">Extra small (0.5rem)</div> <div class="surface surface-sm surface-rounded">Small (1rem)</div> <div class="surface surface-md surface-rounded">Medium (1.5rem)</div> <div class="surface surface-lg surface-rounded">Large (2rem)</div> <div class="surface surface-xl surface-rounded">Extra large (2.5rem)</div> |
Nested Surfaces
Outer Surface
Inner Surface
1 2 3 4 5 6 | <div class="surface surface-1 p-6 rounded-lg"> <h3>Outer Surface</h3> <div class="surface surface-2 p-4 rounded mt-4"> <p>Inner Surface</p> </div> </div> |