Due to the widespread use of <CTable>
elements across third-party widgets like calendars and date pickers, CoreUI's react tables are opt-in. All table styles are not inherited in CoreUI, meaning any nested tables can be styled independent from the parent.
Using the most basic table CoreUI, here's how <CTable>
-based tables look in CoreUI.
In version 4.3.0 we introduced a new way to create a table, similarly to our Smart Table component.
const columns = [
{
key: 'id',
label: '#',
_props: { scope: 'col' },
},
{
key: 'class',
_props: { scope: 'col' },
},
{
key: 'heading_1',
label: 'Heading',
_props: { scope: 'col' },
},
{
key: 'heading_2',
label: 'Heading',
_props: { scope: 'col' },
},
]
const items = [
{
id: 1,
class: 'Mark',
heading_1: 'Otto',
heading_2: '@mdo',
_cellProps: { id: { scope: 'row' } },
},
{
id: 2,
class: 'Jacob',
heading_1: 'Thornton',
heading_2: '@fat',
_cellProps: { id: { scope: 'row' } },
},
{
id: 3,
class: 'Larry the Bird',
heading_2: '@twitter',
_cellProps: { id: { scope: 'row' }, class: { colSpan: 2 } },
},
]
return <CTable columns={columns} items={items} />
You can also put all table components together manually as hitherto.
<CTable>
<CTableHead>
<CTableRow>
<CTableHeaderCell scope="col">#</CTableHeaderCell>
<CTableHeaderCell scope="col">Class</CTableHeaderCell>
<CTableHeaderCell scope="col">Heading</CTableHeaderCell>
<CTableHeaderCell scope="col">Heading</CTableHeaderCell>
</CTableRow>
</CTableHead>
<CTableBody>
<CTableRow>
<CTableHeaderCell scope="row">1</CTableHeaderCell>
<CTableDataCell>Mark</CTableDataCell>
<CTableDataCell>Otto</CTableDataCell>
<CTableDataCell>@mdo</CTableDataCell>
</CTableRow>
<CTableRow>
<CTableHeaderCell scope="row">2</CTableHeaderCell>
<CTableDataCell>Jacob</CTableDataCell>
<CTableDataCell>Thornton</CTableDataCell>
<CTableDataCell>@fat</CTableDataCell>
</CTableRow>
<CTableRow>
<CTableHeaderCell scope="row">3</CTableHeaderCell>
<CTableDataCell colSpan={2}>Larry the Bird</CTableDataCell>
<CTableDataCell>@twitter</CTableDataCell>
</CTableRow>
</CTableBody>
</CTable>
Both methods produce the same html code.
Variants#Use contextual classes to color react tables, table rows or individual cells.
Class Heading Heading Default Cell Cell Primary Cell Cell Secondary Cell Cell Success Cell Cell Danger Cell Cell Warning Cell Cell Info Cell Cell Light Cell Cell Dark Cell Cell<CTable>
<CTableHead>
<CTableRow>
<CTableHeaderCell scope="col">Class</CTableHeaderCell>
<CTableHeaderCell scope="col">Heading</CTableHeaderCell>
<CTableHeaderCell scope="col">Heading</CTableHeaderCell>
</CTableRow>
</CTableHead>
<CTableBody>
<CTableRow>
<CTableHeaderCell scope="row">Default</CTableHeaderCell>
<CTableDataCell>Cell</CTableDataCell>
<CTableDataCell>Cell</CTableDataCell>
</CTableRow>
<CTableRow color="primary">
<CTableHeaderCell scope="row">Primary</CTableHeaderCell>
<CTableDataCell>Cell</CTableDataCell>
<CTableDataCell>Cell</CTableDataCell>
</CTableRow>
<CTableRow color="secondary">
<CTableHeaderCell scope="row">Secondary</CTableHeaderCell>
<CTableDataCell>Cell</CTableDataCell>
<CTableDataCell>Cell</CTableDataCell>
</CTableRow>
<CTableRow color="success">
<CTableHeaderCell scope="row">Success</CTableHeaderCell>
<CTableDataCell>Cell</CTableDataCell>
<CTableDataCell>Cell</CTableDataCell>
</CTableRow>
<CTableRow color="danger">
<CTableHeaderCell scope="row">Danger</CTableHeaderCell>
<CTableDataCell>Cell</CTableDataCell>
<CTableDataCell>Cell</CTableDataCell>
</CTableRow>
<CTableRow color="warning">
<CTableHeaderCell scope="row">Warning</CTableHeaderCell>
<CTableDataCell>Cell</CTableDataCell>
<CTableDataCell>Cell</CTableDataCell>
</CTableRow>
<CTableRow color="info">
<CTableHeaderCell scope="row">Info</CTableHeaderCell>
<CTableDataCell>Cell</CTableDataCell>
<CTableDataCell>Cell</CTableDataCell>
</CTableRow>
<CTableRow color="light">
<CTableHeaderCell scope="row">Light</CTableHeaderCell>
<CTableDataCell>Cell</CTableDataCell>
<CTableDataCell>Cell</CTableDataCell>
</CTableRow>
<CTableRow color="dark">
<CTableHeaderCell scope="row">Dark</CTableHeaderCell>
<CTableDataCell>Cell</CTableDataCell>
<CTableDataCell>Cell</CTableDataCell>
</CTableRow>
</CTableBody>
</CTable>
Since version 4.3.0 also this way.
Accented tables# Striped rows#const columns = [
{ key: 'class', _props: { scope: 'col' } },
{ key: 'heading_1', label: 'Heading', _props: { scope: 'col' } },
{ key: 'heading_2', label: 'Heading', _props: { scope: 'col' } },
]
const items = [
{
class: 'Default',
heading_1: 'Cell',
heading_2: 'Cell',
_cellProps: { class: { scope: 'row' } },
},
{
class: 'Primary',
heading_1: 'Cell',
heading_2: 'Cell',
_cellProps: { class: { scope: 'row' } },
_props: { color: 'primary' },
},
{
class: 'Secondary',
heading_1: 'Cell',
heading_2: 'Cell',
_cellProps: { class: { scope: 'row' } },
_props: { color: 'secondary' },
},
{
class: 'Success',
heading_1: 'Cell',
heading_2: 'Cell',
_cellProps: { class: { scope: 'row' } },
_props: { color: 'success' },
},
{
class: 'Danger',
heading_1: 'Cell',
heading_2: 'Cell',
_cellProps: { class: { scope: 'row' } },
_props: { color: 'danger' },
},
{
class: 'Warning',
heading_1: 'Cell',
heading_2: 'Cell',
_cellProps: { class: { scope: 'row' } },
_props: { color: 'warning' },
},
{
class: 'Info',
heading_1: 'Cell',
heading_2: 'Cell',
_cellProps: { class: { scope: 'row' } },
_props: { color: 'info' },
},
{
class: 'Light',
heading_1: 'Cell',
heading_2: 'Cell',
_cellProps: { class: { scope: 'row' } },
_props: { color: 'light' },
},
{
class: 'Dark',
heading_1: 'Cell',
heading_2: 'Cell',
_cellProps: { class: { scope: 'row' } },
_props: { color: 'dark' },
},
]
return <CTable columns={columns} items={items} />
Use striped
property to add zebra-striping to any react table row within the <CTableBody>
.
Striped columns#<CTable striped>
...
</CTable>
Use stripedColumns
boolean property to add zebra-striping to any table column.
<CTable stripedColumns>
...
</CTable>
These classes can also be added to react table variants:
# Class Heading Heading 1 Mark Otto @mdo 2 Jacob Thornton @fat 3 Larry the Bird @twitter# Class Heading Heading 1 Mark Otto @mdo 2 Jacob Thornton @fat 3 Larry the Bird @twitter<CTable color="dark" striped>
...
</CTable>
# Class Heading Heading 1 Mark Otto @mdo 2 Jacob Thornton @fat 3 Larry the Bird @twitter<CTable color="dark" stripedColumns>
...
</CTable>
# Class Heading Heading 1 Mark Otto @mdo 2 Jacob Thornton @fat 3 Larry the Bird @twitter<CTable color="success" striped>
...
</CTable>
Hoverable rows#<CTable color="success" stripedColumns>
...
</CTable>
Use hover
property to enable a hover state on react table rows within a <CTableBody>
.
# Class Heading Heading 1 Mark Otto @mdo 2 Jacob Thornton @fat 3 Larry the Bird @twitter<CTable hover>
...
</CTable>
<CTable color="dark" hover>
...
</CTable>
These hoverable rows can also be combined with the striped variant:
# Class Heading Heading 1 Mark Otto @mdo 2 Jacob Thornton @fat 3 Larry the Bird @twitterActive tables#<CTable striped hover>
...
</CTable>
Highlight a table row or cell by adding a active
property.
As mentioned before since version 4.3.0 we have two ways to generate tables, also with custom properties for rows, and cells.
const columns = [
{
key: 'id',
label: '#',
_props: { scope: 'col' },
},
{
key: 'class',
_props: { scope: 'col' },
},
{
key: 'heading_1',
label: 'Heading',
_props: { scope: 'col' },
},
{
key: 'heading_2',
label: 'Heading',
_props: { scope: 'col' },
},
]
const items = [
{
id: 1,
class: 'Mark',
heading_1: 'Otto',
heading_2: '@mdo',
_props: { active: true },
_cellProps: { id: { scope: 'row' } },
},
{
id: 2,
class: 'Jacob',
heading_1: 'Thornton',
heading_2: '@fat',
_cellProps: { id: { scope: 'row' } },
},
{
id: 3,
class: 'Larry the Bird',
heading_2: '@twitter',
_cellProps: { id: { scope: 'row' }, class: { active: true, colSpan: 2 } },
},
]
return <CTable columns={columns} items={items} />
# Class Heading Heading 1 Mark Otto @mdo 2 Jacob Thornton @fat 3 Larry the Bird @twitter<CTable>
<CTableHead>
<CTableRow>
<CTableHeaderCell scope="col">#</CTableHeaderCell>
<CTableHeaderCell scope="col">Class</CTableHeaderCell>
<CTableHeaderCell scope="col">Heading</CTableHeaderCell>
<CTableHeaderCell scope="col">Heading</CTableHeaderCell>
</CTableRow>
</CTableHead>
<CTableBody>
<CTableRow active>
<CTableHeaderCell scope="row">1</CTableHeaderCell>
<CTableDataCell>Mark</CTableDataCell>
<CTableDataCell>Otto</CTableDataCell>
<CTableDataCell>@mdo</CTableDataCell>
</CTableRow>
<CTableRow>
<CTableHeaderCell scope="row">2</CTableHeaderCell>
<CTableDataCell>Jacob</CTableDataCell>
<CTableDataCell>Thornton</CTableDataCell>
<CTableDataCell>@fat</CTableDataCell>
</CTableRow>
<CTableRow>
<CTableHeaderCell scope="row">3</CTableHeaderCell>
<CTableDataCell colSpan={2} active>
Larry the Bird
</CTableDataCell>
<CTableDataCell>@twitter</CTableDataCell>
</CTableRow>
</CTableBody>
</CTable>
Table borders# Bordered tables#const columns = [
{
key: 'id',
label: '#',
_props: { scope: 'col' },
},
{
key: 'class',
_props: { scope: 'col' },
},
{
key: 'heading_1',
label: 'Heading',
_props: { scope: 'col' },
},
{
key: 'heading_2',
label: 'Heading',
_props: { scope: 'col' },
},
]
const items = [
{
id: 1,
class: 'Mark',
heading_1: 'Otto',
heading_2: '@mdo',
_props: { active: true },
_cellProps: { id: { scope: 'row' } },
},
{
id: 2,
class: 'Jacob',
heading_1: 'Thornton',
heading_2: '@fat',
_cellProps: { id: { scope: 'row' } },
},
{
id: 3,
class: 'Larry the Bird',
heading_2: '@twitter',
_cellProps: { id: { scope: 'row' }, class: { active: true, colSpan: 2 } },
},
]
return <CTable color="dark" columns={columns} items={items} />
Add bordered
property for borders on all sides of the table and cells.
<CTable bordered>
...
</CTable>
Border color utilities can be added to change colors:
# Class Heading Heading 1 Mark Otto @mdo 2 Jacob Thornton @fat 3 Larry the Bird @twitterTables without borders#<CTable bordered borderColor="primary">
...
</CTable>
Add borderless
property for a react table without borders.
# Class Heading Heading 1 Mark Otto @mdo 2 Jacob Thornton @fat 3 Larry the Bird @twitter<CTable borderless>
...
</CTable>
Small tables#<CTable color="dark" borderless>
...
</CTable>
Add small
property to make any <CTable>
more compact by cutting all cell padding
in half.
Vertical alignment#<CTable small>
...
</CTable>
Table cells of <CTableHead>
are always vertical aligned to the bottom. Table cells in <CTableBody>
inherit their alignment from <CTable>
and are aligned to the the top by default. Use the align property to re-align where needed.
vertical-align: middle;
from the table This cell inherits vertical-align: middle;
from the table This cell inherits vertical-align: middle;
from the table This here is some placeholder text, intended to take up quite a bit of vertical space, to demonstrate how the vertical alignment works in the preceding cells. This cell inherits vertical-align: bottom;
from the table row This cell inherits vertical-align: bottom;
from the table row This cell inherits vertical-align: bottom;
from the table row This here is some placeholder text, intended to take up quite a bit of vertical space, to demonstrate how the vertical alignment works in the preceding cells. This cell inherits vertical-align: middle;
from the table This cell inherits vertical-align: middle;
from the table This cell is aligned to the top. This here is some placeholder text, intended to take up quite a bit of vertical space, to demonstrate how the vertical alignment works in the preceding cells.
In version 4.3.0 we introduced a new way to create a table, similarly to our Smart Table component.
const columns = [
{
key: 'heading_1',
_props: { className: 'w-25', scope: 'col' },
},
{
key: 'heading_2',
_props: { className: 'w-25', scope: 'col' },
},
{
key: 'heading_3',
_props: { className: 'w-25', scope: 'col' },
},
{
key: 'heading_4',
_props: { className: 'w-25', scope: 'col' },
},
]
const items = [
{
heading_1: <>This cell inherits <code>vertical-align: middle;</code> from the table</>,
heading_2: <>This cell inherits <code>vertical-align: middle;</code> from the table</>,
heading_3: <>This cell inherits <code>vertical-align: middle;</code> from the table</>,
heading_4: 'This here is some placeholder text, intended to take up quite a bit of vertical space, to demonstrate how the vertical alignment works in the preceding cells.',
},
{
heading_1: <>This cell inherits <code>vertical-align: bottom;</code> from the table row</>,
heading_2: <>This cell inherits <code>vertical-align: bottom;</code> from the table row</>,
heading_3: <>This cell inherits <code>vertical-align: bottom;</code> from the table row</>,
heading_4: 'This here is some placeholder text, intended to take up quite a bit of vertical space, to demonstrate how the vertical alignment works in the preceding cells.',
_props: { align: 'bottom' }
},
{
heading_1: <>This cell inherits <code>vertical-align: middle;</code> from the table</>,
heading_2: <>This cell inherits <code>vertical-align: middle;</code> from the table</>,
heading_3: 'This cell is aligned to the top.',
heading_4: 'This here is some placeholder text, intended to take up quite a bit of vertical space, to demonstrate how the vertical alignment works in the preceding cells.',
_cellProps: { heading_3: { align: 'top' }},
},
]
return <CTable align="middle" columns={columns} items={items} />
You can also put all table components together manually as hitherto.
Nesting#<CTable align="middle" responsive>
<CTableHead>
<CTableRow>
<CTableHeaderCell scope="col" className="w-25">
Heading 1
</CTableHeaderCell>
<CTableHeaderCell scope="col" className="w-25">
Heading 2
</CTableHeaderCell>
<CTableHeaderCell scope="col" className="w-25">
Heading 3
</CTableHeaderCell>
<CTableHeaderCell scope="col" className="w-25">
Heading 4
</CTableHeaderCell>
</CTableRow>
</CTableHead>
<CTableBody>
<CTableRow>
<CTableDataCell>
This cell inherits <code>vertical-align: middle;</code> from the table
</CTableDataCell>
<CTableDataCell>
This cell inherits <code>vertical-align: middle;</code> from the table
</CTableDataCell>
<CTableDataCell>
This cell inherits <code>vertical-align: middle;</code> from the table
</CTableDataCell>
<CTableDataCell>
This here is some placeholder text, intended to take up quite a bit of vertical space, to
demonstrate how the vertical alignment works in the preceding cells.
</CTableDataCell>
</CTableRow>
<CTableRow align="bottom">
<CTableDataCell>
This cell inherits <code>vertical-align: bottom;</code> from the table row
</CTableDataCell>
<CTableDataCell>
This cell inherits <code>vertical-align: bottom;</code> from the table row
</CTableDataCell>
<CTableDataCell>
This cell inherits <code>vertical-align: bottom;</code> from the table row
</CTableDataCell>
<CTableDataCell>
This here is some placeholder text, intended to take up quite a bit of vertical space, to
demonstrate how the vertical alignment works in the preceding cells.
</CTableDataCell>
</CTableRow>
<CTableRow>
<CTableDataCell>
This cell inherits <code>vertical-align: middle;</code> from the table
</CTableDataCell>
<CTableDataCell>
This cell inherits <code>vertical-align: middle;</code> from the table
</CTableDataCell>
<CTableDataCell align="top">This cell is aligned to the top.</CTableDataCell>
<CTableDataCell>
This here is some placeholder text, intended to take up quite a bit of vertical space, to
demonstrate how the vertical alignment works in the preceding cells.
</CTableDataCell>
</CTableRow>
</CTableBody>
</CTable>
Border styles, active styles, and react table component variants are not inherited by nested tables.
# Class Heading Heading 1 Mark Otto @mdo Header Header Header A First Last B First Last C First Last 3 Larry the Bird @twitterAnatomy# Table head#<CTable striped>
<CTableHead>
<CTableRow>
<CTableHeaderCell scope="col">#</CTableHeaderCell>
<CTableHeaderCell scope="col">Class</CTableHeaderCell>
<CTableHeaderCell scope="col">Heading</CTableHeaderCell>
<CTableHeaderCell scope="col">Heading</CTableHeaderCell>
</CTableRow>
</CTableHead>
<CTableBody>
<CTableRow>
<CTableHeaderCell scope="row">1</CTableHeaderCell>
<CTableDataCell>Mark</CTableDataCell>
<CTableDataCell>Otto</CTableDataCell>
<CTableDataCell>@mdo</CTableDataCell>
</CTableRow>
<CTableRow>
<CTableHeaderCell colSpan={4}>
<CTable>
<CTableHead>
<CTableRow>
<CTableHeaderCell scope="col">Header</CTableHeaderCell>
<CTableHeaderCell scope="col">Header</CTableHeaderCell>
<CTableHeaderCell scope="col">Header</CTableHeaderCell>
</CTableRow>
</CTableHead>
<CTableBody>
<CTableRow>
<CTableHeaderCell scope="row">A</CTableHeaderCell>
<CTableDataCell>First</CTableDataCell>
<CTableDataCell>Last</CTableDataCell>
</CTableRow>
<CTableRow>
<CTableHeaderCell scope="row">B</CTableHeaderCell>
<CTableDataCell>First</CTableDataCell>
<CTableDataCell>Last</CTableDataCell>
</CTableRow>
<CTableRow>
<CTableHeaderCell scope="row">C</CTableHeaderCell>
<CTableDataCell>First</CTableDataCell>
<CTableDataCell>Last</CTableDataCell>
</CTableRow>
</CTableBody>
</CTable>
</CTableHeaderCell>
</CTableRow>
<CTableRow>
<CTableHeaderCell scope="row">3</CTableHeaderCell>
<CTableDataCell colSpan={2}>Larry the Bird</CTableDataCell>
<CTableDataCell>@twitter</CTableDataCell>
</CTableRow>
</CTableBody>
</CTable>
Similar to tables and dark tables, use the modifier prop color="light"
or color="dark"
to make <CTableHead>
s appear light or dark gray.
<CTable>
<CTableHead color="light">
...
</CTableHead>
<CTableBody>
...
</CTableBody>
</CTable>
If you generate a table using the new method incorporated in version 4.3.0, you have to use tableHeadProps
property to pass properties to the table header component.
# Class Heading Heading 1 Mark Otto @mdo 2 Jacob Thornton @fat 3 Larry the Bird @twitterconst columns = [...]
const items = [...]
return <CTable columns={columns} items={items} tableHeadProps={{ color: 'light' }} />
<CTable>
<CTableHead color="dark">
...
</CTableHead>
<CTableBody>
...
</CTableBody>
</CTable>
Starting from version 4.3.0 also this way.
# Class Heading Heading 1 Mark Otto @mdo 2 Jacob Thornton @fat 3 Larry the Bird @twitter Footer Footer Footer Footerconst columns = [...]
const items = [...]
return <CTable columns={columns} items={items} tableHeadProps={{ color: 'dark' }} />
<CTable>
<CTableHead color="light">
...
</CTableHead>
<CTableBody>
...
<CTableHead>
<CTableRow>
<CTableDataCell>Footer</CTableDataCell>
<CTableDataCell>Footer</CTableDataCell>
<CTableDataCell>Footer</CTableDataCell>
<CTableDataCell>Footer</CTableDataCell>
</CTableRow>
</CTableHead>
</CTable>
Starting from version 4.3.0 also this way.
Captions#const columns = [...]
const footer = [
'Footer',
'Footer',
'Footer',
'Footer',
]
const items = [...]
return <CTable columns={columns} footer={footer} items={items} tableHeadProps={{ color: 'light' }}/>
A <CTableCaption>
functions like a heading for a table. It helps users with screen readers to find a table and understand what it's about and decide if they want to read it.
<CTable>
<CTableCaption>List of users</CTableCaption>
<CTableHead>
...
</CTableHead>
<CTableBody>
...
</CTableBody>
</CTable>
Starting from version 4.3.0 also this way.
const columns = [...]
const items = [...]
return <CTable caption="List of users" columns={columns} items={items} />
You can also put the <CTableCaption>
on the top of the table with caption="top"
.
<CTable caption="top">
<CTableCaption>List of users</CTableCaption>
<CTableHead>
...
</CTableHead>
<CTableBody>
...
</CTableBody>
</CTable>
Since version 4.3.0 also this way.
Responsive tables#const columns = [...]
const items = [...]
return <CTable captionTop="List of users" columns={columns} items={items} />
Responsive tables allow tables to be scrolled horizontally with ease. Make any table responsive across all viewports by adding a responsive
property. Or, pick a maximum breakpoint with which to have a responsive table up to by using responsive="{-sm|-md|-lg|-xl|-xxl}"
.
# Heading Heading Heading Heading Heading Heading Heading Heading 1 Cell Cell Cell Cell Cell Cell Cell Cell 2 Cell Cell Cell Cell Cell Cell Cell Cell 3 Cell Cell Cell Cell Cell Cell Cell Cell<CTable responsive>
...
</CTable>
# Heading Heading Heading Heading Heading Heading Heading Heading 1 Cell Cell Cell Cell Cell Cell Cell Cell 2 Cell Cell Cell Cell Cell Cell Cell Cell 3 Cell Cell Cell Cell Cell Cell Cell Cell<CTable responsive="sm">
...
</CTable>
# Heading Heading Heading Heading Heading Heading Heading Heading 1 Cell Cell Cell Cell Cell Cell Cell Cell 2 Cell Cell Cell Cell Cell Cell Cell Cell 3 Cell Cell Cell Cell Cell Cell Cell Cell<CTable responsive="md">
...
</CTable>
# Heading Heading Heading Heading Heading Heading Heading Heading 1 Cell Cell Cell Cell Cell Cell Cell Cell 2 Cell Cell Cell Cell Cell Cell Cell Cell 3 Cell Cell Cell Cell Cell Cell Cell Cell<CTable responsive="lg">
...
</CTable>
# Heading Heading Heading Heading Heading Heading Heading Heading 1 Cell Cell Cell Cell Cell Cell Cell Cell 2 Cell Cell Cell Cell Cell Cell Cell Cell 3 Cell Cell Cell Cell Cell Cell Cell Cell<CTable responsive="xl">
...
</CTable>
API#<CTable responsive="xxl">
...
</CTable>
Check out the documentation below for a comprehensive guide to all the props you can use with the components mentioned here.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4