Skip to content

Témy

Reast Engine sa témuje cez CSS custom properties, všetky s prefixom --re-. Prepíšte ich na elemente <reast-engine> alebo na ľubovoľnom predkovi — hodnoty sa dedia cez hranicu Shadow DOM.

Dva štýlové zošity

Engine dodáva dva adoptované stylesheety:

  • playerStyles — štrukturálne štýly, adoptované každým elementom. Jeho predvolené farby a typografia sa opierajú o inherit, currentColor a transparent, takže nenaštýlovaný embed prevezme vzhľad hostiteľskej stránky namiesto toho, aby vnucoval vlastný. Holý <reast-engine> vo vašej aplikácii zdedí váš font, farbu aj pozadie.
  • standaloneStyles — vyhranená čitateľská paleta (farby, fonty, remapy pre dark mode a vysoký kontrast a predvolený lightbox overlay). Adoptuje ju iba standalone CDN build, navrch playerStyles.

Takže CDN snippet vyzerá navrhnuto hneď po vybalení, kým embedovaný element vyzerá ako súčasť vášho webu, kým si ho nenaštýlujete.

Custom properties

„Embedded" je to, čo nenaštýlovaný embed dostane z playerStyles; „Standalone" je to, čo standaloneStyles priradí v CDN builde.

Rozloženie

VlastnosťPredvolenáPopis
--re-max-width42remMaximálna šírka obsahu
--re-padding1.5remVnútorné odsadenie

Farby

VlastnosťEmbeddedStandalone (svetlá)Popis
--re-color-bgtransparent#faf9f6Pozadie
--re-color-textinherit#1f1f2eText tela
--re-color-headingdedí textdedí textFarba nadpisov
--re-color-text-mutedinherit#5c5c6eStlmený/sekundárny text
--re-color-bordercurrentColor#d4d4d8Okraje
--re-color-accentcurrentColor#5b4fc7Akcent / odkazy
--re-color-accent-hovercurrentColor#4a3fb0Akcent pri hoveri
--re-color-code-bgtint currentColorrgba(0,0,0,0.06)Pozadie kódu
--re-color-danger#dc2626#dc2626Farba chyby
--re-color-highlightpriesvitná žltápriesvitná žltáPozadie zvýrazňovacej značky
--re-color-choice-bgtransparentrgba(91,79,199,0.06)Pozadie voľby
--re-color-choice-bordertint currentColorrgba(91,79,199,0.2)Okraj voľby
--re-color-choice-bg-hovertint currentColorrgba(91,79,199,0.12)Pozadie voľby pri hoveri

Typografia

VlastnosťEmbeddedStandalonePopis
--re-font-bodyinherit'Literata', Georgia, serifFont tela
--re-font-headingdedí telodedí teloFont nadpisov
--re-font-monomonospace'Fira Code', monospaceMonospace font
--re-font-sizeinheritclamp(1.0625rem, …, 1.25rem)Základná veľkosť fontu
--re-line-heightinherit1.7Výška riadku tela
--re-h1-size--re-h5-size2em1emrovnakéVeľkosti nadpisov

Medzery a tvar

VlastnosťPredvolenáPopis
--re-paragraph-spacing1emMedzera medzi odsekmi
--re-heading-margin1.5em 0.5emMargin bloku nadpisu
--re-hr-margin2emMargin horizontálnej čiary
--re-choice-gap0.5emMedzera medzi voľbami
--re-choice-radius6pxBorder radius volieb
--re-choice-padding0.75em 1emVnútorné odsadenie volieb
--re-media-radius6pxBorder radius médií
--re-transition-speed0.2sGlobálna rýchlosť prechodov (0s pri reduced-motion)

Remapy len pre standalone

standaloneStyles CDN buildu tiež definuje hodnoty --re-dark-* aplikované pod @media (prefers-color-scheme: dark) a hodnoty --re-hc-* aplikované pod @media (prefers-contrast: more). Embedovaný element ich nedodáva — hostiteľ, ktorý chce dark mode, nastaví --re-color-* sám (zvyčajne dedením z vlastnej témy), čo je aj tak zvyčajne to, čo chcete, keďže embed už prevzal farby hostiteľa.

Príklad: tmavý embed

Keďže embedované predvolené hodnoty dedia, najjednoduchšia tmavá téma je nechať element zdediť tmavého hostiteľa, alebo nastaviť pár vlastností:

css
reast-engine {
  --re-color-bg: #1a1a2e;
  --re-color-text: #e0e0e0;
  --re-color-accent: #a78bfa;
  --re-color-accent-hover: #8b6ff0;
  --re-color-border: #374151;
}

Príklad: minimálny čitateľ

css
reast-engine {
  --re-font-body: 'Literata', serif;
  --re-font-size: 1.25rem;
  --re-line-height: 1.8;
  --re-max-width: 55ch;
  --re-paragraph-spacing: 2em;
}

Núdzový východ: extraStyleSheets

Pre pravidlá, ktoré CSS custom properties nevyjadria, vložte CSSStyleSheet do ReastEngine.extraStyleSheets pred vytvorením akéhokoľvek elementu — adoptuje sa do shadow rootu každého elementu za playerStyles. Už vytvorené inštancie sa dodatočne neupravia. (Presne takto standalone build pridáva standaloneStyles.)

ts
import { ReastEngine, registerEngine } from '@reast/engine/player';

const sheet = new CSSStyleSheet();
sheet.replaceSync(`.re-choice { text-transform: uppercase; }`);
ReastEngine.extraStyleSheets.push(sheet);

registerEngine();

Hranica Shadow DOM

Player vykresľuje obsah vnútri Shadow DOM, takže štýly hostiteľskej stránky doň nepreniknú a štýly príbehu von. Custom properties a extraStyleSheets sú podporované spôsoby cez hranicu; element navyše vystavuje atribúty part (identity, identity-title, identity-authors) pre štýlovanie cez ::part().