自訂

創建變數

A guide to using variables to implement design tokens.

Overview

VariableTypeGroupValue
fullstring"100%"
fitstring"fit-content"
maxstring"max-content"
minstring"min-content"
font-family-monostringfont-family"ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace"
font-family-sansstringfont-family"ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji"
font-family-serifstringfont-family"ui-serif,Georgia,Cambria,Times New Roman,Times,serif"
font-weight-thinnumberfont-weight100
font-weight-extralightnumberfont-weight200
font-weight-lightnumberfont-weight300
font-weight-regularnumberfont-weight400
font-weight-mediumnumberfont-weight500
font-weight-semiboldnumberfont-weight600
font-weight-boldnumberfont-weight700
font-weight-extraboldnumberfont-weight800
font-weight-heavynumberfont-weight900
flex-direction-colstringflex-direction"column"
flex-direction-col-reversestringflex-direction"column-reverse"
box-sizing-contentstringbox-sizing"content-box"
box-sizing-borderstringbox-sizing"border-box"
position-absstringposition"absolute"
position-relstringposition"relative"
transform-box-contentstringtransform-box"content-box"
transform-box-borderstringtransform-box"border-box"
transform-box-paddingstringtransform-box"padding-box"
transform-box-fillstringtransform-box"fill-box"
transform-box-strokestringtransform-box"stroke-box"
transform-box-viewstringtransform-box"view-box"
animation-direction-altstringanimation-direction"alternate"
animation-direction-alt-reversestringanimation-direction"alternate-reverse"
background-clip-contentstringbackground-clip"content-box"
background-clip-borderstringbackground-clip"border-box"
background-clip-paddingstringbackground-clip"padding-box"
background-origin-contentstringbackground-origin"content-box"
background-origin-borderstringbackground-origin"border-box"
background-origin-paddingstringbackground-origin"padding-box"
order-firstnumberorder-999999
order-lastnumberorder999999
shape-outside-contentstringshape-outside"content-box"
shape-outside-borderstringshape-outside"border-box"
shape-outside-paddingstringshape-outside"padding-box"
shape-outside-marginstringshape-outside"margin-box"
clip-path-contentstringclip-path"content-box"
clip-path-borderstringclip-path"border-box"
clip-path-paddingstringclip-path"padding-box"
clip-path-marginstringclip-path"margin-box"
clip-path-fillstringclip-path"fill-box"
clip-path-strokestringclip-path"stroke-box"
clip-path-viewstringclip-path"view-box"
currentstring"currentColor"
screen-4xsnumberscreen360
screen-3xsnumberscreen480
screen-2xsnumberscreen600
screen-xsnumberscreen768
screen-smnumberscreen834
screen-mdnumberscreen1024
screen-lgnumberscreen1280
screen-xlnumberscreen1440
screen-2xlnumberscreen1600
screen-3xlnumberscreen1920
screen-4xlnumberscreen2560

In Master CSS, variables are used to manage tokens in the design system, such as colors, font families, etc., even based on different theme modes.

import { variables } from '@master/css'export default {    variables: {        spacing: { sm: 10 },        primary: '#000000'    }}

Apply custom variables using ambiguous shorthand:

<div class="font:sans max-w:screen-desktop m:sm bg:primary">…</div>

Design tokens are a fundamental part of design systems and are crucial for maintaining design consistency and efficiency in projects, especially in larger organizations or projects with complex design requirements. They help bridge the gap between design and development, promoting collaboration and ensuring a cohesive user experience.


Basic usage

Add a string variable

Create a string variable to reuse it in your markup.

export default {    variables: {        content: {             hash: '" #"',             external: '" ↗"'         },     }}

Use the variable in your markup:

<div class="content:hash content:external">…</div>

Add a spacing variable

Add a spacing variable to reuse it in your markup.

export default {    variables: {        spacing: {            md: 20         }    }}

Apply the defined spacing variables using the inherited rules margin-left, margin-right, margin-top, margin-bottom, margin-x, margin-y, margin, margin-inline-start, margin-inline-end, margin-inline, padding-left, padding-right, padding-top, padding-bottom, padding-x, padding-y, padding, padding-inline-start, padding-inline-end, padding-inline, text-underline-offset, top, bottom, left, right, inset, transform, border-spacing, stroke-dashoffset, x, y, cx, cy, column-gap, row-gap, gap, outline-offset, scroll-margin-left, scroll-margin-right, scroll-margin-top, scroll-margin-bottom, scroll-margin-x, scroll-margin-y, scroll-margin, scroll-padding-left, scroll-padding-right, scroll-padding-top, scroll-padding-bottom, scroll-padding-x, scroll-padding-y, scroll-padding, shape-margin.

<div class="mt:md p:md">…</div>

Do not use numerical values as tokens.

export default {    variables: {        spacing: {            1: 4,            2: 8        }    }}

It can be confused with the unitless values.

Add a color variable

See more about color variables.


Spacing and Sizing

The spacing and sizing system is constructed using a base unit of 4 pixels. For visual consistency, you can use the multiplier unit x to apply spacing with the same scale.

TokenPixelsREMRepresentation
1x4px0.25rem
2x8px0.5rem
3x12px0.75rem
4x16px1rem
5x20px1.25rem
6x24px1.5rem
7x28px1.75rem
8x32px2rem
9x36px2.25rem
10x40px2.5rem
11x44px2.75rem
12x48px3rem
13x52px3.25rem
14x56px3.5rem
15x60px3.75rem
16x64px4rem
17x68px4.25rem
18x72px4.5rem
19x76px4.75rem
20x80px5rem
21x84px5.25rem
22x88px5.5rem
23x92px5.75rem
24x96px6rem
25x100px6.25rem
26x104px6.5rem
27x108px6.75rem
28x112px7rem
29x116px7.25rem
30x120px7.5rem
31x124px7.75rem
32x128px8rem
...
<div class="m:1x">4px, margin: 0.25rem</div><div class="p:2x">8px, padding: 0.5rem</div><div class="w:8x">32px, width: 2rem</div><div class="gap:3x">12px, gap: 0.75rem</div><div class="size:6x">24px, width: 1.5rem; height: 1.5rem</div>

It's no longer necessary to define the spacing scale one by one as in the traditional way.

export default {    variables: {        spacing: {            '1x': 4,             '2x': 8,             ...,             '100x': 400         }    }}

For other intermediate values, 0, 1, 2, ..., we tend to use unitless tokens:

<div class="m:0">0px, margin: 0rem</div><div class="p:1">1px, padding: 0.0625rem</div><div class="w:2">2px, width: 0.125rem</div>
自訂
Creating Utilities

A guide to adding custom utility classes.

效能優化
Optimizing critical resources

The runtime engine plays a crucial role in the initial display of a page.

© Aoyue Design LLC.