Description

Tables display information in a tabular structure of rows and columns, allowing users to see multiple points of data at once, and to read their contents to find patterns, draw valuable insights, and take meaningful action.

This article focuses on the distinct use of a , as opposed to it being used as a component. While the same general Fiori specifications apply to both instances, they need to be optimized differently to support their use cases better. How does one decide whether they need a table as a floorplan or a component?

<div> <div>Table as Floorplan:</div> <div>Table as Component:</div> </div> <div> <div> <ul> <li>Supports and executes the main workflow.</li> <li>Fills the entire content area of the screen.</li> <li>Uses one single global toolbar instead of a global toolbar and a separate table toolbar.</li> <li>Optimized for the bulk of the user's attention and interactions on that screen.</li> </ul> </div> <div> <ul> <li>Used as one of two or more tables or other components in the same screen.</li> <li>Requires its own individual table toolbars independent from the global toolbar.</li> <li>Consists of smaller row and column counts.</li> <li>Uses <a href="https%3A%2F%2Fexperience.sap.com%2Ffiori-design-web%2Fp13n-dialog%2F">Fiori’s table controls</a>.</li> </ul> </div> </div>
warning
If using tables as a component, please refer to the Fiori guidelines for Tables instead of this article.

Usage

Use tables to organize information that needs to have its precise values looked at, inspected, and referenced. Tables have a wide range of application depending on the use case and are commonly used for databases, spreadsheets, repositories, and other complex multi-column lists.

Anatomy

Styles

Density

General table specifications by Fiori offer two density options for desktop tables: compact and condensed. density allows rows to appear closer to each other, but the shorter row height will reduce the table’s readability. Use density at default and for most standard cases, and when possible, offer the option to change density settings. density is reserved touchscreen devices.

Image

Grid

Horizontal and vertical lines are used to form a grid and create the clearest separation between data values in the form of data cells. This heavy structure can feel cluttered and makes rows difficult to read line by line. This style is the most suitable for dense tables with high volumes of data.

Horizontal Lines

Horizontal lines reduce the noise and lessens the impact of a full grid. This style relies on white space and continuous border lines to help users stay in place when scanning a table line by line. This style is the most useful when a table doesn’t require sideways-scrolling.

Image
Image

Zebra Stripes

Zebra stripes are used similarly to horizontal lines. However, they can cause difficulties where interactive states compete with the stripes. And in low quality monitors where the slight colour variance is difficult to perceive by users with visual impairments.

Zebra stripes become the most useful when paired up with horizontal lines or for read-only tables.

Behavior & Interactions

Scroll

Tables can be scrolled in up-down or left-right orientations. When scrolling large tables with high volumes of data, consider employing sticky headers that follow the users when scrolling vertically, and make the first column follow the users when scrolling horizontally.

Sort

Tables can be sorted to arrange data values on display in a different order. If there are more than 20 columns in a table, use a P13n dialog for this action. Additionally, one or both methods below may also be used:

Filter

Filtering a table allow users to focus on a specific set of values and remove from view everything else that is irrelevant. If there are more than 20 columns in a table, use a P13n dialog for this action. If there are less, use a filter bar above the table. For tables that require filtering based on a few categories, use a menu with a checklist at the table header section.

Show and Hide

Use show and hide to configure the columns on display at any given time. If there are more than 20 columns in a table, use a P13n dialog for this action. If there are less, use a menu with a checklist at the table header section to turn on or off the columns in shown on view.

guideline
P13n DialogSort, filter, group, show/hide columns, and reorder columns can be achieved with a standardized P13n dialog. This standardized dialog designed by the central Fiori team was created for a consistent way of handling these generic table action. Use this dialog for any table that contains, or has the potential to reach, 20 or more columns.

Resize Column

Columns should show as much of a value as possible. When needed, a column’s width can be enlarged by dragging the border line between two columns. Employ cap limits on min and max widths to avoid situations where a column is completely hidden into obscurity or blown up to an unmanageable size. Ensure that data values are truncated when the column is resized.

This interaction can be used in tables with visible transparent vertical borders.

In-Line Actions

Table may contain icon-only buttons to trigger actions directly on the row or cell itself. This is useful for simple or common actions such as ranking, favouriting, sharing, or flagging a row or cell item with a marking. See content level actions for more information.

Favoriting a file in the File Repository

Selection

Below is a list of the most common selection behaviors and interactions used in table floorplans today.

Hover.png

Hover

Mouse over an item to show where the mouse pointer is positioned.

Select.png

Select

Click on a value to select it. The bottom border line is needed for accessibility.

Select Editable.png

Select Editable

Click on a value to select it. Active cells that support text input are shown by highlighting the cell border and text.

