Space Scale Utility

Our space scale utility is constructed as follows:

/* @link https://utopia.fyi/space/calculator?c=320,21,1.2,1140,24,1.25,5,2,&s=0.75|0.5|0.25,1.5|2|3|4|6,s-l */

:root {
--fc-3xs-min: (var(--fc-s-min) * 0.25);
--fc-3xs-max: (var(--fc-s-max) * 0.25);

--fc-2xs-min: (var(--fc-s-min) * 0.5);
--fc-2xs-max: (var(--fc-s-max) * 0.5);

--fc-xs-min: (var(--fc-s-min) * 0.75);
--fc-xs-max: (var(--fc-s-max) * 0.75);

--fc-s-min: (var(--f-0-min));
--fc-s-max: (var(--f-0-max));

--fc-m-min: (var(--fc-s-min) * 1.5);
--fc-m-max: (var(--fc-s-max) * 1.5);

--fc-l-min: (var(--fc-s-min) * 2);
--fc-l-max: (var(--fc-s-max) * 2);

--fc-xl-min: (var(--fc-s-min) * 3);
--fc-xl-max: (var(--fc-s-max) * 3);

--fc-2xl-min: (var(--fc-s-min) * 4);
--fc-2xl-max: (var(--fc-s-max) * 4);

--fc-3xl-min: (var(--fc-s-min) * 6);
--fc-3xl-max: (var(--fc-s-max) * 6);

/* T-shirt sizes */
--space-3xs: calc(((var(--fc-3xs-min) / 16) * 1rem) + (var(--fc-3xs-max) - var(--fc-3xs-min)) * var(--fluid-bp));
--space-2xs: calc(((var(--fc-2xs-min) / 16) * 1rem) + (var(--fc-2xs-max) - var(--fc-2xs-min)) * var(--fluid-bp));
--space-xs: calc(((var(--fc-xs-min) / 16) * 1rem) + (var(--fc-xs-max) - var(--fc-xs-min)) * var(--fluid-bp));
--space-s: calc(((var(--fc-s-min) / 16) * 1rem) + (var(--fc-s-max) - var(--fc-s-min)) * var(--fluid-bp));
--space-m: calc(((var(--fc-m-min) / 16) * 1rem) + (var(--fc-m-max) - var(--fc-m-min)) * var(--fluid-bp));
--space-l: calc(((var(--fc-l-min) / 16) * 1rem) + (var(--fc-l-max) - var(--fc-l-min)) * var(--fluid-bp));
--space-xl: calc(((var(--fc-xl-min) / 16) * 1rem) + (var(--fc-xl-max) - var(--fc-xl-min)) * var(--fluid-bp));
--space-2xl: calc(((var(--fc-2xl-min) / 16) * 1rem) + (var(--fc-2xl-max) - var(--fc-2xl-min)) * var(--fluid-bp));
--space-3xl: calc(((var(--fc-3xl-min) / 16) * 1rem) + (var(--fc-3xl-max) - var(--fc-3xl-min)) * var(--fluid-bp));

/* One-up pairs */
--space-3xs-2xs: calc(((var(--fc-3xs-min) / 16) * 1rem) + (var(--fc-2xs-max) - var(--fc-3xs-min)) * var(--fluid-bp));
--space-2xs-xs: calc(((var(--fc-2xs-min) / 16) * 1rem) + (var(--fc-xs-max) - var(--fc-2xs-min)) * var(--fluid-bp));
--space-xs-s: calc(((var(--fc-xs-min) / 16) * 1rem) + (var(--fc-s-max) - var(--fc-xs-min)) * var(--fluid-bp));
--space-s-m: calc(((var(--fc-s-min) / 16) * 1rem) + (var(--fc-m-max) - var(--fc-s-min)) * var(--fluid-bp));
--space-m-l: calc(((var(--fc-m-min) / 16) * 1rem) + (var(--fc-l-max) - var(--fc-m-min)) * var(--fluid-bp));
--space-l-xl: calc(((var(--fc-l-min) / 16) * 1rem) + (var(--fc-xl-max) - var(--fc-l-min)) * var(--fluid-bp));
--space-xl-2xl: calc(((var(--fc-xl-min) / 16) * 1rem) + (var(--fc-2xl-max) - var(--fc-xl-min)) * var(--fluid-bp));
--space-2xl-3xl: calc(((var(--fc-2xl-min) / 16) * 1rem) + (var(--fc-3xl-max) - var(--fc-2xl-min)) * var(--fluid-bp));

/* Custom pairs */
--space-s-l: calc(((var(--fc-s-min) / 16) * 1rem) + (var(--fc-l-max) - var(--fc-s-min)) * var(--fluid-bp));
}

Purpose

The space-scale utility uses Utopia's space scale calculator to create a fluid space system that's connected to the type system. By default, the utility gives you a starting point, but you can feel free to override the file by using the Utopia calculator directly.

Example

const theme = {
breakpoints: {
md: '48em',
lg: '68em',
},
spaceScale: {
200: 'var(--space-3xs-2xs)',
300: 'var(--space-2xs-xs)',
400: 'var(--space-xs-s)',
500: 'var(--space-s-m)',
600: 'var(--space-m-l)',
700: 'var(--space-l-xl)',
800: 'var(--space-xl-2xl)',
900: 'var(--space-2xl-3xl)',
},
};

module.exports = {
theme,
tokens: {
'pad-top': {
items: theme.spaceScale,
property: 'padding-top',
},
},
};
<div class="pad-top-900"></div>