remarqueeble
Version:
Custom element tribute to the cursed glory of marquee.
255 lines (171 loc) • 6.18 kB
Markdown
# <mark aria-label="Remarqueeble"><re-marquee>ble</mark>
A tiny custom element tribute to the cursed glory of `<marquee>`, exposed as
`<re-marquee>` and `<re-marquee-ble>`.
Remarqueeble v0.6.0
By Rémino Rem
<https://remino.net/>
[Docs](https://remino.net/remarqueeble/) |
[Code Repo](https://github.com/remino/remarqueeble) |
[npm Package](https://www.npmjs.com/package/remarqueeble)
---
<!-- mtoc-start -->
- [Installation](#installation)
- [HTML (CDN)](#html-cdn)
- [npm](#npm)
- [Direct download](#direct-download)
- [Usage](#usage)
- [Attributes](#attributes)
- [API](#api)
- [Remarquee Lite](#remarquee-lite)
- [Development](#development)
- [Contributing](#contributing)
- [Licence](#licence)
<!-- mtoc-end -->
---
## Installation
### HTML (CDN)
Register the custom elements automatically from a CDN:
```html
<script src="https://unpkg.com/remarqueeble"></script>
```
Mirrors:
- https://unpkg.com/remarqueeble
- https://cdn.jsdelivr.net/npm/remarqueeble
Use a pinned version in production:
```html
<script src="https://unpkg.com/remarqueeble@0.6.0"></script>
```
If you want the API instead of auto-registration, import the ES module directly:
```html
<script type="module">
import { defineRemarqueebleElements } from 'https://unpkg.com/remarqueeble@0.6.0/dist/remarqueeble.mjs'
defineRemarqueebleElements()
</script>
```
### npm
Install the package first:
```sh
npm install remarqueeble
```
Then register the custom elements automatically:
```js
import 'remarqueeble/auto'
```
Or import the explicit API:
```js
import { defineRemarqueebleElements } from 'remarqueeble'
defineRemarqueebleElements()
```
TypeScript declarations are included with the package.
Bundlers normally minify production builds for you, so npm users should prefer
the package exports above instead of importing files from `dist/` directly.
### Direct download
Download the package tarball or individual files from npm/CDN:
- https://www.npmjs.com/package/remarqueeble
- https://unpkg.com/remarqueeble/dist/
- https://cdn.jsdelivr.net/npm/remarqueeble/dist/
The browser-ready auto-registration file is `dist/remarqueeble-auto.min.js`.
Distribution files:
- `dist/remarqueeble.mjs`: ES module library API.
- `dist/remarqueeble.cjs`: CommonJS library API.
- `dist/remarqueeble-auto.mjs`: ES module auto-registration entry.
- `dist/remarqueeble-auto.cjs`: CommonJS auto-registration entry.
- `dist/remarqueeble-auto.min.js`: minified classic browser auto-registration.
- `dist/lite.css`: CSS-only marquee styles.
- `dist/lite.min.css`: minified CSS-only marquee styles.
[Back to top](#)
---
## Usage
After registration, use either element name:
```html
<re-marquee>Default marquee behaviour.</re-marquee>
<re-marquee-ble direction="right">Rightward marquee behaviour.</re-marquee-ble>
```
[Back to top](#)
---
## Attributes
<mark aria-label="Remarqueeble"><re-marquee>ble</mark> follows the legacy
marquee attribute names where practical:
- `animate`: `always`, `overflow`, or `never`. Defaults to `always`.
- `behavior`: `scroll`, `slide`, or `alternate`.
- `direction`: `left`, `right`, `up`, or `down`.
- `scrollamount`: step size as a non-negative number or CSS length. Unitless
numbers are pixels.
- `scrolldelay`: delay between steps in milliseconds.
- `truespeed`: keeps delays under 60ms instead of clamping them.
- `loop`: positive loop count, or `-1` for infinite scrolling.
- `bgcolor`, `width`, `height`, `hspace`, `vspace`: presentational hints mapped
to CSS.
[Back to top](#)
---
## API
Each element exposes the legacy methods:
```js
const marquee = document.querySelector('re-marquee')
marquee.stop()
marquee.start()
```
[Back to top](#)
---
## Remarquee Lite
For a CSS-only marquee, import `remarqueeble/lite.css` or load `dist/lite.css`
directly. For direct CDN usage, `dist/lite.min.css` is also available.
```html
<link rel="stylesheet" href="https://unpkg.com/remarqueeble/dist/lite.css" />
<div class="re-marquee" style="--re-marquee-duration: 12s;">
<div class="re-marquee__track">CSS-only marquee</div>
</div>
```
The lite CSS follows the simpler pure-CSS pattern and does not require
duplicated content. It does not emulate legacy `<marquee>` measurement,
`behavior`, `scrollamount`, `scrolldelay`, or finite `loop` handling.
When `prefers-reduced-motion: reduce` is active, animation is disabled and the
content is shown statically.
Optional classes:
- `re-marquee--reverse`: scroll in the opposite direction.
- `re-marquee--vertical`: scroll vertically.
- `re-marquee--paused`: pause the animation.
- `re-marquee--pause-on-hover`: pause while hovered.
CSS variables:
- `--re-marquee-duration`: animation duration. Defaults to `20s`.
- `--re-marquee-timing-function`: animation timing function. Defaults to
`linear`, and accepts values such as `steps(24, end)`.
- `--re-marquee-start-pos`: starting transform position. Defaults to `0`.
- `--re-marquee-end-pos`: ending transform position. Defaults to `-100%`.
[Back to top](#)
---
## Development
```sh
npm install
npm run dev
npm run build
```
The library source lives in `src/lib`. The documentation site is built with
Astro and lives in the rest of `src`.
Release automation is available through `release-it`. A release runs checks,
builds, publishes the npm package, pushes the release commit and tag, creates a
GitHub release, uploads `dist/*`, then publishes docs:
```sh
npm run release:dry-run
npm run release
```
If docs publishing fails after the package release, rerun it directly:
```sh
npm run docs:publish
```
Before running a real release, make sure `RELEASE_IT_GITHUB_TOKEN` is set and
`npm whoami --registry https://registry.npmjs.org/` passes. Release-it prompts
for an npm OTP when npm requires one.
---
## Contributing
1. Fork the repository.
2. Create a feature branch: `git checkout -b feature/amazing-feature`.
3. Make your changes.
4. Run `npm run build` and `npm test`.
5. Commit, push, and open a pull request.
Issues and ideas are welcome—please star the project if you enjoy it!
[Back to top](#)
---
## Licence
Licensed under the ISC licence. See `LICENSE.md`.
[Back to top](#)