The Heading component can be used with the `level` prop to render the HTML heading elements, levels 1-6.
Basic Usage
import React from 'react';import { Heading } from 'react-magma-dom';export function Example() {return (<><Heading level={1}>Heading 1</Heading><Heading level={2}>Heading 2</Heading><Heading level={3}>Heading 3</Heading><Heading level={4}>Heading 4</Heading><Heading level={5}>Heading 5</Heading><Heading level={6}>Heading 6</Heading></>);}
Size
There are six visual styles for the heading: headingXLarge
, headingLarge
, headingMedium
, headingSmall
, headingXSmall
and heading2XSmall
. If not specified, a corresponding visual style will be applied based on the heading.
Visual style and heading level can be set independently so you can specify the correct semantic level and then apply any of the visual styles to change the visual appearance to fit your design.
Furthermore, the visualStyle
prop can also accept the values for the four different paragraph visual styles: bodyLarge
, bodyMedium
, bodySmall
, and bodyXSmall
. These are sizes are also used with the Paragraph component.
import React from 'react';import { Heading, TypographyVisualStyle } from 'react-magma-dom';export function Example() {return (<><Heading level={2} visualStyle={TypographyVisualStyle.headingXLarge}>H2 styled as Heading XLarge</Heading><Heading level={2} visualStyle={TypographyVisualStyle.headingLarge}>H2 styled as Heading Large</Heading><Heading level={2} visualStyle={TypographyVisualStyle.headingMedium}>H2 styled as Heading Medium</Heading><Heading level={2} visualStyle={TypographyVisualStyle.headingSmall}>H2 styled as Heading Small</Heading><Heading level={2} visualStyle={TypographyVisualStyle.headingXSmall}>H2 styled as Heading XSmall</Heading><Heading level={2} visualStyle={TypographyVisualStyle.heading2XSmall}>H2 styled as Heading 2XSmall</Heading><Heading level={2} visualStyle={TypographyVisualStyle.bodyLarge}>H2 styled as Body Large</Heading><Heading level={2} visualStyle={TypographyVisualStyle.bodyMedium}>H2 styled as Body Medium</Heading><Heading level={2} visualStyle={TypographyVisualStyle.bodySmall}>H2 styled as Body Small</Heading><Heading level={2} visualStyle={TypographyVisualStyle.bodyXSmall}>H2 styled as Body XSmall</Heading></>);}
Context Variant
The contextVariant
prop can be used to set additional styles on a heading component. The contextVariant
can affect the font-size, text-transform, or font-family. The default contextVariant
is default
.
The expressive
context variant can be used in marketing contexts, which may require more variety than the default styles.
The narrative
context variant can be used for content-heavy contexts, such as a blog post or an e-reader.
import React from 'react';import { Heading, TypographyContextVariant } from 'react-magma-dom';export function Example() {return (<><div style={{ marginBottom: '40px' }}><Heading contextVariant={TypographyContextVariant.expressive} level={1}>Expressive Heading 1</Heading><Heading contextVariant={TypographyContextVariant.expressive} level={2}>Expressive Heading 2</Heading><Heading contextVariant={TypographyContextVariant.expressive} level={3}>Expressive Heading 3</Heading><Heading contextVariant={TypographyContextVariant.expressive} level={4}>Expressive Heading 4</Heading><Heading contextVariant={TypographyContextVariant.expressive} level={5}>Expressive Heading 5</Heading><Heading contextVariant={TypographyContextVariant.expressive} level={6}>Expressive Heading 6</Heading></div><div><Heading contextVariant={TypographyContextVariant.narrative} level={1}>Narrative Heading 1</Heading><Heading contextVariant={TypographyContextVariant.narrative} level={2}>Narrative Heading 2</Heading><Heading contextVariant={TypographyContextVariant.narrative} level={3}>Narrative Heading 3</Heading><Heading contextVariant={TypographyContextVariant.narrative} level={4}>Narrative Heading 4</Heading><Heading contextVariant={TypographyContextVariant.narrative} level={5}>Narrative Heading 5</Heading><Heading contextVariant={TypographyContextVariant.narrative} level={6}>Narrative Heading 6</Heading></div></>);}
Color
The color
prop can be used to change the color of the heading to convey additional meaning. It accepts the values: success
, danger
and subdued
.
import React from 'react';import { Heading, TypographyColor } from 'react-magma-dom';export function Example() {return (<><Heading color={TypographyColor.success} level={2}>Success Color Heading</Heading><Heading color={TypographyColor.danger} level={2}>Danger Color Heading</Heading><Heading color={TypographyColor.subdued} level={2}>Subdued Color Heading</Heading></>);}
Inverse
The isInverse
property is an optional boolean that changes the colors so the component can appear on a dark background.
import React from 'react';import { Card, CardBody, Heading, TypographyColor } from 'react-magma-dom';export function Example() {return (<Card isInverse><CardBody><Heading isInverse level={2}>Heading 2</Heading><Heading color={TypographyColor.success} isInverse level={2}>Success Color Heading</Heading><Heading color={TypographyColor.danger} isInverse level={2}>Danger Color Heading</Heading><Heading isInverse level={2} color={TypographyColor.subdued}>Heading 2 Subdued</Heading></CardBody></Card>);}
No Margins
By default, the Heading
component includes margins on the top and bottom. When the noMargins
prop is applied, the element will have a margin value of 0.
import React from 'react';import { Heading } from 'react-magma-dom';export function Example() {return (<><Heading noMargins level={1}>Heading 1</Heading><Heading noMargins level={2}>Heading 2</Heading><Heading noMargins level={3}>Heading 3</Heading><Heading noMargins level={4}>Heading 4</Heading><Heading noMargins level={5}>Heading 5</Heading><Heading noMargins level={6}>Heading 6</Heading></>);}
Forward Ref
Using React's forwardRef
feature you can gain access to the reference of the internal heading.
import React from 'react';import { Button, Heading } from 'react-magma-dom';export function Example() {const headingRef = React.useRef<HTMLHeadingElement>();function handleClick() {headingRef.current.tabIndex = -1;headingRef.current.focus();}return (<><Heading ref={headingRef} level={1}>Heading to Be Focused</Heading><Button onClick={handleClick}>Click to focus heading</Button></>);}
Testing
Passing in the testId
prop will add the data-testid
attribute to the heading element for easier querying in tests.
<Heading testId="test-id">Heading 1</Heading>
Heading Props
This component uses forwardRef
. The ref is applied to the heading element.
All of the global HTML attributes can be provided as props and will be applied to the heading (h1-6) element that gets rendered.
as
Type
string
Default
-
children
Description
The content of the component
Type
any
Default
-
color
Description
The color of the component, that helps to convey meaning or relative emphasis
Type
enum, one of:
TypographyColor.danger
TypographyColor.default
TypographyColor.subdued
TypographyColor.success
Default
TypographyColor.default
contextVariant
Description
Additional styles for typography based on the context of the content
Type
enum, one of:
TypographyContextVariant.default
TypographyContextVariant.expressive
TypographyContextVariant.narrative
Default
TypographyContextVariant.default
element
Type
string
Default
-
isInverse
Description
If true, the component will have inverse styling to better appear on a dark background
Type
boolean
Default
false
level
Description
Number to indicate which level heading will render (e.g. h1, h2 etc.)
Type
1 | 2 | 3 | 4 | 5 | 6
Default
-
noMargins
Type
boolean
Default
-
ref
Type
any
Default
-
theme
Type
any
Default
-
visualStyle
Description
Applies visual styles including font-size, font-weight, line-height and margins
Type
enum, one of:
TypographyVisualStyle.bodyLarge
TypographyVisualStyle.bodyMedium
TypographyVisualStyle.bodySmall
TypographyVisualStyle.bodyXSmall
TypographyVisualStyle.heading2XLarge
TypographyVisualStyle.heading2XSmall
TypographyVisualStyle.headingLarge
TypographyVisualStyle.headingMedium
TypographyVisualStyle.headingSmall
TypographyVisualStyle.headingXLarge
TypographyVisualStyle.headingXSmall
Default
-
On this page