Browse Components

Components

Table

Tables are used to display collections of data in organised rows and columns.

DesignUsageAccessibilityUpdates

Purpose

Compare structured data

Use tables when each record shares the same fields.

Handle dense records

Rows and columns give repeated information a predictable position.

Support row actions

Include links or controls, with behaviour handled by your application.

Anatomy

ServiceOwnerStatusCitizen portalGovTechLiveBooking systemNLBBeta
1

Header row

2

Data row

3

Data cell

4

Border (optional)

5

Header cell

6

Header background (optional)

7

Row divider (bottom)

Configuration

Header position

Use headerPosition with rowHeader, columnHeader and tableData to generate headers across the top, down the side, or both. When using slotted rows, arrange the headers manually.

Headers across the top. Most common arrangement for tabular data.

Header background

Use headerBackground to apply a tinted fill to the header cells for stronger visual separation from the body.

Application IDSubmittedStatusAPP-042112 Mar 2026In reviewAPP-042213 Mar 2026Approved

Plain header. Suits tables embedded in low-contrast surfaces.

Table border

Use tableBorder to add an outer border to a table with slotted rows. Horizontal row dividers remain visible with or without this option.

RegionPopulationAreaCentral950,000132.7East720,00093.1

Horizontal dividers separate rows without an outer border.

Horizontal scrolling

Keep wide tables in a labelled, keyboard-focusable container that scrolls horizontally. Rows and columns keep their structure. The legacy responsive property is deprecated.

NameStatusOwnerAlphaActiveTeam ABetaPendingTeam B

Focus the container and use the Left and Right arrow keys to scroll when the table is wider than the available space.

Table layout

Table layout controls whether columns size automatically or use fixed distribution.

NameStatusOwnerAlphaActiveTeam ABetaPendingTeam B

Use auto layout when content length should influence column sizing.

Structure

NameStatusOwnerAlphaActiveTeam ABetaPendingTeam BGammaClosedTeam C

Design tokens used

Each row is a colour, spacing, or size value the component uses, and the right-most column tells you where in the component you'll see it.

CategoryTokenValueWhere it's usedPaddingsgds-padding-md16pxSpace between the left and right edges of the component and its contentsgds-padding-sm—Space between the top and bottom edges of the component and its contentBordersgds-border-width-0Width variesRow border resetsgds-border-width-11pxHorizontal dividers below header and data cellsTypographysgds-font-weight-semibold—Header text weightSizesgds-dimension-56—Minimum height of the table cell; minimum height of the table head

Usage

When to use

  • Use a table to present static or already-prepared information in rows and columns, so users can easily scan and compare values.
  • Use it when you only need to display tabular information. A table does not manage behaviours such as sorting, pagination, row selection, loading states or expandable rows.
  • You can still use a table if you need custom interactions, but these behaviours need to be handled separately by your application.

When not to use

  • Do not use a table when users need built-in features to navigate or manage a dataset, such as sorting, pagination, row selection or expandable rows. Use a data table instead.
  • Do not use a table for information that is better presented as a list, card or description list.

Best practices

Application IDSubmittedStatusAPP-042112 Mar 2026In reviewAPP-042213 Mar 2026ApprovedAPP-042314 Mar 2026Rejected
Keep related values in consistent columns

Put the same type of information in each column so users can compare records.

NameEmailRoleLim Wei Mingwei.ming@example.gov.sgOfficer
Do not force item details into a table

Consider a description list when presenting one item’s details, such as its name, email, and role.

ServiceOwnerStatusCitizen portalGovTechLiveBooking systemNLBBeta
Use descriptive column headers

Choose headers that explain the values below them, such as “Service”, “Owner”, and “Status”.

NameStatusEditDeleteShareArchiveAlphaActiveEditDeleteShareArchive
Do not crowd rows with actions

Keep primary actions visible. Group secondary actions in an overflow menu when space is limited.

Accessibility considerations

Built-in accessibility

  • The component provides table, row, header and cell semantics for structured data.
  • The table wrapper is focusable, including when the legacy responsive property is not set. It does not provide spreadsheet-style cell navigation.

Labels and content

  • Use clear headers. For row headers, use the data-generated table with headerPosition rather than assuming a slotted header becomes a row header when moved to the left. Slotted sgds-table-head elements use the columnheader role.
  • Keep cell content concise and avoid using tables for page layout.
  • Give repeated action links or buttons labels that identify the record, such as “View application APP-0421”.

Focus and interaction

  • Keep interactive elements in the same order as the table content. Ordinary data cells do not need to be in the Tab sequence.
  • Preserve headers when adapting tables to smaller screens. Give any horizontal scroll region an accessible name, keyboard focus and a visible focus indicator.

Keyboard interaction

KeyInteractionTabMoves focus through the table wrapper, any focusable scroll region and links or controls in reading order. It does not visit every data cell.Shift+TabMoves focus to the previous focusable element.LeftorRight arrowScrolls a focused horizontal scroll region when its content overflows. This is browser scrolling, not cell navigation.EnterorSpaceActivates focused controls according to their native behaviour: Enter for links; Enter or Space for buttons.

Updates

DateVersionDescription23 Jun 2026v3.22.0Resolve aria-required-children violation on role="table" in #709.19 May 2026v3.19.1Sgds-table prop not reflected, causing layout not to work in #670.13 May 2026v3.19.0Update table and textarea styling in #651.13 May 2026v3.19.0Created new prop for table-layout in #659.16 Feb 2026v3.10.0New static table styles in #537.

Roadmap

Planned itemStatusTargetNo confirmed roadmap items are documented for Table.——

Feedback

Have suggestions or feedback?

Share them with us on Slack → #ask-sgds-v3

Bug reports

Found a bug or issue?

Report it on GitHub Issues → sgds-web-component

Singapore Government Design System

The Singapore Government Design System was developed to empower teams in creating fast, accessible and mobile-friendly digital services.

Past VersionsSGDS v1SGDS v2