Foundations
The Guardian's foundations are the atoms from which all our visual design is built. They are intended for use with a CSS-in-JS library such as Emotion.
Install
$ yarn add @guardian/src-foundations
Use
import { background } from '@guardian/src-foundations/palette';
const backgroundColor = css`
background-color: ${background.primary};
`;
import { headline, body, textSans } from '@guardian/src-foundations/typography';
const h1 = css`
${headline.large({ fontWeight: 'bold' })};
`;
const p = css`
${body.main()};
`;
const copyright = css`
${textSans.xsmall()};
`;
Media queries
import { from, until, between } from '@guardian/src-foundations/mq';
const styles = css`
padding: 0 10px;
${from.mobileLandscape} {
padding: 0 20px;
}
${between.phablet.and.desktop} {
padding: 0 32px;
}
${until.wide} {
padding: 0 40px;
}
`;
import { width, height } from '@guardian/src-foundations/size';
const checkbox = css`
width: ${width.inputXsmall}px;
height: ${height.inputXsmall}px;
`;
For elements that should not appear to sighted users, but are useful to assistive technology users.
import { visuallyHidden } from '@guardian/src-foundations/accessibility';
const label = css`
${visuallyHidden};
`;
This mixin provides a clear focus state for elements that may receive keyboard focus.
import { focusHalo } from '@guardian/src-foundations/accessibility';
const input = css`
${focusHalo};
width: 200px;
height: 44px;
`;
A function that takes the ID of an element and generates a new ID. This should be set as the
ID of an element that describes the first element. The generated ID should also be passed to
the aria-describedby
attribute on the first element.
import { descriptionId } from '@guardian/src-foundations/accessibility';
const Form = () => {
const id = 'first_name';
return (
<form>
<input id={id} type="text" aria-describedby={descriptionId(id)} />
<p class="error" id={descriptionId(id)} />
</form>
);
};