npm package: @rsmdc/typography
Description: Typography classes, mixins, and variables for rsmdc.
Latest version: 1.1.39

<!--docs:
title: "Typography"
layout: detail
section: components
excerpt: "Typographic scale that handles a set of type sizes"
iconId: typography
path: /catalog/typography/
-->

# Typography

Material Design's text sizes and styles were developed to balance content density and reading comfort under typical usage conditions.

RS Typography is a foundational module that applies these styles to RS Web components. The typographic styles in this module are derived from thirteen styles:

* Headline 1
* Headline 2
* Headline 3
* Headline 4
* Headline 5
* Headline 6
* Subtitle 1
* Subtitle 2
* Body 1
* Body 2
* Caption
* Button
* Overline

## Design & API Documentation

<ul class="icon-list">
  <li class="icon-list-item icon-list-item--spec">
    <a href="https://material.io/go/design-typography">Material Design guidelines: Typography</a>
  </li>
  <li class="icon-list-item icon-list-item--link">
    <a href="https://material-components.github.io/material-components-web-catalog/#/component/typography">Demo</a>
  </li>
</ul>

## Installation

```
npm install ../typography
```

## Basic Usage

### HTML Structure

We recommend using Roboto from Google Fonts:

```html
<head>
  <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet">
</head>
<body class="rs-typography">
  <h1 class="rs-typography--headline1">Big header</h1>
</body>
```

### Styles

```css
@import "../typography/rs-typography";
```

## Style Customization

### CSS Classes

Some components have a set typographic style. For example, a raised RS Card uses Body 1, Body 2, and Headline styles.

If you want to set the typographic style of an element, which is not a Material Design component, you can apply the following CSS classes.

CSS Class | Description
--- | ---
`rs-typography` | Sets the font to Roboto
`rs-typography--headline1` | Sets font properties as Headline 1
`rs-typography--headline2` | Sets font properties as Headline 2
`rs-typography--headline3` | Sets font properties as Headline 3
`rs-typography--headline4` | Sets font properties as Headline 4
`rs-typography--headline5` | Sets font properties as Headline 5
`rs-typography--headline6` | Sets font properties as Headline 6
`rs-typography--subtitle1` | Sets font properties as Subtitle 1
`rs-typography--subtitle2` | Sets font properties as Subtitle 2
`rs-typography--body1` | Sets font properties as Body 1
`rs-typography--body2` | Sets font properties as Body 2
`rs-typography--caption` | Sets font properties as Caption
`rs-typography--button` | Sets font properties as Button
`rs-typography--overline` | Sets font properties as Overline

### Sass Variables and Mixins

Mixin | Description
--- | ---
`rs-typography-base` | Sets the font to Roboto
`rs-typography($style)` | Applies one of the typography styles, including setting the font to Roboto
`rs-typography-overflow-ellipsis` | Truncates overflow text to one line with an ellipsis
`rs-typography-baseline-top($distance)` | Sets the baseline height of a text element from top.
`rs-typography-baseline-bottom($distance)` | Sets the distance from text baseline to bottom. This mixin should be combined with `rs-typography-baseline-top` when setting baseline distance to following text element.

> **A note about `rs-typography-overflow-ellipsis`**, `rs-typography-overflow-ellipsis` should only be used if the element is `display: block` or `display: inline-block`.

#### `$style` Values

These styles can be used as the `$style` argument for the `rs-typography` mixin.

* `headline1`
* `headline2`
* `headline3`
* `headline4`
* `headline5`
* `headline6`
* `subtitle1`
* `subtitle2`
* `body1`
* `body2`
* `caption`
* `button`
* `overline`

#### Overriding Styles

All styles can be overridden using Sass global variables _before_ the component is imported by setting a global 
variable named `$rs-typography-styles-{style}`. The variable should be assigned a map that contains all the properties
you want to override for a particular style.

Example: Overriding the button `font-size` and `text-transform` properties.

```scss
$rs-typography-styles-button: (
  font-size: 16px,
  text-transform: none,
);

@import "../button/rs-button";
```

Example: Overriding the global `font-family` property. 
```scss
$rs-typography-font-family: "Arial, Helvetica, sans-serif";

...
@import ...
```

Example: Overriding the `font-family` property for `headline1` and `font-family` and `font-size` for `headline2`.
```scss
$rs-typography-styles-headline1: (
  font-family: unquote("Arial, Helvetica, sans-serif")
);
$rs-typography-styles-headline2: (
  font-family: unquote("Arial, Helvetica, sans-serif"),
  font-size: 3.25rem
);

...
@import ...
```