npm install storybook-addon-grid
keeps your stories in rhythm
This is free to use software, but if you do like it, consider supporting me ❤️
npm install storybook-addon-grid
// .storybook/main.js
module.exports = {
addons: [require.resolve('storybook-addon-grid')],
};
Chromatic users
Include this additional preset to configure the column guides for your Chromatic screenshots.
// .storybook/main.js module.exports = { addons: [require.resolve('storybook-addon-grid'), require.resolve('storybook-addon-grid/chromatic')], };
The column guides are controlled with parameters and as such you can define this globally or per story.
The column guides can be turned on either via clicking the toolbar button, or via a keyboard shortcut Ctrl + G.
Note: Due to the nature of
z-index
, the rootdiv
of the stories will have aposition: relative
andz-index: 0
applied to it, allowing the column guides to sit over the top.
Column design system is defined by 3 values:
- the number of
columns
- the
gap
between them - the
gutter
— minimal margin between the system and the screen maximal-width
for the system to limit maximum width of all columns as well.
The number of columns guides.
The gap between columns
.
System's gutter (margin
) for both left and right.
Define to override the gutter defined on the right-hand-side.
The maximum width our columns should grow.
Enable or Disable the guides from fading in or out when toggling the state.
Chromatic users, this will be
false
by default.
Sets the color used for the column guides.
// .storybook/preview.js
export const parameters = {
grid: {
gridOn: true,
columns: 12,
gap: '20px',
gutter: '50px',
maxWidth: '1024px',
},
};
// MyComponent.stories.js
export const Example = () => {...};
Example.parameters = {
grid: {
columns: 6,
},
};
The way storybook-addon-grid
solves responsive properties is leaving this up to you. We don't you to build
abstractions and implementations for this addon, we want to reuse existing patterns you may already be using.
In fact all properties map through to css, so any css variable you expose is consumable.
eg:
// file: my-styles.css
@media (min-width: 768px) {
:root {
--columns: 8;
--gap: 12px;
--gutter: 24px;
}
}
Story.parameters = {
grid: {
// a custom variable names for the number of columns
columns: 'var(--columns)',
// or the gutter
gutter: 'var(--gutter)',
// or the gap
gap: 'var(--gap)',
},
};
You can see this in action over at our example story ResponsiveGrid
.
Special thanks to Marina for the initial implementation and design.
MIT © Marais Rossouw