Design system

La forma si può leggere nel sorgente

Questa pagina mette una cosa accanto all’altra: il frammento di codice e quello che il browser ne ricava. È una guida pratica per chi progetta e per chi costruisce le pagine.

Il controllo Anteprima tema permette di scegliere Sistema, Chiaro o Scuro. Chiaro e Scuro forzano la palette anche quando il browser usa una preferenza diversa; Sistema la ripristina. Gli esempi di codice e la resa seguono la stessa scelta.

Nel sistema più recente non usiamo classi per dire al CSS “questa è una card” o “questo testo è viola”. Gli elementi HTML raccontano già buona parte della struttura. Quando serve dichiarare un ruolo specifico, aggiungiamo un attributo data-*, per esempio data-layout="home-cover".

La scelta è nata dal desiderio di tenere i contenuti puliti e leggibili: il Markdown racconta, il template dà forma alla struttura, il CSS riconosce elementi e relazioni. Il passaggio è in corso, non concluso: il sito conserva componenti più vecchi che usano classi. La regola per il codice nuovo è non aggiungerne quando semantica e attributi descrittivi bastano.

La tipografia ha tre voci

HTML
<h1>Scivolare di nuovo</h1>
<p>Appunti per continuare a pensare.</p>
<p><a href="#">Un collegamento nel testo.</a></p>
<blockquote>Una frase resta in margine.</blockquote>
Resa

Scivolare di nuovo

Appunti per continuare a pensare.

Un collegamento nel testo.

Una frase resta in margine.

IM Fell English dà carattere ai titoli, Alegreya porta la voce della lettura e Oswald governa navigazione e metadati. Gli elementi stabiliscono la gerarchia; i token dei font ne definiscono la materia.

L’immagine dichiara il suo ruolo

HTML
<figure data-layout="home-cover">
  <img src="/assets/illustrations/home-banana-v1.jpg"
       alt="Una banana matura.">
</figure>
Resa
Dettaglio ravvicinato di una banana matura macchiata, su uno sfondo grigio sfocato.

data-layout nomina una funzione prevista. La stessa regola per la figura vale ovunque compaia l’immagine; il Markdown parla dell’immagine, non dei suoi margini.

La struttura forma la lista

HTML
<section>
  <article>
    <h3>Una banana evoca la caduta</h3>
    <p>Un’icona, una scena, un significato.</p>
  </article>
</section>
Resa

APPUNTI · LINGUAGGIO

Una banana evoca la caduta

Un’icona, una scena, un significato.

WORK · RICERCA

Capire prima di decidere

Un sistema di scelte che diventa leggibile.

Il browser vede una sezione che contiene articoli. La relazione tra genitore e figli dà un confine alla griglia. Non serve una classe per disegnare un riquadro a forma di card.

Una nota entra nel testo

HTML
<div data-comments-root>
  <div data-comments-bar>
    <span data-comments-label>Nota a margine</span>
    <button data-comments-toggle>Nascondi le note</button>
  </div>
  <article data-comment>
    <p data-comment-meta>Ada · 4 novembre</p>
    <p data-comment-body>La banana è già una storia.</p>
  </article>
</div>
Resa
Nota a margine

Ada · 4 novembre

La banana è già una storia.

I nomi data-* sono agganci per gli stili e per JavaScript. Questa miniatura non ha un endpoint API: il pulsante mostra il componente, non è un controllo attivo.

Cambia la palette, non l’immagine

CSS
:root {
  --ink: #241d22;
  --bg: #fbfafb;
  --link: #790b78;
  --red: #b3132b;
}

