Updated
Tab
Tab switches between related views inside a single screen.
Updated
Preview
An in-page switch between sibling sets of content. It changes what sits below it, never the top-level destination. Default size, three tabs. Live specimen, pick one.
Tab does the job of Segmented Control with a different build. The row has no track fill and no radius, only side padding: three tabs and one rule.
The parent exposes Size and Tabs; the label, the icon and the active tab live on the nested selectors. Switching moves the rule with motion/duration/base, 200 ms on the standard curve.
How many tabs can a row hold?
Two to five tabs in the same 340 track. The 4 pt side padding never moves, so tabs split the remaining 332 evenly; only width changes. The 2 pt rule sits under the active tab and the 1 pt hairline under the whole row.
Tabs 2, tab 166
Tabs 3, tab 110.67
Tabs 4, tab 83
Tabs 5, tab 66.4
At Default a tab spends 16 of padding per side at two and three tabs, 12 at four and 6 at five, so five tabs leave 54.4 for the label. Widths match Segmented Control, 166, 110.67, 83 and 66.4, because both split the same 332.
Long labels behave differently: Segmented Control clips inside a visible pill and a tab has no edge, so keep five labels to one short word each.
Tabs ships 8 variants, two sizes across four tab counts.
How tall is a Tab?
Two heights, 48 and 36. The tab fills the track, so only padding and label change: 12 and 16 with a 16/24 label becomes 8 and 12 with 14/20 at letter spacing .1. The rule stays 2 pt and the icon stays 16.
Size Default
Size Small
Tab is 48 and 36 high, where Segmented Control is 48 and 38. They line up at Default and sit two apart at Small, because a tab has no 4 pt track padding to absorb.
The rule holds at 2 pt and the icon, when you switch it on, holds 16.
Which states does Tab have?
One state, held by one tab. Active draws a 2 pt brand/base rule inside its own bottom edge and turns the label brand/base. Inactive has no rule and a text/sub-700 label. There is no Pressed or Disabled variant in the file.
Set Active on exactly one tab. It lives on the nested selector, so every tab carries its own boolean, and it defaults to False.
The rule is a stroke on the bottom edge alone, so Figma's inspector shows a mixed stroke weight: read it as an underline.
Properties
Two variant axes on the published component. The rest sit on the selector inside it, a building block not meant for direct use.
| Property | Type | Default |
|---|---|---|
Size | Default, Small | Default |
Tabs | 2, 3, 4, 5 | 2 |
Active | True, False, on the selector | False |
Icon | Boolean, on the selector, set false in every variant | true |
Icon Swap | Instance swap, on the selector | circle |
The selector ships 4 variants, Active across Size, and is composed into every Tabs variant.
Tokens
Every value the component reads, resolved through its aliases to the primitive underneath.
| Token | Light | Dark | Applied to |
|---|---|---|---|
brand/base | #155DFC | #2B7FFF | The rule, the active label and the active icon |
text/sub-700 | #48484A | #C7C7CC | Every other label |
border/soft-100 | #E9E9EA | #2F2F31 | The 1 pt hairline under the whole row |
fg/soft-500 | #8E8E93 | #AEAEB2 | Every other icon, when switched on |
Radius is dimensions/radius/none on the track and on the tab. There is no fill and no shadow, which separates Tab from Segmented Control.
Four colors are the whole palette, and brand/base does three jobs: the rule, the label and the icon.
How does Tab differ on iOS and Material 3?
The iOS and Material 3 pages of the file hold bottom bars for top-level destinations and no in-page tab row. Appetite UI Tab is the in-page switch, 340 wide with a rule under the active tab.
| Appetite UI | iOS counterpart | Material 3 counterpart | What differs |
|---|---|---|---|
| Tab | None in the file. iOS / Tab Bar on the Apple Platform pages is the bottom bar for top-level destinations. | None in the file. M3 / Navigation bar is the bottom bar for top-level destinations. | Appetite UI Tab is 48 or 36 high with a 2 pt rule and a 1 pt hairline and never changes the top-level destination. For that, use Navigation. |
The minimum touch target is 44 pt on iOS and 48 dp on Material 3, set by platform/min-touch-target in the Platform collection.
Default is 48 high and clears both. Small is 36 high, so give it a 44 pt hit area on iOS and 48 dp on Android in code.
When should I use Tab?
Use Tab for sibling content on one screen and Navigation for top-level destinations.
Do
Use tabs for sibling content on one screen. The tab swaps what sits under it and leaves the rest of the screen where it was.
Don't
Do not move between top-level destinations with tabs. That is Navigation, and a tab that replaces the whole screen leaves no way back.
Tab and Segmented Control both switch between two and five things and are 48 high at Default, yet they do different jobs. A segmented control is a setting that applies on pick, and tabs belong to the content below them.
Pick one per screen.