Welcome to the web.dev design system
Quick start #
Colors
All the available colors and guides for their usage
Themes
How the theming stying works and how to use it
Typography
Font sizes, the size scale and available fonts
Spacing
The spacing scale and spacing utilities
CSS Compositions
Flexible and skeletal compositional layouts that work site-wide
Utilities
Flexible utilities that solve common UI problems
CUBE CSS
The CSS Methodology all of the CSS in this system uses
Gorko CSS Framework
Documentation for the CSS (Sass) framework that’s used in this design system
For developers #
This design system should be treated as the source of truth for any front-end development work that requires CSS.
About the CSS #
The design system is built around CUBE CSS, a methodology that’s orientated towards simplicity and pragmatism. Versus the previous system on web.dev, a lot of CSS is declared as high up as possible—globally—rather than concentrated on complex BEM components.
The CSS is pre-processed using SCSS, which in turn, uses Gorko to provide structure, mixins and generated utility classes. The design system uses utilities regularly, so ensure you read up on how Gorko generates them. They are defined here.
Everything in CSS is powered by design tokens, which are defined here. The design tokens mainly define colors, fonts, spacing, sizes, transitions and decorative elements, such as border radius.
Lastly, the whole design system is theme-driven. This means that tokens are applied to contexts, rather than directly to elements. This makes working with dark/light themes much easier with less authored code. Read more in the color section.
SCSS file and folder structure #
The structure is as follows:
src
└── scss
├── blocks
├── compositions
├── functions
├── mixins
├── pages
├── utilities
├── web-components
├── _config.scss
├── _fonts.scss
├── _reset.scss
├── _rollout.scss
├── _themes.scss (generated)
├── _tokens.scss (generated)
└── next.scss
The Sass folder mostly resembles the CUBE CSS structure and is as follows:
blocks
: contained componentscompositions
: layout compositionsfunctions
: Sass functions used across the SCSS filesmixins
: Sass mixins used across the SCSS filespages
: specific styles for pages and page typesutilities
: core utilitiesweb-components
: styles for specific web-components_config.scss
: core Gorko configuration_fonts.scss
:@font-face
declarations_reset.scss
: a lightweight CSS reset_rollout.scss
: Temporary styles to provide a bridge between the old system and new system while the new system is rolled out_themes.scss
: an auto-generated file bysrc/site/_data/design/themes.js
_tokens.scss
: an auto-generated file bysrc/site/_data/design/tokens.js
next.css
: the main SCSS file that pulls everything together and defines global CSS
For authors #
Please use the same component guide in the handbook as always.
How to use the pattern/component generator #
To prevent repetitive file creation, you can use the pattern generator to create a new pattern, or pattern's variant with a npm task.
Example #
Let's say you want a new pattern called "my-pattern":
npm run patterns:create -- -p my-pattern -n my-pattern -t My\ Pattern
This will create the following folder and file structure:
web.dev
└── src/
└── component-library/
└── my-pattern/
├── my-pattern.njk
├── my-pattern.json
└── my-pattern.md
Let's you want to create a variant of "my-pattern":
npm run patterns:create -- -p my-pattern/variants -n my-pattern-primary -t Primary
It'll result in this structure:
web.dev
└── src/
└── components/
└── patterns/
└── my-pattern/
├── my-pattern.njk
├── my-pattern.json
├── my-pattern.md
└── variants/
├── my-pattern-primary.njk
└── my-pattern-primary.json
Arguments #
There are 2 required arguments to pass in—-p
and -n
. The rest are optional.
-p
is the path fromsrc/components/patterns
-n
is the file name-t
is the title. If this is not set, the-n
will be used-sm
allows you to skip markup being generated if you are generating a variant