@financial-times/o-teaser
Version:
Provides styling for teaser elements, which contain information about an article and link through to it
206 lines (146 loc) • 7.53 kB
Markdown
# o-teaser
This component is for displaying teasers which link through to articles.
- [Usage](#usage)
- [Development](#development)
- [Markup](#markup)
- [Sass](#sass)
- [Migration guide](#migration-guide)
- [Contact](#contact)
- [Licence](#licence)
## Usage
Check out [how to include Origami components in your project](https://origami.ft.com/documentation/components/#including-origami-components-in-your-project) to get started with `o-teaser`.
## Development
Install the [Origami build tools](https://github.com/Financial-Times/origami-build-tools/blob/master/README.md) to [build and run demos](https://github.com/Financial-Times/origami-build-tools/blob/master/README.md#developing-modules-locally)
## Markup
The basic markup structure for a teaser will look something like this:
```html
<div class="o-teaser o-teaser--small">
<div class="o-teaser__content">
<a href="#" class="o-teaser__tag">World</a>
<h2 class="o-teaser__heading">
<a href="#">Japan sells negative yield 10-year bonds</a>
</h2>
<div class="o-teaser__timestamp">
<time
data-o-component="o-date"
class="o-teaser__timestamp-date"
datetime="2016-02-29T12:35:48Z"
>2016-02-29T12:35:48Z</time
>
</div>
</div>
</div>
```
Optionally include the [o-date](https://registry.origami.ft.com/components/o-date) component within your project to render a formatted date within the timestamp element `o-teaser__timestamp`. This is required to render relative timestamps e.g. "1hr ago".
Teasers support a wide array of [elements](#supported-elements) and can be customised using several [themes](#themes) and should be used as required. For a full list of examples including example markup, see [o-teaser in the Registry](http://registry.origami.ft.com/components/o-teaser).
### Images
To add an image to a teaser, you should use the following markup structure:
```html
<div class="o-teaser__image-container">
<img src="{image-src}" class="o-teaser__image" alt="{alt text}" />
</div>
```
To support lazy-loading of images you can use the `o-teaser__image-placeholder` element, as below:
```html
<div class="o-teaser__image-container">
<div class="o-teaser__image-placeholder">
<img src="{image-src}" class="o-teaser__image" alt="{alt text}" />
</div>
</div>
```
### Supported elements
The following elements are supported by default:
```sh
.o-teaser__tag # Small coloured tag at the top of the teaser
.o-teaser__tag-suffix # Small coloured content to come after the tag, such as timestamp or duration
.o-teaser__tag-prefix # A container for content before the tag
.o-teaser__heading # Main heading of the teaser
.o-teaser__standfirst # A short piece of content
.o-teaser__image-container # Wrapper element for an image
.o-teaser__image # An image for the teaser
.o-teaser__headshot # Author's headshot image
.o-teaser__timestamp # A styled timestamp for the teaser
.o-teaser__related # A list of related content links
.o-teaser__related-item # A single item of a related content list
```
## Sass
To include styles for all teasers call `oTeaser`:
```scss
@import '@financial-times/o-teaser/main';
@include oTeaser();
```
Teasers are made up of various elements (e.g. heading, standfirst, timestamp) and a series of themes (e.g. small, large, video). Pass a list of `elements` and `themes` in an options `$opts` argument to include only the styles you need:
```scss
@include oTeaser(
$opts: (
'elements': (
'default',
'images',
),
'themes': (
'small',
'large',
'video',
),
)
);
```
Elements are specified via groups, they include:
- `default` - all basic text elements, including: heading, standfirst, meta, and tag.
- `images` - all image element styles
- `promoted` - promoted by and paid post element styles
- `related-items` - styling for the related items elements
- `timestamp` - styles for the timestamp and live post styles
[Themes](#themes) include:
- `small` - styling for [small teasers](#small-teasers)
- `large` - styling for [large teasers](#large-teasers)
- `standard` - outputs the opinion and inverse themes
- `video` - outputs the [video teaser](#video-teasers) styles
- `audio` - outputs the [audio teaser](#audio-teasers) styles
- `top-stories` - outputs all top stories teaser styles and variations
- `hero` - outputs all [hero](#hero-teasers) teaser styles and variations
### Themes
`o-teaser` has a selection of themes to help highlight content and provide a diverse layout. Themes are separated into 3 types of layout, each with their own modifiers to add different variations on the styles.
#### Small teasers
Uses the `o-teaser--small` modifier.
[View example on the Registry](http://registry.origami.ft.com/components/o-teaser#demo-small)
Additional modifiers:
- `stacked`: moves the image to the top of the teaser
- `opinion`: changes the tag colour to blue
- `live`: change background to red and position of elements to make the teaser stand out
- `post`: set liveblog post styles
#### Large teasers
Uses the `o-teaser--large` modifier.
[View example on the Registry](http://registry.origami.ft.com/components/o-teaser#demo-large)
Additional modifiers:
- `opinion`: adds a blue background
- `highlight`: adds a claret background
#### Hero teasers
Uses the `o-teaser--hero` modifier.
[View example on the Registry](http://registry.origami.ft.com/components/o-teaser#demo-hero)
Additional modifiers:
- `centred`: centres the image and text
- `opinion`: adds a blue background
- `highlight`: adds a claret background
- `stretched`: makes the teaser take up the full height of the available space and anchors the standout and timestamp content to the bottom of the teaser.
#### Video teasers
Uses the `o-teaser--video` modifier.
[View example on the Registry](http://registry.origami.ft.com/components/o-teaser#demo-video)
#### Video teasers
Uses the `o-teaser--audio` modifier.
[View example on the Registry](http://registry.origami.ft.com/components/o-teaser#demo-audio)
## Migration guide
| State | Major Version | Last Minor Release | Migration guide |
| :----------: | :-----------: | :----------------: | :---------------------------------------------------: |
| ⚠ maintained | 7 | N/A | [migrate to v7](MIGRATION.md#migrating-from-v6-to-v7) |
| ╳ deprecated | 6 | 6.4 | [migrate to v6](MIGRATION.md#migrating-from-v5-to-v6) |
| ╳ deprecated | 5 | 5.2 | [migrate to v5](MIGRATION.md#migrating-from-v4-to-v5) |
| ╳ deprecated | 4 | 4.0 | [migrate to v4](MIGRATION.md#migrating-from-v3-to-v4) |
| ╳ deprecated | 3 | 3.5 | [migrate to v3](MIGRATION.md#migrating-from-v2-to-v3) |
| ╳ deprecated | 2 | 2.5 | [migrate to v2](MIGRATION.md#migrating-from-v1-to-v2) |
| ╳ deprecated | 1 | 1.9 | - |
## Contact
If you have any questions or comments about this component, or need help using it, please either [raise an issue](https://github.com/Financial-Times/o-teaser/issues), visit [#origami-support](https://financialtimes.slack.com/messages/origami-support/) or email [Origami Support](mailto:origami-support@ft.com).
---
## Licence
This software is published by the Financial Times under the [MIT licence](http://opensource.org/licenses/MIT).