Users need to see structured data in a manner that makes the data readable, scannable, and comparable.
Tables provide customizable views of tabular data with features including sorting and managing columns. Tables are useful when a collection of data requires vertical alignment through columns for quick scanning and discovery of information, as well as for data that with many attributes that requires sorting, grouping, and a user customizable display.
Tables list a collection of items in rows that have similar attributes, usually with headers to label each attribute.
The following functionality can be provided by tables:
A table’s complexity and needs can vary greatly. This pattern provides many different features a table may have. Features can be mixed and matched based on your needs. Don’t include features unless they’re actually needed.
A standard table has subtle row borders.
| Project name | Description | Price |
|---|---|---|
| Invoice | Add invoice confirmation | $4,500 |
| Templates | Refactor templates to use the new templating library | $9,000 |
| Payments | Process payments using third party api | $5,400 |
| Account Management | Improve account management workflow | $6,000 |
<table class="table"> ... </table>
A striped table adds an alternating row background color, increasing usability for wider tables.
| Project name | Description | Price |
|---|---|---|
| Invoice | Add invoice confirmation | $4,500 |
| Templates | Refactor templates to use the new templating library | $9,000 |
| Payments | Process payments using third party api | $5,400 |
| Account Management | Improve account management workflow | $6,000 |
<table class="table table-striped"> ... </table>
A bordered table adds column and row borders, increasing usability for content-dense tables.
| Project name | Description | Price |
|---|---|---|
| Invoice | Add invoice confirmation | $4,500 |
| Templates | Refactor templates to use the new templating library | $9,000 |
| Payments | Process payments using third party api | $5,400 |
| Account Management | Improve account management workflow | $6,000 |
<table class="table table-bordered"> ... </table>
A borderless table removes all borders, decreasing clutter for simple tables.
| Project name | Description | Price |
|---|---|---|
| Invoice | Add invoice confirmation | $4,500 |
| Templates | Refactor templates to use the new templating library | $9,000 |
| Payments | Process payments using third party api | $5,400 |
| Account Management | Improve account management workflow | $6,000 |
<table class="table table-borderless"> ... </table>
Rows can have a hover effect to indicate click interactions.
| Project name | Description | Price |
|---|---|---|
| Invoice | Add invoice confirmation | $4,500 |
| Templates | Refactor templates to use the new templating library | $9,000 |
| Payments | Process payments using third party api | $5,400 |
| Account Management | Improve account management workflow | $6,000 |
<table class="table table-borderless table-hover"> ... </table>
Use the condensed style, which reduces cell padding, for very large amounts of data.
| Project name | Description | Price |
|---|---|---|
| Invoice | Add invoice confirmation | $4,500 |
| Templates | Refactor templates to use the new templating library | $9,000 |
| Payments | Process payments using third party api | $5,400 |
| Account Management | Improve account management workflow | $6,000 |
<table class="table table-bordered table-condensed"> ... </table>
Use the comfortable style, which increases cell padding, for making simple data breathe more.
| Project name | Description | Price |
|---|---|---|
| Invoice | Add invoice confirmation | $4,500 |
| Templates | Refactor templates to use the new templating library | $9,000 |
| Payments | Process payments using third party api | $5,400 |
| Account Management | Improve account management workflow | $6,000 |
<table class="table table-outline table-comfortable"> ... </table>
For text heavy pages (e.g., FAQ, APIs, Documentation, Pricing), or pages where there is one primary grid, a colored header may be appropriate. For tables immediately surrounded by other distinguishing elements, a clear header may be appropriate.
Similar to other components, the available styles are .table-{primary, success, info, warning, danger}, as well as table-inverse (black header) and table-clear (clear header).
| Project name | Description | Price |
|---|---|---|
| Invoice | Add invoice confirmation | $4,500 |
| Templates | Refactor templates to use the new templating library | $9,000 |
| Payments | Process payments using third party api | $5,400 |
| Account Management | Improve account management workflow | $6,000 |
<table class="table table-striped table-info"> ... </table>
A normal header scrolls with the data.
| Project name | Description | Price |
|---|---|---|
| Invoice | Add invoice confirmation | $4,500 |
| Templates | Refactor templates to use the new templating library | $9,000 |
| Payments | Process payments using third party api | $5,400 |
| Account Management | Improve account management workflow | $6,000 |
<table class="table">
<thead>
<tr>
<th>Project name</th>
<th>Description</th>
<th>Price</th>
</tr>
</thead>
<tbody> ... </tbody>
</table>
A fixed header remains visible as the table body is scrolled. This is useful for larger amounts of data.
| Project name | Description | Price |
|---|---|---|
| Invoice | Add invoice confirmation | $4,500 |
| Templates | Refactor templates to use the new templating library | $9,000 |
| Payments | Process payments using third party api | $5,400 |
| Account Management | Improve account management workflow | $6,000 |
| Invoice | Add invoice confirmation | $4,500 |
| Templates | Refactor templates to use the new templating library | $9,000 |
| Payments | Process payments using third party api | $5,400 |
| Account Management | Improve account management workflow | $6,000 |
| Invoice | Add invoice confirmation | $4,500 |
| Templates | Refactor templates to use the new templating library | $9,000 |
| Payments | Process payments using third party api | $5,400 |
| Account Management | Improve account management workflow | $6,000 |
| Invoice | Add invoice confirmation | $4,500 |
| Templates | Refactor templates to use the new templating library | $9,000 |
| Payments | Process payments using third party api | $5,400 |
| Account Management | Improve account management workflow | $6,000 |
If the content of the table is self-explanatory for your users, it may not need a header. Provide an alternative for sorting, if necessary (e.g., a toolbar with a dropdown).
| CSS is 20 years old today! 13 points and 4 comments - 2 days ago |
3.4% |
| Motion Experiments 31 points and 7 comments - 11 hours ago |
2.5% |
| Is everyone a designer? 15 points and 3 comments - 3 days ago |
0.0% |
| Introducing GIFV 24 points and 9 comments - 5 days ago |
0.1% |
<table class="table">
<tbody> ... </tbody>
</table>
Clicking a header cell sets that column as the currently sorted column. The first click should sort descending, the second click should sort ascending.
| Project name | Description | Price |
|---|---|---|
| Invoice | Add invoice confirmation | $4,500 |
| Templates | Refactor templates to use the new templating library | $9,000 |
| Payments | Process payments using third party api | $5,400 |
| Account Management | Improve account management workflow | $6,000 |
<table role="grid" class="table table-sortable table-bordered table-striped">
<thead>
<tr role="row">
<th scope="col" role="columnheader" aria-sort="ascending" class="sortable active" >Project name <i class="icon icon-caret-down"></i></th>
<th scope="col" role="columnheader" aria-sort="none" class="sortable">Description</th>
<th>Price</th>
</tr>
</thead>
...
</table>
When a table is sorted by multiple columns, the sort order is indicated by the superscript numbers.
Performing a shift+click on a header cell should add that column to the sorted list. A second shift+click on the same header cell should toggle the sort direction. A third shift+click on the same header cell should remove that column from the sort list. A left click should clear the sort list and then behave as a single sort.
| Event 1 | Date 2 | Module |
|---|---|---|
| user.create | 10/21/14 | Users |
| user.create | 10/19/14 | Users |
| user.register | 10/21/14 | Users |
| user.register | 10/18/14 | Users |
<table role="grid" class="table table-sortable table-bordered table-striped">
<thead>
<tr role="row">
<th scope="col" role="columnheader" aria-sort="other" class="sortable active">Event <i class="icon icon-caret-down"></i> <sup >1</sup></th>
<th scope="col" role="columnheader" aria-sort="none" class="sortable active">Date <i class="icon icon-caret-up"></i> <sup >2</sup></th>
<th>Module</th>
</tr>
</thead>
...
</table>
Checkboxes are generally the best way to facilitate multi-row selection, especially if clicking a row already has a different action (e.g., opening an email).
shift+click should select all items between the previoulsy clicked checkbox and the currently clicked checkbox.| Project name | Description | Price | |
|---|---|---|---|
| Payments | Process payments using third party api | $5,400 | |
| Invoice | Add invoice confirmation | $4,500 | |
| Templates | Refactor templates to use the new templating library | $9,000 | |
| Account Management | Improve account management workflow | $6,000 |
<table class="table">
<thead>
<tr>
<th style="width: 28px;"><input type="checkbox"></th>
<th>Project name</th>
<th>Description</th>
<th>Price</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox"></td>
<td>Payments</td>
<td><span >Process payments using third party api</span></td>
<td><span >$5,400</span></td>
</tr>
</tbody>
</table>
Buttons with the btn-hover and btn-icon-only classes.
|
IMG_234.jpg 2 days ago |
|
|
IMG_235.jpg 2 days ago |
|
|
IMG_236.jpg 2 days ago |
|
|
IMG_237.jpg 2 days ago |
<table class="table table-outline table-valign table-striped">
<tbody>
<tr>
<td>
<strong>IMG_234.jpg</strong><br><span >2 days ago</span>
</td>
<td class="text-right">
<button class="btn btn-hover btn-icon-only" title="Delete" data-toggle="tooltip">
<i class="icon text-muted icon-close"></i> <span class="sr-only">Delete</span>
</button>
<button class="btn btn-hover btn-icon-only" title="More options" data-toggle="tooltip">
<i class="icon text-muted icon-ellipsis-v"></i> <span class="sr-only">More</span>
</button>
</td>
</tr>
</tbody>
</table>
To provide column customization, add an icon to the top right corner of the table. Clicking on the icon will show the Show and hide columns dialog.
| Project name | Description | Price | |
|---|---|---|---|
| Invoice | Add invoice confirmation | $4,500 | |
| Templates | Refactor templates to use the new templating library | $9,000 | |
| Payments | Process payments using third party api | $5,400 | |
| Account Management | Improve account management workflow | $6,000 | |
<table class="table table-bordered">
<thead>
<tr>
<th>Project name</th>
<th>Description</th>
<th>Price</th>
<th class="table-config-column"><button type="button" data-container="body" title="Show and hide columns" data-toggle="tooltip"><i class="icon icon-ellipsis-h"></i></button></th>
</tr>
</thead>
...
</table>
This dialog provides the ability to show/hide columns as desired.
Row grouping allows users to show and hide sets of rows that share a similar attribute.
| Module 1 | Event 2 | Date 3 | |
|---|---|---|---|
| Module: User (2) | |||
| Event: Create (2) | |||
| Users | Create | 10/21/14 | |
| Users | Create | 10/19/14 | |
| Event: Register (2) | |||
Expandable rows provide additional information about a row on demand.
| Project name | Description | Price | |
|---|---|---|---|
| Invoice | Add invoice confirmation | $4,500 | |
| Payments | Process payments using third party api | $5,400 | |
|
|||