Opacity
Element-level and per-property opacity utilities with context-named opacity token support.
The .opacity-{value} utilities set the CSS opacity property on an element. A value of 1 is fully opaque, .5 is 50% visible, and 0 is fully transparent.
<div class="opacity-solid">...</div>
<div class="opacity-95">...</div>
<div class="opacity-90">...</div>
<div class="opacity-80">...</div>
<div class="opacity-70">...</div>
<div class="opacity-60">...</div>
<div class="opacity-50">...</div>
<div class="opacity-40">...</div>
<div class="opacity-30">...</div>
<div class="opacity-20">...</div>
<div class="opacity-10">...</div>
<div class="opacity-05">...</div>
<div class="opacity-zero">...</div>Per-property opacity
Several utility types — background, foreground, and border — support per-property opacity through CSS variable overrides, allowing opacity changes without affecting the entire element.
How it works
These utilities depend on CSS relative color syntax. The color utility sets both the color value and a --cx-{type}-opacity variable (defaulting to 1). A paired opacity utility overrides that variable to adjust transparency.
.bg-primary {
background-color: oklch(from var(--cx-primary) l c h / var(--cx-bg-opacity, 1)) !important;
}
.bg-opacity-50 {
--cx-bg-opacity: var(--cx-opacity-50);
}Opacity override
The opacity variable can be set inline or via a .bg-opacity-* utility.
<div class="bg-primary p-xsmall primary-contrast-color">
Primary background
</div>
<div style="--cx-bg-opacity: .4;" class="bg-primary p-xsmall">
Primary background with 40% opacity
</div>Context opacities
Context-named opacity utilities correspond to the design token scale and can be applied to foreground, background, and border properties.
Foreground
Foreground opacity utilities apply context-named opacity values to .fg-* color classes.
Base color
fg-subtle opacity
fg-slight opacity
<p class="fg-primary">Base color</p>
<p class="fg-primary fg-opacity-subtle"><code>fg-subtle</code> opacity</p>
<p class="fg-primary fg-opacity-slight"><code>fg-slight</code> opacity</p>Check out color page for more details.
Background
Background opacity utilities apply scene-token opacity values to .bg-* color classes.
dim-main opacitydim-subtle opacitydim-slight opacity<div class="bg-primary p-xsmall">Base background</div>
<div class="bg-primary bg-opacity-main p-xsmall"><code>dim-main</code> opacity</div>
<div class="bg-primary bg-opacity-subtle p-xsmall"><code>dim-subtle</code> opacity</div>
<div class="bg-primary bg-opacity-slight p-xsmall"><code>dim-slight</code> opacity</div>Check out background page for more details.
Border
Border opacity utilities apply context-named opacity values to .border-* color classes.
Base border
border-main opacity
border-subtle opacity
<p class="border border-primary p-xsmall">Base border</p>
<p class="border border-primary border-opacity-main p-xsmall"><code>border-main</code> opacity</p>
<p class="border border-primary border-opacity-subtle p-xsmall"><code>border-subtle</code> opacity</p>Check out borders page for more details.
CSS
Opacity utilities are generated from Sass maps built on design token values via the utilities API.
Reference
The table lists all opacity utilities and their CSS properties.
| Class | Properties |
|---|---|
.border-opacity-solid | --cx-border-opacity: var(--cx-opacity-solid); |
.border-opacity-95 | --cx-border-opacity: var(--cx-opacity-95); |
.border-opacity-90 | --cx-border-opacity: var(--cx-opacity-90); |
.border-opacity-80 | --cx-border-opacity: var(--cx-opacity-80); |
.border-opacity-70 | --cx-border-opacity: var(--cx-opacity-70); |
.border-opacity-60 | --cx-border-opacity: var(--cx-opacity-60); |
.border-opacity-50 | --cx-border-opacity: var(--cx-opacity-50); |
.border-opacity-40 | --cx-border-opacity: var(--cx-opacity-40); |
.border-opacity-30 | --cx-border-opacity: var(--cx-opacity-30); |
.border-opacity-20 | --cx-border-opacity: var(--cx-opacity-20); |
.border-opacity-10 | --cx-border-opacity: var(--cx-opacity-10); |
.border-opacity-05 | --cx-border-opacity: var(--cx-opacity-05); |
.border-opacity-zero | --cx-border-opacity: var(--cx-opacity-zero); |
.border-opacity-main | --cx-border-opacity: var(--cx-opacity-border-main); |
.border-opacity-subtle | --cx-border-opacity: var(--cx-opacity-border-subtle); |
.icon-opacity-solid | --cx-icon-opacity: var(--cx-opacity-solid); |
.icon-opacity-95 | --cx-icon-opacity: var(--cx-opacity-95); |
.icon-opacity-90 | --cx-icon-opacity: var(--cx-opacity-90); |
.icon-opacity-80 | --cx-icon-opacity: var(--cx-opacity-80); |
.icon-opacity-70 | --cx-icon-opacity: var(--cx-opacity-70); |
.icon-opacity-60 | --cx-icon-opacity: var(--cx-opacity-60); |
.icon-opacity-50 | --cx-icon-opacity: var(--cx-opacity-50); |
.icon-opacity-40 | --cx-icon-opacity: var(--cx-opacity-40); |
.icon-opacity-30 | --cx-icon-opacity: var(--cx-opacity-30); |
.icon-opacity-20 | --cx-icon-opacity: var(--cx-opacity-20); |
.icon-opacity-10 | --cx-icon-opacity: var(--cx-opacity-10); |
.icon-opacity-05 | --cx-icon-opacity: var(--cx-opacity-05); |
.icon-opacity-zero | --cx-icon-opacity: var(--cx-opacity-zero); |
.icon-opacity-subtle | --cx-icon-opacity: var(--cx-opacity-icon-subtle); |
.icon-opacity-slight | --cx-icon-opacity: var(--cx-opacity-icon-slight); |
.fg-opacity-solid | --cx-fg-opacity: var(--cx-opacity-solid); |
.fg-opacity-95 | --cx-fg-opacity: var(--cx-opacity-95); |
.fg-opacity-90 | --cx-fg-opacity: var(--cx-opacity-90); |
.fg-opacity-80 | --cx-fg-opacity: var(--cx-opacity-80); |
.fg-opacity-70 | --cx-fg-opacity: var(--cx-opacity-70); |
.fg-opacity-60 | --cx-fg-opacity: var(--cx-opacity-60); |
.fg-opacity-50 | --cx-fg-opacity: var(--cx-opacity-50); |
.fg-opacity-40 | --cx-fg-opacity: var(--cx-opacity-40); |
.fg-opacity-30 | --cx-fg-opacity: var(--cx-opacity-30); |
.fg-opacity-20 | --cx-fg-opacity: var(--cx-opacity-20); |
.fg-opacity-10 | --cx-fg-opacity: var(--cx-opacity-10); |
.fg-opacity-05 | --cx-fg-opacity: var(--cx-opacity-05); |
.fg-opacity-zero | --cx-fg-opacity: var(--cx-opacity-zero); |
.fg-opacity-subtle | --cx-fg-opacity: var(--cx-opacity-fg-subtle); |
.fg-opacity-slight | --cx-fg-opacity: var(--cx-opacity-fg-slight); |
.bg-opacity-solid | --cx-bg-opacity: var(--cx-opacity-solid); |
.bg-opacity-95 | --cx-bg-opacity: var(--cx-opacity-95); |
.bg-opacity-90 | --cx-bg-opacity: var(--cx-opacity-90); |
.bg-opacity-80 | --cx-bg-opacity: var(--cx-opacity-80); |
.bg-opacity-70 | --cx-bg-opacity: var(--cx-opacity-70); |
.bg-opacity-60 | --cx-bg-opacity: var(--cx-opacity-60); |
.bg-opacity-50 | --cx-bg-opacity: var(--cx-opacity-50); |
.bg-opacity-40 | --cx-bg-opacity: var(--cx-opacity-40); |
.bg-opacity-30 | --cx-bg-opacity: var(--cx-opacity-30); |
.bg-opacity-20 | --cx-bg-opacity: var(--cx-opacity-20); |
.bg-opacity-10 | --cx-bg-opacity: var(--cx-opacity-10); |
.bg-opacity-05 | --cx-bg-opacity: var(--cx-opacity-05); |
.bg-opacity-zero | --cx-bg-opacity: var(--cx-opacity-zero); |
.bg-opacity-main | --cx-bg-opacity: var(--cx-opacity-dim-main); |
.bg-opacity-subtle | --cx-bg-opacity: var(--cx-opacity-dim-subtle); |
.bg-opacity-slight | --cx-bg-opacity: var(--cx-opacity-dim-slight); |
.cue-opacity-solid | --cx-cue-opacity: var(--cx-opacity-solid); |
.cue-opacity-95 | --cx-cue-opacity: var(--cx-opacity-95); |
.cue-opacity-90 | --cx-cue-opacity: var(--cx-opacity-90); |
.cue-opacity-80 | --cx-cue-opacity: var(--cx-opacity-80); |
.cue-opacity-70 | --cx-cue-opacity: var(--cx-opacity-70); |
.cue-opacity-60 | --cx-cue-opacity: var(--cx-opacity-60); |
.cue-opacity-50 | --cx-cue-opacity: var(--cx-opacity-50); |
.cue-opacity-40 | --cx-cue-opacity: var(--cx-opacity-40); |
.cue-opacity-30 | --cx-cue-opacity: var(--cx-opacity-30); |
.cue-opacity-20 | --cx-cue-opacity: var(--cx-opacity-20); |
.cue-opacity-10 | --cx-cue-opacity: var(--cx-opacity-10); |
.cue-opacity-05 | --cx-cue-opacity: var(--cx-opacity-05); |
.cue-opacity-zero | --cx-cue-opacity: var(--cx-opacity-zero); |
.cue-opacity-slight | --cx-cue-opacity: var(--cx-opacity-cue-slight); |
.opacity-solid | opacity: var(--cx-opacity-solid); |
.opacity-95 | opacity: var(--cx-opacity-95); |
.opacity-90 | opacity: var(--cx-opacity-90); |
.opacity-80 | opacity: var(--cx-opacity-80); |
.opacity-70 | opacity: var(--cx-opacity-70); |
.opacity-60 | opacity: var(--cx-opacity-60); |
.opacity-50 | opacity: var(--cx-opacity-50); |
.opacity-40 | opacity: var(--cx-opacity-40); |
.opacity-30 | opacity: var(--cx-opacity-30); |
.opacity-20 | opacity: var(--cx-opacity-20); |
.opacity-10 | opacity: var(--cx-opacity-10); |
.opacity-05 | opacity: var(--cx-opacity-05); |
.opacity-zero | opacity: var(--cx-opacity-zero); |
Custom properties
Opacity utilities read their values at runtime from :root custom properties.
@each $name, $value in map.merge($opacities, $context-opacities) {
--opacity-#{$name}: #{$value};
}Design tokens
Opacity utilities consume design tokens from Chassis Tokens with the $cx- prefix. — See thedesign tokens page.
$opacity-zero: $cx-opacity-level-zero;
$opacity-95: $cx-opacity-level-95;
$opacity-90: $cx-opacity-level-90;
$opacity-80: $cx-opacity-level-80;
$opacity-70: $cx-opacity-level-70;
$opacity-60: $cx-opacity-level-60;
$opacity-50: $cx-opacity-level-50;
$opacity-40: $cx-opacity-level-40;
$opacity-30: $cx-opacity-level-30;
$opacity-20: $cx-opacity-level-20;
$opacity-10: $cx-opacity-level-10;
$opacity-05: $cx-opacity-level-05;
$opacity-solid: $cx-opacity-level-solid;$opacity-fg-slight: $cx-opacity-context-fg-slight;
$opacity-fg-subtle: $cx-opacity-context-fg-subtle;$opacity-border-main: $cx-opacity-context-border-main;
$opacity-border-subtle: $cx-opacity-context-border-subtle;$opacity-icon-subtle: $cx-opacity-context-icon-subtle;
$opacity-icon-slight: $cx-opacity-context-icon-slight;$opacity-cue-slight: $cx-opacity-context-icon-slight;$opacity-dim-main: $cx-opacity-context-dim-main;
$opacity-dim-subtle: $cx-opacity-context-dim-subtle;
$opacity-dim-slight: $cx-opacity-context-dim-slight;Sass Maps
Opacity utilities are generated from Sass maps in scss/maps/_opacities.scss.
$opacities defines the full token-named opacity scale for .opacity-{level} utilities.
$opacities: (
"solid": $opacity-solid,
"95": $opacity-95,
"90": $opacity-90,
"80": $opacity-80,
"70": $opacity-70,
"60": $opacity-60,
"50": $opacity-50,
"40": $opacity-40,
"30": $opacity-30,
"20": $opacity-20,
"10": $opacity-10,
"05": $opacity-05,
"zero": $opacity-zero,
);Each color type has its own opacity map with their semantic opacity levels for .{type}-opacity-{level} utilities.
$fg-opacities: (
"subtle": $opacity-fg-subtle,
"slight": $opacity-fg-slight,
);$border-opacities: (
"main": $opacity-border-main,
"subtle": $opacity-border-subtle,
);$icon-opacities: (
"subtle": $opacity-icon-subtle,
"slight": $opacity-icon-slight,
);$cue-opacities: (
"slight": $opacity-cue-slight,
);$dim-opacities: (
"main": $opacity-dim-main,
"subtle": $opacity-dim-subtle,
"slight": $opacity-dim-slight,
);Utilities API
.opacity-* utilities are declared in scss/utilities/_index.scss using the utilities API.
"opacity": (
property: opacity,
class: opacity,
values: map-loop($opacities, varify, "$key", "opacity")
),.{type}-opacity-* utilities are declared in their respective utility files. See background, foreground, and border, and icon pages for more details.