Drag Select.png

Drag Select

Click, hold, and drag to select more than one cell at once.

Batch Select.png

Batch Select

Click on a value, and all other cells with the same value are also selected.

Shift Select.png

Shift Select

Select a second value while pressing the shift key to select all values in between.

Control Command Select.png

Ctrl / Command Select

Press the Ctrl (Windows) or command (Mac) key while clicking to add additional values to your selection.

Multi Select.png

Row / Multi Select

Select one or more rows by enlisting a column of checkboxes on the left-most side of a table.

Select All (multi).png

Select All Rows

The Select All button selects or deselects all rows. Found on the column header.

Select Column.png

Select Column

Click on a column header to select the entire column. Can also be Shift selected, or Ctrl / Command selected

Select All (alt).png

Select All Rows and Columns

Select all rows and columns by by clicking on the Select All button on the top-left corner of the table.

Best Practices

Design for Scannability

Well-designed tables use a variety of strategies to ensure the table is easy to read, scan, and parse through data. Some strategies to ensure a table is easier to scan:

Select the most appropriate row density and style for the volume of data the table will need to support. When uncertain, offer users the option of configuring this for themselves.

When possible, table columns are organized in order of most important to least important columns, from left to right, to reduce the need for horizontal scrolling.

Leave enough space for the "bigger picture", use truncation when necessary so that despite how long the item in each column may be, the table retains an organized look. Users can resize columns at their own will.

Text values are commonly left-aligned, numeric values are commonly right­-aligned. Not only is this consistent with industry standards, but it makes numbers easier to read, identify their quantity or monetary value, and compare it between other rows. Column headers should align with column data.

Text values are left-aligned, numeric values are right-aligned.

Column headers align with the data.

Design for Findability

Tables are ideal for showing multiple points of data at once, but it is frustrating to users when they can’t find the data they are looking for. Consider the following best practices to improve findability:

Promote higher levels of findability in tables by offering the ability to search, sort, filter, and show and hide columns. The higher the volume of data in a table, the more crucial these features become. Different patterns for each are covered in this guideline, or use the P13n dialog for tables of 20 columns of more.

Employ an optional index column with row numbers or use optional pagination to help users orient themselves within the table to reference rows and pages by number.

Design for Efficiency

With the potential of hundreds of columns and thousands of rows, table floorplans need to be optimized for a high degree of efficiency.

Users can skim through data columns much more quickly than horizontal rows. Additionally, vertically aligned content is easier to compare than horizontal. If there is no way getting around a wide table, give users the option to pivot the table when and where possible.

Tables are used precisely because users need to see multiple entries at once, so preserve that context so they don't have to leave their place in order to perform an action or look at additional detail. This can be done in a variety of ways using existing patterns and components:

Preserving the context with sticky columns and column headers

Help users save time by allowing them to act on multiple values at the same time. A classic example uses checkboxes to select multiple rows and acting on them all at once. Another example are the contextual toolbars used in data wrangling that allow users to perform a data transformation on an entire selection, be it a column, multiple rows, or multiple values.

Using the tile toolbar for performing a data transformation on an entire column of data.

Optimize tables to accommodate different ways of executing repetitive tasks or actions. This will allow users to pick whichever method they are most comfortable with without sacrificing the experience. Consider undo/redo as an example; there are several ways that this function can be executed:

Not only does this promote a high level of flexibility and ease of use, but also accommodates novice and more advanced users alike.

Specifications

If you are not using UI5, please follow all Table general specifications as outlined by Fiori's Visual Core wiki.

Rows and Cells

Normal

