Visual reference for main components defined in geoserver.css.
CSS custom properties defined on :root (and [data-gs-theme=dark] override).
/* In CSS */ color: var(--gs-primary); background: var(--gs-danger-bg-subtle); border-color: var(--gs-border-color);
Body paragraph - link example, bold, italic, inline code, highlighted.
Small text (.875em) Extra-small (.text-xs)
<h1>Heading 1</h1> <p>Body text with <a href="#">link</a>, <strong>bold</strong>, <code>code</code></p> <span class="text-xs">Extra-small</span>
<button class="button">Default</button> <button class="button primary">Primary</button> <button class="button danger">Danger</button> <button class="button outline-primary">Outline Primary</button> <button class="button outline-danger">Outline Danger</button> <button class="button primary" disabled>Disabled</button> <!-- .button class works on <a> too --> <a class="button primary" href="#">Link Button</a>
<input type="text" placeholder="Enter text…" /> <input type="password" placeholder="Password" /> <input type="number" value="42" /> <input type="file" /> <textarea rows="3"></textarea> <input type="text" disabled value="Not editable" /> <select> <option>Option A</option> </select>
<!-- .choiceItem wrapper for consistent layout --> <div class="choiceItem"> <input type="checkbox" id="chk1" checked /> <label for="chk1">Label</label> </div> <div class="choiceItem"> <input type="radio" name="group" id="r1" /> <label for="r1">Label</label> </div>
<fieldset>
<legend>Section Title</legend>
<div class="gs-form">
<div class="gs-form-group">
<label class="gs-form-group-label">Layer name</label>
<input type="text" placeholder="my:layer" />
</div>
<div class="gs-form-group">
<label class="gs-form-group-label">Workspace</label>
<select><option>cite</option></select>
</div>
<div class="choiceItem">
<input type="checkbox" id="fs-enabled" checked />
<label for="fs-enabled">Enabled</label>
</div>
<div class="gs-form-group">
<label class="gs-form-group-label">SRS</label>
<div class="gs-input-group">
<select style="width:auto;"><option>EPSG</option></select>
<input type="text" placeholder="4326" />
<button class="button">Find</button>
</div>
</div>
</div>
</fieldset>
<fieldset>
<legend>Layer</legend>
<div class="gs-form">
<div class="gs-form-group">…</div>
<div class="gs-form-group">…</div>
<div class="gs-form">
<div class="gs-form-group">…</div>
<div class="gs-form-group">…</div>
</div>
</div>
</fieldset>
.gs-form / .gs-form-group)<div class="gs-form">
<div class="gs-form-group">
<label class="gs-form-group-label">
Title
</label>
<input type="text" placeholder="…" class="w-md" />
<span class="gs-instruction">Tooltip hint.</span>
</div>
<div class="gs-form-group">
<label class="gs-form-group-label">Abstract</label>
<textarea rows="3"></textarea>
</div>
<div class="gs-form-group">
<label class="gs-form-group-label" for="srs">SRS</label>
<div class="gs-form-group-content">
<input id="srs" type="text" placeholder="EPSG:4326" />
<span class="gs-form-help">Coordinate reference system in EPSG or AUTO format.</span>
</div>
</div>
</div>
.gs-input-group)<div class="gs-input-group"> <input type="text" placeholder="Search…" /> <button class="button primary">Go</button> </div> <div class="gs-input-group"> <select><option>EPSG</option></select> <input type="text" placeholder="4326" /> <button class="button">Find</button> </div>
| Name | Type | Enabled | Actions |
|---|---|---|---|
| roads | Vector | Edit | |
| dem | Raster | Edit | |
| basemap | WMS | Edit |
<table>
<thead>
<tr><th>Name</th><th>Type</th></tr>
</thead>
<tbody>
<tr>
<td>roads</td><td>Vector</td>
<td><a href="#" class="button"><i class="gs-icon gs-icon-pencil"></i> Edit</a></td>
</tr>
<tr>
<td>dem</td><td>Raster</td>
<td><a href="#" class="button"><i class="gs-icon gs-icon-pencil"></i> Edit</a></td>
</tr>
</tbody>
</table>
<!-- Odd rows get --gs-table-striped-bg automatically -->
.tab-row / .tab-panel)Content for the selected tab.
<div class="tab-row">
<ul>
<li class="selected"><a href="#">Data</a></li>
<li><a href="#">Publishing</a></li>
</ul>
</div>
<div class="tab-panel">
…tab content…
</div>
<div class="paginator"> <a href="#" disabled="disabled">«</a> <a href="#" disabled="disabled">‹</a> <em>1</em> <a href="#">2</a> <a href="#">3</a> <a href="#">›</a> <a href="#">»</a> </div>
<ul class="feedbackPanel"> <li class="feedbackPanelINFO">Info message</li> <li class="feedbackPanelWARNING">Warning message</li> <li class="feedbackPanelERROR">Error message</li> </ul>
.gs-spinner)<div class="gs-spinner"></div>
.gs-icon)All .gs-icon-* classes parsed live from geoserver.css.
Use as <i class="gs-icon gs-icon-{name}"></i>.
<!-- Standalone icon --> <i class="gs-icon gs-icon-accept"></i> <!-- Icon inside a button --> <button ><i class="gs-icon gs-icon-accept"></i> Accept</button> <button class="primary"><i class="gs-icon gs-icon-add"></i> Add</button> <button class="danger"><i class="gs-icon gs-icon-delete"></i> Delete</button>
Applied with !important; useful to constrain inputs, selects and table columns.
| Class | Width / Height | Typical use |
|---|---|---|
.w-xs | 1.875rem (≈30px) | Icon button, checkbox column |
.w-sm | 5rem (≈80px) | Short numeric input, port number |
.w-md | 15rem (≈240px) | Dropdown, short text field |
.w-lg | 37.5rem (≈600px) | URL, long text field |
.w-edge | 1% | Action/icon table column |
.w-full | 100% | Full-width field |
.w-fit | fit-content | Useful for select input to ensure all options are visible |
.h-sm | 3.125rem | Compact textarea |
.h-md | 6.25rem | Short textarea |
.h-lg | 25rem | Code / log textarea |
<!-- Short numeric input --> <input type="number" class="w-sm" value="8080" /> <!-- Constrained dropdown --> <select class="w-md">…</select> <!-- Long URL field --> <input type="text" class="w-lg" />