# Label Short captions and status chips for a plugin screen. Five sizes plus style variants (filled, outline, underline, inverted) and semantic variants such as label--success and label--error. ### Size and Style Variants Labels come in several style variants. Each one combines with any size modifier. To compare these sizes with every other element, see [Element Sizes](/framework/docs/3.4/element_sizes) . Small Base Large XLarge XXLarge Default Label Label Label Label Label Outline Label Label Label Label Label Underline Label Label Label Label Label Gray Label Label Label Label Label Filled Label Label Label Label Label ![TRMNL Logo](/images/plugins/trmnl--render.svg)LabelStyle Variants ``` Default Label Outline Label Underline Label Gray Label Filled Primary Success Error Inverted (alias) Large Outline Label XLarge Filled Label ``` #### Semantic variants Use `label--primary`, `label--success`, `label--error`, `label--warning` for intent-based colors. `label--filled` uses black (darkest), and warning uses a yellow background. See [Colors](/framework/docs/3.4/colors) for the semantic mapping. Each role's text is black or white, whichever reads better on the color the screen paints. 1-bit screens keep white text on primary and error, and black on success and warning. FilledPrimarySuccessErrorWarning ![TRMNL Logo](/images/plugins/trmnl--render.svg)LabelSemantic Colors ### Text Overflow Behavior Labels can handle longer text content through natural wrapping or text clamping. Understanding how labels behave with overflow content helps ensure your interface remains readable and visually balanced. #### Multi-line Wrapping By default, labels will wrap to multiple lines when content exceeds the available width, maintaining readability for longer text. Small Base Large Default This longer label will wrap to multiple lines when it exceeds the width This longer label will wrap to multiple lines when it exceeds the width This longer label will wrap to multiple lines when it exceeds the width Underline This longer label will wrap to multiple lines when it exceeds the width This longer label will wrap to multiple lines when it exceeds the width This longer label will wrap to multiple lines when it exceeds the width Filled This longer label will wrap to multiple lines when it exceeds the width This longer label will wrap to multiple lines when it exceeds the width This longer label will wrap to multiple lines when it exceeds the width ![TRMNL Logo](/images/plugins/trmnl--render.svg)LabelMulti-line ``` This longer label will wrap to multiple lines when it exceeds the width ``` #### Text Clamping Use the framework's `data-clamp` attribute to limit labels to a specific number of lines with ellipsis overflow. Small Base Large 1-line This is a very long label text that would normally wrap to many lines but demonstrates how clamping behavior works with different variants and line limits to show ellipsis overflow This is a very long label text that would normally wrap to many lines but demonstrates how clamping behavior works with different variants and line limits to show ellipsis overflow This is a very long label text that would normally wrap to many lines but demonstrates how clamping behavior works with different variants and line limits to show ellipsis overflow 2-line This is a very long label text that would normally wrap to many lines but demonstrates how clamping behavior works with different variants and line limits to show ellipsis overflow This is a very long label text that would normally wrap to many lines but demonstrates how clamping behavior works with different variants and line limits to show ellipsis overflow This is a very long label text that would normally wrap to many lines but demonstrates how clamping behavior works with different variants and line limits to show ellipsis overflow Underline 1 This is a very long label text that would normally wrap to many lines but demonstrates how clamping behavior works with different variants and line limits to show ellipsis overflow This is a very long label text that would normally wrap to many lines but demonstrates how clamping behavior works with different variants and line limits to show ellipsis overflow This is a very long label text that would normally wrap to many lines but demonstrates how clamping behavior works with different variants and line limits to show ellipsis overflow Underline 2 This is a very long label text that would normally wrap to many lines but demonstrates how clamping behavior works with different variants and line limits to show ellipsis overflow This is a very long label text that would normally wrap to many lines but demonstrates how clamping behavior works with different variants and line limits to show ellipsis overflow This is a very long label text that would normally wrap to many lines but demonstrates how clamping behavior works with different variants and line limits to show ellipsis overflow ![TRMNL Logo](/images/plugins/trmnl--render.svg)LabelClamped ``` This text will be clamped to one line This text will be clamped to exactly two lines with ellipsis ``` ### Responsive Features Label components support all three responsive systems: size-based, orientation-based, and bit-depth variants. This enables precise control over label appearance across different device configurations. #### Breakpoint Prefixes Use breakpoint prefixes like `sm:`, `md:`, `lg:` to apply different sizes and styles per device size class. Responsive LabelSmall by default, xlarge on lg screens ![TRMNL Logo](/images/plugins/trmnl--render.svg)LabelResponsive ``` Responsive Label Small by default, xlarge on lg screens Small by default, base on medium+ screens Progressive Label Sizing ``` #### Orientation and Size+Orientation Label sizes can adapt to orientation with `portrait:` and can be combined with size breakpoints (e.g., `md:portrait:`). Orientation VariantLarge by default, small in portrait. ![TRMNL Logo](/images/plugins/trmnl--render.svg)LabelOrientation ``` Orientation Variant Large by default, small in portrait. ``` #### Bit-Depth Responsive Use bit-depth prefixes like `1bit:`, `2bit:`, and `4bit:` to optimize label appearance for different display color capabilities. Display OptimizedFilled (1bit) → Outline (2bit) → Underline (4bit) Selective StylingOutline (1bit) → Gray (4bit) ![TRMNL Logo](/images/plugins/trmnl--render.svg)LabelBit-Depth Responsive ``` Display Optimized Selective Styling ``` #### Combined Responsive Features Combine multiple responsive systems for highly targeted label styling. Use size, orientation, and bit-depth modifiers together following the pattern: `size:orientation:bit-depth:utility`. Advanced TargetingComplex responsive combinations Multi-ConditionMultiple responsive conditions ![TRMNL Logo](/images/plugins/trmnl--render.svg)LabelCombined Responsive ``` Advanced Targeting Multi-Condition ``` ### Backward Compatibility The gray-out label variant has been renamed from `label--gray-out` to `label--gray`. The legacy class name still works and maps to the same bit-depth responsive styling. Prefer the new name going forward. The inverted label has been renamed to `label--filled` (black background). Use `label--primary`, `label--success`, etc. for semantic colors. `label--inverted` remains as an alias for `label--filled`. ``` Gray label (deprecated) Inverted (alias) Gray label (preferred) Filled label (preferred) ``` ### Related Tokens These tokens are automatically mapped to this page by token prefix. | Token | 1-bit | 2-bit | Density 2x | 4-bit and up | | --- | --- | --- | --- | --- | | Base | | `--label-font-family` | "NicoClean" | "NicoClean" | #{meta.inspect($family)} | - | | `--label-font-size` | calc(16px \* var(--text-ui-scale)) | calc(16px \* var(--text-ui-scale)) | calc(16px \* var(--text-ui-scale)) | - | | `--label-font-smoothing` | none | none | auto | - | | `--label-font-weight` | 400 | 400 | clamp(100, calc(500 + var(--framework-font-weight-shift, 0)), 900) | - | | `--label-line-height` | 1.25 | 1.25 | 1.25 | - | | Small | | `--label-small-font-family` | "NicoPups" | "NicoPups" | #{meta.inspect($family)} | - | | `--label-small-font-size` | calc(16px \* var(--text-ui-scale)) | calc(16px \* var(--text-ui-scale)) | calc(13px \* var(--text-ui-scale)) | - | | `--label-small-font-smoothing` | none | none | auto | - | | `--label-small-font-weight` | 400 | 400 | clamp(100, calc(500 + var(--framework-font-weight-shift, 0)), 900) | - | | `--label-small-line-height` | 1 | 1 | 1 | - | | Large | | `--label-large-font-family` | "Inter Variable", Inter | - | #{meta.inspect($family)} | - | | `--label-large-font-size` | calc(21px \* var(--text-ui-scale)) | - | calc(21px \* var(--text-ui-scale)) | - | | `--label-large-font-smoothing` | auto | - | auto | - | | `--label-large-font-weight` | 500 | - | clamp(100, calc(500 + var(--framework-font-weight-shift, 0)), 900) | - | | `--label-large-line-height` | 1.2 | - | 1.2 | - | | Xlarge | | `--label-xlarge-font-family` | "Inter Variable", Inter | - | #{meta.inspect($family)} | - | | `--label-xlarge-font-size` | calc(26px \* var(--text-ui-scale)) | - | calc(26px \* var(--text-ui-scale)) | - | | `--label-xlarge-font-smoothing` | auto | - | auto | - | | `--label-xlarge-font-weight` | 475 | - | clamp(100, calc(475 + var(--framework-font-weight-shift, 0)), 900) | - | | `--label-xlarge-line-height` | 1.2 | - | 1.2 | - | | Xxlarge | | `--label-xxlarge-font-family` | "Inter Variable", Inter | - | #{meta.inspect($family)} | - | | `--label-xxlarge-font-size` | calc(30px \* var(--text-ui-scale)) | - | calc(30px \* var(--text-ui-scale)) | - | | `--label-xxlarge-font-smoothing` | auto | - | auto | - | | `--label-xxlarge-font-weight` | 450 | - | clamp(100, calc(450 + var(--framework-font-weight-shift, 0)), 900) | - | | `--label-xxlarge-line-height` | 1.2 | - | 1.2 | - | ### Related APIs #### Theming the label A theme can re-point the label's paint through its named slots (`label-gray`, `label-underline`) without touching geometry. Slots take palette token references, so the surface still resolves through the device mode at render time. See [Theme Slots](/framework/docs/3.4/theme_slots) for every slot and mixin. ``` @include theme-slots.border-token-slot("label-underline", "yellow-30"); ``` Previous [ ## Value Display data values with consistent formatting ](/framework/docs/3.4/value) Next [ ## Description Format descriptive text with standardized styles ](/framework/docs/3.4/description)