<div> <div>Badge</div> <div>Component</div> <div>Specification</div> <div>Details</div> </div> <div> <div></div> <div></div> <div> <ul> <li><em>Compact:</em> 2rem, 32px</li> <li><em>Condensed:</em> 1.5rem, 24px</li> </ul> <p>--sapList_Background,</p> <p>0.063rem solid</p> <ul> <li><em>Bottom:</em> --sapList_BorderColor;</li> <li><em>Sides:</em> --sapList_BorderColor;</li> </ul> <p>--sapFontFamily;</p> <p>--sapFontSize;</p> <p>normal;</p> <p>vertically centered</p> <p>--sapList_TextColor;</p> <p>First column takes extra padding only in the absence of column with selector checkbox or column with row number. <a href="https%3A%2F%2Fexperience.sap.com%2Ffiori-design-web%2Fp13n-dialog%2F%23Table(Fiori3)GeneralSpecification-GridTable-FirstColumnPaddingException">Learn more.</a></p> <ul> <li><em>Left (first column):</em> 1rem</li> <li><em>Left (other columns):</em> 0.5rem</li> <li><em>Right:</em> 0.5rem</li> <li><em>Non-interactive:</em> 0.75rem, 2rem container, center alignment<br>--sapContent_NonInteractiveIconColor;</li> <li><em>Interactive:</em> <a href="https%3A%2F%2Fbtpx.frontify.com%2Fdocument%2F223118%23%2Fapi%2Fsap.m.Button">sap.m.Button</a></li> </ul> </div> <div> <ul> <li><em>Compact:</em> 32px</li> <li><em>Condensed:</em> 24px</li> </ul> <p>#FFFFFF</p> <p>1px solid</p> <ul> <li><em>Bottom:</em> #E5E5E5</li> <li><em>Sides:</em> #E5E5E5</li> </ul> <p>72</p> <p>14</p> <p>regular</p> <p>vertically centered</p> <p>#32363A</p> <p>First column takes extra padding only in the absence of column with selector checkbox or column with row number. <a href="https%3A%2F%2Fwiki.wdf.sap.corp%2Fwiki%2Fdisplay%2Fvisualcore%2FTable%2B%2528Fiori%2B3%2529%2B-%2BGeneral%2BSpecification%23Table(Fiori3)GeneralSpecification-GridTable-FirstColumnPaddingException">Learn More.</a></p> <ul> <li><em>Left (first column):</em> 16px</li> <li><em>Left (other columns):</em> 8px</li> <li><em>Right:</em> 8px</li> <li><em>Non-interactive:</em> 12px, 32px container, center alignment, #6A6D70</li> <li><em>Interactive:</em> <a href="https%3A%2F%2Fexperience.sap.com%2Ffiori-design-web%2Ftable-overview%2F%3FpageId%3D2025039257%23Button(Fiori3)-TertiaryTransparentHighlightButton">tertiary transparent highlight button</a></li> </ul> </div> </div> <div> <div></div> <div></div> <div> <p>--sapList_Hover_Background;</p> <p>0.063rem solid</p> <p>--sapList_BorderColor;</p> </div> <div> <p>#F5F5F5</p> <p>1px solid, #E5E5E5</p> </div> </div> <div> <div></div> <div></div> <div> <p>--sapList_Active_Background;</p> <p>--sapList_SelectionBorderColor;</p> <p>--sapList_Active_TextColor;</p> <p>--sapContent_ContrastIconColor;</p> </div> <div> <p>#0854A0</p> <p>#0854A0</p> <p>#FFFFFF</p> <p>#FFFFFF</p> </div> </div> <div> <div></div> <div></div> <div> <p>--sapList_SelectionBackgroundColor;</p> <p>0.063rem solid--sapList_SelectionBorderColor;</p> </div> <div> <p>#E5F0FA</p> <p>#0854A0</p> </div> </div> <div> <div></div> <div></div> <div> <p>@sapUiFieldActiveBorderColor</p> <p>@sapUiContentContrastTextColor</p> <p>Color@sapUiSelected</p> <p>See also <a href="https%3A%2F%2Fwiki.wdf.sap.corp%2Fwiki%2Fpages%2Fviewpage.action%3FpageId%3D2046200672%23Text(Fiori3)-TextSelection(Highlighting)">text selection state</a></p> <p>* When an editable cell is selected, the bottom border of the cell above it is also highlighted to create a full box around the editable cell.</p> </div> <div> <p>#0854A0</p> <p>#FFFFFF</p> <p>#0854A0</p> <p>See also <a href="https%3A%2F%2Fsapui5.hana.ondemand.com%2F%3FpageId%3D2046200672%23Text(Fiori3)-TextSelection(Highlighting)">text selection state</a></p> <p>* When an editable cell is selected, the bottom border of the cell above it is also highlighted to create a full box around the editable cell.</p> </div> </div> <div> <div></div> <div></div> <div> <p>--sapList_Hover_SelectionBackground;</p> <p>0.063rem solid,</p> <p>--sapList_SelectionBorderColor;</p> </div> <div> <p>#D8E9F8</p> <p>1px solid, #0854A0</p> </div> </div>

Zebra Stripe

Or alternating row colours

