Tabs mark parallel content partitions
Aliases: panel tabs · object facets
What it is
In-page tabs lay mutually exclusive blocks on the same object into parallel partitions: a product’s Details / Specs / Reviews, Settings’ General / Notifications / Privacy. The person is still in the same place, looking at a different facet of that object. They are not app-level destinations — the bottom tab bar owns those — and they are not actions. Tapping a tab should not send someone to another object or start a flow.
Why it happens
Exclusive facets need “what other blocks exist” to stay visible, without all of them expanding at once and fighting for height. Tabs keep facet names in a short row beside the object; selected state marks the current facet; unselected names remain present as a reminder that Specs and Reviews still exist. Because the object is stable, title, primary key, and page actions stay put; only the body swaps. That “object holds, facet changes” is why tabs can be scanned.
Once an item is actually another object (a product tab that jumps to the shop home) or an action (Share on the tab row), selected state cannot explain itself: the shop is not a facet of this product, and Share has no stay-able partition. People then read the tabs as a mini site map and the object boundary washes out. Facets should be parallel, not a time order or a parent–child — that is a stepper’s or an accordion’s job.
Where it stops holding
With only two short facets, stacking them is cheaper than a tap. When facets strongly depend (A must be filled before B can be seen), dressing them as parallel lets people jump into an unready partition. Desktop tabs that close and drag like browser documents are a multiple-document interface, not object facets. A mobile bottom bar is app destinations; do not make Messages both an in-page tab and a bottom-bar item, or two parallel models will fight.
Applying it
- List only parallel facets of the current object. Name them as the facets (Reviews, Specs), not as destinations elsewhere or as verbs.
- On switch, keep the object title and page actions; replace only the body. If the address reflects the facet, it should be a fragment under the same object, not a new entity.
- Prefer as many tabs as one row can read. Content that is not a parallel facet belongs in a list or its own page.
- How to check: switch tabs and ask “are you still looking at the same thing”. If the answer becomes “I went somewhere else” or “I just did an action”, that item is not a facet. Then check that unselected tabs remain; a hidden facet loses the preview that “these still exist”.