Welcome to the web.dev design system
This design system will help you to maintain consistency around the web.dev website by providing CSS structure, design tokens, typography rules and spacing rules, along with a comprehensive component library.
Quick start
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-facedeclarations_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.jsnext.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.
Make sure you add the -- after npm run patterns:create so the arguments get passed into the task.
Also make sure you escape spaces with a \.
-pis the path fromsrc/components/patterns-nis the file name-tis the title. If this is not set, the-nwill be used-smallows you to skip markup being generated if you are generating a variant
谢谢你的反馈!