<div> <div>Badge</div> <div>Component</div> <div>Specification</div> <div>Details</div> </div> <div> <div></div> <div></div> <div> <p>--sapList_Background and @sapUiListAlternatingBackground used in alternating rows.</p> <p>1px solid @sapUiListBorderColor;</p> </div> <div> <p>#FFFFFF and F7F7F7 used in alternating rows</p> <p>1px solid, #E5E5E5</p> </div> </div> <div> <div></div> <div></div> <div>--sapList_Hover_Background;</div> <div>#F5F5F5</div> </div> <div> <div></div> <div></div> <div> <p>--sapList_SelectionBackgroundColor;</p> <p>0.063rem solid</p> <p>--sapList_SelectionBorderColor;</p> </div> <div> <p>#E5F0FA</p> <p>1px solid, #0854A0</p> </div> </div> <div> <div></div> <div></div> <div> <p>--sapList_Hover_SelectionBackground;</p> <p>0.063rem solid,</p> <p>--sapList_SelectionBorderColor;</p> </div> <div> <p>#D8E9F8</p> <p>1px solid, #0854A0</p> </div> </div>

Column Headers

For fixed column and headers, please see Freeze / Fixed Column and Rowin the Visual Core Wiki. Follow the same specifications for first column with row numbers.

<div> <div>Badge</div> <div>Component</div> <div>Specifications</div> <div>Details</div> </div> <div> <div></div> <div></div> <div> <ul> <li><em>Compact:</em> 2rem</li> <li><em>Condensed:</em> 2rem</li> </ul> <p>--sapList_HeaderBackground</p> <p>0.063rem solid</p> <ul> <li><em>Bottom:</em> --sapList_BorderColor;</li> <li><em>Left / Right:</em> --sapList_BorderColor;</li> </ul> <p>--sapFontFamily;</p> <p>--sapFontSize;</p> <p>normal</p> <p>vertically centered</p> <p>--sapList_HeaderTextColor;</p> <p>First column takes extra padding only in the absence of column with selector checkbox or column with row number. <a href="https%3A%2F%2Fwiki.wdf.sap.corp%2Fwiki%2Fpages%2Fviewpage.action%23Table(Fiori3)GeneralSpecification-GridTable-FirstColumnPaddingException">Learn more.</a></p> <ul> <li><em>Left (first column):</em> 1rem</li> <li><em>Left (other columns):</em> 0.5rem</li> <li><em>Right:</em> 0.5rem</li> </ul> <p>0.75rem</p> <p>2rem</p> <p>centered</p> <ul> <li><em>Interactive:</em> sapContent_IconColor;</li> <li><em>Non-interactive:</em><br>--sapContent_NonInteractiveIconColor;</li> </ul> <p>If using icon, 0.5rem padding on left if not using selector checkbox or column with row number. For everything else, the icon container accounts for the space necessary, so no padding needed.</p> </div> <div> <ul> <li><em>Compact:</em> 32px</li> <li><em>Condensed:</em> 32px</li> </ul> <p>#F2F2F2</p> <p>1px solid</p> <ul> <li><em>Bottom:</em> #E5E5E5</li> <li><em>Left / Right:</em> #E5E5E5</li> </ul> <p>72</p> <p>14</p> <p>regular</p> <p>vertically centered</p> <p>#32363A</p> <p>First column takes extra padding only in the absence of column with selector checkbox or column with row number. <a href="https%3A%2F%2Fwiki.wdf.sap.corp%2Fwiki%2Fdisplay%2Fvisualcore%2FTable%2B%2528Fiori%2B3%2529%2B-%2BGeneral%2BSpecification%23Table(Fiori3)GeneralSpecification-GridTable-FirstColumnPaddingException">Learn more.</a></p> <ul> <li><em>Left (first column):</em> 16px</li> <li><em>Left (other columns):</em> 8px</li> <li><em>Right:</em> 8px</li> </ul> <p>12pt</p> <p>32px</p> <p>centered</p> <ul> <li><em>Interactive:</em> #0854A0</li> <li><em>Non-interactive:</em> #6A6D7</li> </ul> <p>If using icon, 0.5rem padding on left if not using selector checkbox or column with row number. For everything else, the icon container accounts for the space necessary, so no padding needed.</p> </div> </div> <div> <div></div> <div></div> <div> <p>--sapList_Hover_Background;</p> <p>sapContent_IconColor;</p> </div> <div> <p>F5F5F5</p> <p>#0854A0</p> </div> </div> <div> <div></div> <div></div> <div> <p>--sapList_Active_Background;</p> <p>--sapList_Active_TextColor;</p> <p>--sapContent_ContrastIconColor;</p> </div> <div> <p>#0854A0</p> <p>#FFFFFF</p> <p>#FFFFFF</p> </div> </div> <div> <div></div> <div></div> <div> <p>5px</p> <p>--sapHighlightColor;</p> <p>--sapHighlightColor;</p> <p>--sapHighlightColor;</p> </div> <div> <p>5px</p> <p>#0854A0</p> <p>#0854A0</p> <p>#0854A0</p> </div> </div>

Fiori Guidelines: Table (Component Overview)

Visual Core Design Specs: Table General Specifications