Readable body copy
Use this when you are rendering long-form prose — articles, knowledge
base entries, documentation pages, blog posts — and you want the type to
stay legible for low-vision and dyslexic readers. The framework defaults
clear WCAG 2.2 AA for short interface copy out of the box, but article
containers benefit from an explicit max-width and a slightly looser
leading that the framework cannot impose globally without breaking
sidebar and navigation layouts.
What WCAG 1.4.12 actually targets
The Text Spacing criterion (1.4.12) is about resilience to user
overrides: if a reader pastes the page into a tool that bumps
line-height to 1.5, paragraph spacing to 2× line-height, letter-spacing
to 0.12em, and word-spacing to 0.16em, the layout must not break. It is
not a mandate on your default stylesheet — it is a mandate that your
content survives the user's stylesheet.
In practice that means: avoid hard pixel heights, avoid clamping text
into fixed-size containers that would clip, and let containers grow
vertically with the text inside them. Most of the framework already
does this (logical properties, min-height rather than height, flex
that wraps).
Recommended defaults for prose
line-height ≥ 1.5— the framework default is1.5already ($global-body-line-heightinsrc/variables/_global.scss). Most consumers can leave it. Bump to1.6–1.7for very long-form copy.max-width: 65ch— long enough for the eye to glide across a line, short enough that the reader does not lose their place on the return sweep. The framework does not clamp.contentat this width by default because a clamp here would break dashboards, sidebars, and navigation surfaces. Apply it yourself on the article wrapper.- Paragraph spacing ≥ 2 × line-height — the framework's reset emits
a default
margin-blockbetween paragraphs that already clears this; do not collapse it. letter-spacingandword-spacing— leave them at their browser defaults. WCAG 1.4.12 expects the user to override these via their own stylesheet or extension; your job is to not break when they do.
Concrete snippet
Scope the prose-specific knobs to your article container:
// app.scss
@use '@adnap/krysalicss/typography/base' with (
$body-line-height: 1.6,
);
article {
max-width: 65ch;
margin-inline: auto;
}
The @use ... with () call retunes the framework's body baseline
(applies everywhere body text appears). The CSS rule on article
clamps the reading column and centres it; everything outside article
keeps the layout-friendly behaviour.
What the framework already gives you
$body-line-height: 1.5is the default intypography/base— WCAG 1.4.12-friendly without configuration.- Body text uses logical properties (
margin-block,padding-inline) so user-stylesheet overrides do not collide with the framework rules. :focus-visiblerings,.is-*combinations, and the colour tokens all stay readable when the reader bumps spacing.
Related
- Typography reference:
full variable surface for
base,title,link,content, andtable. - Override component variables: the
general pattern behind the
@use ... with ()snippet above.