@media (prefers-color-scheme: dark) { :root { --ink: #f1edef; --bg: #1b1c20; --link: #e15bd7; --red: #ff4057; } }

Resa
CHIAROGrafite · biancoLink viola
DARKCarbone · luceLink viola

Il tema sostituisce i token condivisi seguendo la preferenza del dispositivo. Le immagini conservano colori e materia originali.

Gli elementi HTML del blog

Questo inventario deriva dalle pagine del blog generate. Ogni voce è un elemento HTML reale: il suo ruolo visivo nasce dal significato, dalla posizione e, quando serve, da un attributo descrittivo data-*.

Documento

  • html
  • head
  • title
  • meta
  • link
  • script
  • body

Definiscono il documento e ne caricano metadati, stili e comportamenti. La maggior parte non compare nella pagina visibile.

Struttura

  • header
  • nav
  • main
  • section
  • article
  • aside
  • footer
  • div

Gli elementi semantici descrivono il compito di ogni regione. div raggruppa contenuti quando non serve un significato più specifico.

Testo e gerarchia

  • h1
  • h2
  • h3
  • p
  • a
  • blockquote
  • cite
  • strong
  • em
  • small
  • span
  • br
  • time
  • hr

I titoli organizzano la gerarchia; gli altri elementi indicano paragrafi, citazioni, enfasi, date e pause.

Elenchi

  • ul
  • ol
  • li

ul raccoglie elementi senza ordine, ol indica una sequenza e li rappresenta ogni voce.

Immagini e media

  • figure
  • picture
  • source
  • img
  • iframe

picture e source scelgono il file adatto allo schermo; figure dà all’immagine un posto nel racconto.

Moduli e azioni

  • form
  • fieldset
  • legend
  • label
  • input
  • textarea
  • button

Raccolgono campi correlati, li rendono comprensibili e permettono di inviare un messaggio o cambiare vista.

Grafica vettoriale

  • svg
  • path

svg contiene disegni scalabili; path ne descrive le forme.

Come funziona l’aggancio degli stili

Gli stili seguono tre indizi:

  1. L’elemento: h1, p, figure, blockquote, article.
  2. La relazione: una figura dentro il flusso del post, oppure articoli figli della sezione che li raccoglie.
  3. Il ruolo esplicito: data-layout, data-post-flow, data-card-kind o altri attributi data-* quando il solo elemento non basta.

Un attributo data-* deve descrivere una funzione stabile, non una decorazione temporanea. data-layout="home-cover" dice quale comportamento d’impaginazione serve all’immagine; data-purple o data-big descriverebbero invece una decisione visiva isolata, da risolvere nel CSS.

Gli stessi attributi possono collegare JavaScript e markup. Nel componente delle note, per esempio, data-comments-list identifica la lista da aggiornare quando arriva la risposta dell’API. Il testo inserito viene trattato come testo semplice, non come HTML.

Tipografia e token

La direzione 08 usa tre famiglie, ognuna con una voce distinta: IM Fell English per titoli e accenti, Alegreya per il testo di lettura e le citazioni, Oswald per navigazione, etichette e metadati. I font sono serviti da assets/fonts/, senza richieste a servizi esterni. Le licenze SIL Open Font License sono incluse accanto ai file.

I token all’inizio di assets/style.css danno nomi alle decisioni condivise:

Il tema scuro sostituisce i colori dei token tramite prefers-color-scheme. Non filtra le immagini: foto e illustrazioni conservano i colori e la materia con cui sono state scelte.

Immagini e componenti

Il layout di un’immagine è dichiarato con data-layout; i valori e la sintassi Markdown sono documentati in requirements/immagini-layout.md. Una foto d’apertura conserva il proprio rapporto, una galleria segue la sequenza del racconto e le tavole Work mantengono la carta originale.

Le note a margine usano attributi come data-comments-root, data-comments-list e data-form-toggle. Il template le inserisce nel flusso dell’articolo; JavaScript carica e invia le note; assets/xmpp-discussion.css stabilisce filetti, tipografia e controlli. Il lettore può chiudere l’intero flusso delle note o aprire il modulo quando vuole intervenire.

Prima di aggiungere una regola

assets/style.css contiene ancora regole storiche oltre al sistema 08. La posizione di una regola nella cascata conta: quando una pagina appare diversa dal previsto, trova prima quale selettore la governa e da dove arriva. Aggiungere un override in fondo senza ricostruire quel percorso rende il codice più difficile da leggere la volta successiva.

Mappa del progetto

La sezione Gli elementi HTML del blog elenca gli elementi trovati nelle pagine generate: è un inventario del markup effettivamente pubblicato, non una lista teorica.