Table
On this page
Importing
Add rh-table to your page with this import statement:
<script type="module">
import '@rhds/elements/rh-table/rh-table.js';
</script>
Copy to Clipboard
Copied!
Wrap lines
Overflow lines
To learn more about installing RHDS elements on your site using an import map read our getting started docs.
Lightdom CSS
This element requires you to load "Lightdom CSS" stylesheets for styling deeply slotted elements.
Note
Replace /path/to/ with path to the CSS file, whether local or CDN.
<link rel="stylesheet" href="/path/to/rh-table/rh-table-lightdom.css">
Usage
<rh-table>
<table>
<caption>
Concerts
</caption>
<colgroup>
<col>
<col>
<col>
</colgroup>
<thead>
<tr>
<th scope="col">Date</th>
<th scope="col">Event<rh-sort-button></rh-sort-button>
</th>
<th scope="col">Venue<rh-sort-button></rh-sort-button>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>12 February</td>
<td>Waltz with Strauss</td>
<td>Main Hall</td>
</tr>
<tr>
<td>24 March</td>
<td>The Obelisks</td>
<td>West Wing</td>
</tr>
<tr>
<td>14 April</td>
<td>The What</td>
<td>Main Hall</td>
</tr>
</tbody>
</table>
<small slot="summary">Dates and venues subject to change.</small>
</rh-table>
<link rel="stylesheet" href="../rh-table-lightdom.css">
<script type="module">
import '@rhds/elements/rh-table/rh-table.js';
</script>
Copy to Clipboard
Copied!
Wrap lines
Overflow lines
Title
Specify the title of the table using a <caption> element.
<rh-table>
<table>
<caption>
Concerts
</caption>
<!-- ...table data -->
</table>
</rh-table>
Responsive tables
<rh-table> will automatically reformat to a "stacked" presentation in narrow
containers such as on small screens and mobile devices or in page sidebars. For
simple table structures, each table cell heading will be auto-generated for its
responsive layout.
For complex tables (i.e., including colspan or rowspan attributes), or to
customize or override individual table cell headings on mobile devices, use a
data-label attribute on the <td> elements to label them.
<rh-table>
<table>
<caption>
Concerts
</caption>
<colgroup>
<col>
<col>
<col>
</colgroup>
<thead>
<tr>
<th id="concerts-date" scope="col">Date</th>
<th id="concerts-event" scope="col">Event<rh-sort-button></rh-sort-button></th>
<th id="concerts-venue" scope="col">Venue<rh-sort-button></rh-sort-button></th>
</tr>
</thead>
<tbody>
<tr>
<td headers="concerts-date">12 February</td>
<td headers="concerts-event">Waltz with Strauss</td>
<td headers="concerts-venue">Main Hall</td>
</tr>
<tr>
<td headers="concerts-date">24 March</td>
<td headers="concerts-event">The Obelisks</td>
<td headers="concerts-venue">West Wing</td>
</tr>
<tr>
<td headers="concerts-date" data-label="Custom heading 1">14 April</td>
<td headers="concerts-event" data-label="Custom heading 2">The What</td>
<td headers="concerts-venue" data-label="Custom heading 3">Main Hall</td>
</tr>
</tbody>
</table>
<small slot="summary">Dates and venues subject to change.</small>
</rh-table>
Column highlighting
To enable column highlighting, the <table> element must also include a <col>
element for each column in the table, typically wrapped with a <colgroup>.
<rh-table>
<table>
<caption>
Concerts
</caption>
<colgroup>
<col>
<col>
<col>
</colgroup>
<!-- ...table with three columns -->
</table>
</rh-table>
Sorting
To enable sorting on a column, add an <rh-sort-button> as the last child of
the <th> cell.
<rh-table>
<table>
<caption>
Concerts
</caption>
<colgroup>
<col>
<col>
<col>
</colgroup>
<thead>
<tr>
<th id="concerts-date" scope="col">Date</th>
<th id="concerts-event" scope="col">Event<rh-sort-button></rh-sort-button></th>
<th id="concerts-venue" scope="col">Venue<rh-sort-button></rh-sort-button></th>
</tr>
</thead>
<!-- ...table data sortable by Event and Venue -->
</table>
</rh-table>
Summary
Additional information about the data in the table should be slotted into the
summary slot after the table element.
<rh-table>
<table>
<caption>
Concerts
</caption>
<colgroup>
<col>
<col>
<col>
</colgroup>
<thead>
<tr>
<th id="concerts-date" scope="col">Date</th>
<th id="concerts-event" scope="col">Event<rh-sort-button></rh-sort-button></th>
<th id="concerts-venue" scope="col">Venue<rh-sort-button></rh-sort-button></th>
</tr>
</thead>
<tbody>
<tr>
<td headers="concerts-date">12 February</td>
<td headers="concerts-event">Waltz with Strauss</td>
<td headers="concerts-venue">Main Hall</td>
</tr>
<tr>
<td headers="concerts-date">24 March</td>
<td headers="concerts-event">The Obelisks</td>
<td headers="concerts-venue">West Wing</td>
</tr>
<tr>
<td headers="concerts-date">14 April</td>
<td headers="concerts-event">The What</td>
<td headers="concerts-venue">Main Hall</td>
</tr>
</tbody>
</table>
<small slot="summary">Dates and venues subject to change.</small>
</rh-table>
rh-table
A table is a container for displaying information. It allows a user to scan, examine, and compare large amounts of data.
Slots
2
| Slot Name | Summary | Description |
|---|---|---|
[default]
|
an HTML table |
|
summary
|
description of the data |
Attributes
0
None
Methods
0
None
Events
0
None
CSS Shadow Parts
1
| Part Name | Summary | Description |
|---|---|---|
container
|
CSS Custom Properties
3
| CSS Property | Description | Default |
|---|---|---|
--rh-table-row-border |
row border |
var(--rh-border-width-sm, 1px) solid var(--rh-color-border-subtle-on-light, #c7c7c7)
|
--rh-table-row-background-hover-color |
row hover background color |
rgba(from var(--rh-color-gray-40, #a3a3a3) r g b / 0.1)
|
--rh-table-column-background-hover-color |
column hover background color |
rgba(from var(--rh-color-blue-50, #0066cc) r g b / 0.1)
|
Design Tokens
16
| Token | Description | Copy |
|---|---|---|
--rh-color-text-primary
|
|
|
--rh-color-gray-50
|
Subtle icon |
|
--rh-color-border-subtle
|
|
|
--rh-border-width-sm
|
1px border width; Example: Secondary CTA or Button |
|
--rh-color-border-subtle-on-light
|
Subtle border color (light theme) |
|
--rh-color-gray-40
|
Subtle icon (hover state) |
|
--rh-color-white
|
Lightest surface (light theme) or primary text (dark theme) |
|
--rh-color-blue-50
|
Label - Filled (Blue) accent color |
|
--rh-color-blue-70
|
Alert - Info title text |
|
--rh-space-xl
|
24px spacer |
|
--rh-space-lg
|
16px spacer |
|
--rh-color-text-secondary
|
|
|
--rh-font-family-body-text
|
Body text font family |
|
--rh-font-size-body-text-md
|
16px font size |
|
--rh-font-weight-body-text-regular
|
Regular font weight |
|
--rh-line-height-body-text
|
Line height for body text |
|
rh-sort-button
Table sort button
Slots
0
Attributes
2
| Attribute | DOM Property | Description | Type | Default |
|---|---|---|---|---|
|
|
sortDirection |
The button's sorting order |
|
|
|
|
column |
The column name associated with this button (for screen readers) |
|
|
Methods
1
| Method Name | Description |
|---|---|
|
|
Dispatch a request-sort event in ascending (asc) or descending (desc) order |
Events
1
| Event Name | Description |
|---|---|
|
|
when the button is clicked |
CSS Shadow Parts
2
| Part Name | Summary | Description |
|---|---|---|
|
|
button element |
|
|
|
icon wrapper element |
CSS Custom Properties
0
None
Design Tokens
1
| Token | Description | Copy |
|---|---|---|
--rh-color-text-primary
|
|
Other libraries
To learn more about our other libraries, visit this page.
Feedback
To give feedback about anything on this page, contact us.