Vai direttamente al contenuto

Pattern Library โ€” Componenti

.c-btn

Bottone principale. Colori e ombra si adattano al tema attivo.

Bottone default

Stati

  • Default โ€” sfondo: --color-secondary, testo: --color-text-offset, bordo: --color-primary
  • Hover / Focus โ€” sfondo: --color-bg, testo: --color-text, bordo: --color-text
  • Active โ€” sfondo: --color-bg-offset, testo: --color-text-offset, offset ridotto (il bottone "affonda")

Box-shadow a 3 livelli

L'ombra del bottone ha tre strati sovrapposti che cambiano colore su hover/active:

  1. 0 30px 40px rgba(0,0,0,.1) โ€” ombra diffusa fissa
  2. Primo offset solido (4px 4px) โ€” cambia tra --color-bg e --color-bg-offset
  3. Secondo offset solido (8px 8px) โ€” cambia tra --color-bg-offset e --color-secondary

.c-btn--small

Variante ridotta: padding e font-size inferiori.

Bottone piccolo

Confronto diretto:

Default Small

Bottone su sfondo alternativo (.c-block__textBlock--highlight): i colori del tema si invertono, il bottone resta leggibile.

Bottone su highlight

Layout objects

Classi strutturali con prefisso o-. Non definiscono colori o decorazioni, solo dimensioni e posizionamento.

Torna su ๐Ÿ”

.o-wrapper

Contenitore centrato al 90% della viewport. Usato su quasi tutti i blocchi di contenuto.

  • .o-wrapper โ€” width: 90%; margin: 0 auto;
  • .o-wrapper__narrow โ€” aggiunge max-width: 60% da tablet-hor in su
.o-wrapper โ€” larghezza 90%
.o-wrapper.o-wrapper__narrow โ€” max 60% da tablet-hor

.o-grid

Griglia a 12 colonne con display: grid. Gap: 10px (mobile), 16px (mobile-hor+).

1
2
3
4
5
6
7
8
9
10
11
12

Varianti contenuto

  • .o-grid__content โ€” full width (1 / -1)
  • .o-grid__content--txt โ€” progressivo: full โ†’ col 4/11 (tablet) โ†’ 6/13 (desktop) โ†’ 7/13 (wide)
  • .o-grid__figure โ€” full โ†’ 2/12 (tablet-hor) โ†’ 4/13 (desktop)
  • .o-grid__full โ€” sempre full width (1 / -1)
.o-grid__content (full)
.o-grid__content--txt
.o-grid__figure
.o-grid__full

.o-cols / .o-col

Layout flex a colonne. Mobile: colonna singola. Da tablet: riga con flex-wrap.

  • .o-col โ€” flex: 1 (colonne uguali)
  • .o-col--double โ€” flex: 2 (doppia larghezza)
  • .o-col--half โ€” width: 50%
  • .o-col--wide โ€” width: 100%

Alignment modifiers (su .o-cols)

  • .row-reverse โ€” inverte l'ordine
  • .justify-between / .justify-left / .justify-right
  • .align-top โ€” allinea in alto

Colonne uguali:

.o-col
.o-col
.o-col

Double + single:

.o-col--double
.o-col

Half:

.o-col--half
.o-col--half

.o-module

Spaziatore verticale. Aggiunge padding top/bottom (32px) per separare sezioni.

  • .o-module โ€” padding verticale
  • .o-module--half โ€” margin verticale (alternativa piรน leggera)
.o-module โ€” il padding verticale crea lo spazio (area interna tratteggiata)

.o-cards

Griglia responsive per card. Colonne progressive:

  • Mobile: 1 colonna
  • Mobile-hor: 2 colonne
  • Tablet-hor: 3 colonne
  • Desktop: 4 colonne
Card 1
Card 2
Card 3
Card 4
Card 5
Card 6
Card 7
Card 8

.o-video-wrapper

Contenitore per embed video 16:9 (padding-bottom: 56.25%). Figlio (iframe, video, object, embed) diventa position: absolute e riempie il contenitore.

16:9 embed placeholder

Grid variants

Varianti specializzate della griglia a 12 colonne, ottimizzate per contesti specifici.

.o-grid-intro

Griglia per la sezione intro/hero. Da tablet-hor in su definisce grid-template-rows: auto 1fr per disporre titolo e contenuto su righe separate. Quattro zone:

Classe Mobile Tablet-hor Desktop
__title 1 / 12 1 / 7, row 1 1 / 8
__intro 1 / -1 7 / -1, row 1/-1 8 / -1
__meta 1 / 12 1 / 7, row 2/-1 1 / 8
__img 1 / -1 1 / span 7 1 / 10

Variante .o-grid-intro--entry: titolo centrato (col 2/-2), immagine spostata a destra (col 3/-1 da desktop).

__title
1/7, row 1
__intro
7/-1, row 1/-1
__meta
1/7, row 2

.o-grid--entry

Variante minimale per le entry. Un solo figlio definito:

  • .o-grid--entry__img โ€” full width (grid-column: 1 / -1)

.o-grid__list-item

Posizionamento dei post nella lista del blog. Layout sfalsato con :nth-of-type per creare un effetto asimmetrico:

Item Mobile Mobile-hor Tablet Desktop
Dispari 1 / -1 1 / -4 1 / 8 3 / 8
Pari 1 / -1 4 / -1 5 / -1 6 / -3
4ยฐ 1 / -1 โ€” 4 / -3 5 / 10
Post 1 (dispari)
Post 2 (pari)
Post 3 (dispari)
Post 4 (speciale)

[class^='icon-']

Sistema icone SVG. Default: 48x48px, fill: none; stroke: currentColor (stile Feather Icons).

  • .icon--filled โ€” variante "piena" (fill: currentColor; stroke: none)

Scala dimensioni:

Classe Dimensione
.icon-xs10px
.icon-s12px
.icon-m16px
.icon-l20px
.icon-xl24px
.icon-xxl30px

Content blocks

Componenti con prefisso c-block. Usati nei template dei post per testo, immagini, tabelle e gallerie.

Torna su ๐Ÿ”

.c-block__textBlock

Box di testo con bordo spesso (8px), ombra e padding. Colori dal tema attivo.

  • Bordo: solid 8px var(--color-border)
  • Sfondo: var(--color-bg)
  • Ombra: $color-ombra (variabile SCSS globale)

Questo stesso box che stai leggendo usa .c-block__textBlock. Il primo e l'ultimo paragrafo hanno margin azzerato per un padding uniforme.

.c-block__textBlock--highlight

Variante "Hey!" per aggiornamenti e note importanti. Caratteristiche:

  • Sfondo invertito: var(--color-bg-offset), testo: var(--color-text-offset)
  • Pseudo-elemento ::before con testo decorativo in heading font
  • Pseudo-elemento ::after con ombra gradient (--color-bg-offset โ†’ --color-secondary โ†’ --color-bg-offset)

Esempio di blocco highlight. Il titolo "Hey!" viene generato dal CSS. L'ombra dietro il box usa un gradient lineare con i colori del tema.

.c-block__figure

Contenitore immagine con box-shadow a offset. L'ombra usa var(--color-bg-offset).

  • Mobile: offset 16px 33px
  • Tablet-hor+: offset 33px 33px
  • Caption con sfondo --color-bg-offset e testo --color-text-offset
Esempio immagine orizzontale

Didascalia di esempio โ€” il colore di sfondo segue --color-bg-offset.

.c-block__figure--vertical

Variante portrait. L'immagine occupa max 50% della larghezza, centrata. Dietro, un ::before mostra la stessa immagine sfocata (filter: blur(10px)) come sfondo decorativo tramite var(--bg-image).

Esempio immagine verticale con sfondo blurred

.c-block__table

Tabella con overflow: auto per scroll orizzontale su mobile (la tabella interna ha min-width: 200vw sotto tablet). Bordi e zebra striping con colori del tema.

Colonna A Colonna B Colonna C Colonna D
Dato 1 Dato 2 Dato 3 Dato 4
Dato 5 Dato 6 Dato 7 Dato 8
Dato 9 Dato 10 Dato 11 Dato 12

.c-block__gallery

Contenitore per carousel Swiper. Quando ci sono 2+ immagini in un blocco bigImg, il template sceglie il carousel invece dell'immagine singola.

  • Pseudo-elemento ::before con emoji decorativa ๐Ÿž๏ธ (150px, opacity 0.2)
  • JavaScript: Swiper gestisce lo slide, nessun CSS custom necessario oltre la libreria

Componenti UI strutturali

I componenti c- che formano la struttura delle pagine: header, intro, paginazione, meta, tags, newsletter CTA, list feed, search e footer.

Torna su ๐Ÿ”

.c-header

Navigazione principale del sito. Flex row con link bold e stato attivo evidenziato.

  • .c-header__skip โ€” link "Vai al contenuto" nascosto (accessibilitร , position: absolute; top: -100px)
  • .c-header__nav โ€” contenitore <nav>
  • .c-header__list โ€” display: flex; flex-flow: row wrap
  • .c-header__link โ€” padding .8rem .6rem, bold, margin-right crescente per breakpoint
  • .is-active > .c-header__link โ€” bordo 4px in --color-primary-offset

Margine verticale progressivo: 8px (mobile) โ†’ 16px (mobile-hor) โ†’ 32px (tablet). Ridotto nei blog entry.

Esempio live โ€” l'header di questa pagina, in alto, รจ il componente .c-header.

.c-intro

Hero section con titolo grande, testo introduttivo opzionale e immagine. Usato in tutte le pagine.

  • .c-intro__title โ€” font Ringside, uppercase, dimensioni responsive:
    • Default: 65px โ†’ 95px โ†’ 145px
    • Homepage: 85px โ†’ 135px โ†’ 185px
    • --longish (titoli > 30 char): 50px โ†’ 75px โ†’ 105px
  • .c-intro__title::before โ€” pseudo-elemento sfondo --color-bg (z-index: -1)
  • .c-intro__intro โ€” box di testo con bordo, ombra e sfondo, come un c-block__textBlock
  • .c-intro__img โ€” immagine hero, con offset negativo su homepage da tablet

L'intro di questa pagina ("Pattern Library โ€” Componenti") usa questo componente.

.c-pagination

Barra di navigazione prev/next per le liste paginate. Bordo top/bottom 4px.

  • .c-pagination__nav โ€” display: flex, centrato
  • .c-pagination__link โ€” flex: 1, colore --color-primary, bold
  • Hover: sfondo --color-bg-offset, testo --color-text-offset

.c-meta

Blocco metadati dei post (data, categoria, tags, autore). Flex column con sfondo --color-bg-offset, opacity 0.7 che diventa 1 su hover.

  • .c-meta__date โ€” data di pubblicazione
  • .c-meta__category โ€” link a categorie/tags con padding e sfondo offset
๐Ÿ—“ Quando: ๐Ÿ™‡๐Ÿปโ€โ™‚๏ธ Categoria: Design ๐Ÿ’๐Ÿผโ€โ™‚๏ธ Cosa: Pattern Library, CSS

.c-tags

Riga di tags con bordo e animazione highlight su :target (flash giallo). Usato nell'indice tags.

  • .c-tags__section โ€” lettera/sezione in font heading, opacity 0.7
  • .c-tags__body โ€” contenitore tags
  • .c-tags__tag โ€” singolo tag: bordo 1px, border-radius 3px, inline-block

.c-newsletter-cta

Banner call-to-action per la newsletter. Bordo top/bottom 8px, con emoji ๐Ÿ’Œ decorativa in ::before (posizionata assolutamente da tablet-hor, dimensione crescente fino a 90px).

Usa la griglia standard .o-grid + .o-grid__content--txt per il testo e un .c-btn per il link.

.c-list-feed

Lista di post correlati/recenti. Usato nel footer di tutte le pagine (sezione "Ultimi articoli").

  • .c-list-feed__title โ€” titolo sezione in font Ringside, dimensioni 70px โ†’ 95px โ†’ 145px
  • .c-list-feed__item โ€” singolo post con sfondo --color-bg, margine tra items
  • .c-list-feed__link โ€” link full-width con padding
  • .c-list-feed__bg โ€” immagine di sfondo del post (opacity 0.2, si anima su hover)
  • .c-list-feed__post-title โ€” titolo post, uppercase
  • .c-list-feed__categories โ€” lista categorie sotto il titolo

.c-search

Form di ricerca con caricamento htmx. Padding responsive via vw.

  • .c-search__form โ€” margine e padding crescenti per breakpoint
  • .c-search__wrap โ€” display: flex
  • .c-search__input โ€” input full-width, min 230px, no border-radius
  • .c-search__categories โ€” box con bordo 16px in --color-text, sfondo --color-bg
  • .c-search__category โ€” grid responsiva: 48% โ†’ 32% โ†’ 24% โ†’ 19%
  • .c-search-loading โ€” overlay di caricamento (fixed, centrato, opacity 0 โ†’ visibile su .htmx-request)

.c-footer

Footer del sito. Sfondo nero fisso ($color-black), bordo top 32px (64px da tablet).

  • .c-footer__navbar / .c-footer__note โ€” testo bianco
  • .c-footer__note โ€” blocco di testo con padding
  • .c-footer__related โ€” sezione contenuti correlati, padding molto generoso (128px โ†’ 256px)
  • .c-footer__nastynastase โ€” immagine decorativa (Nastase!)
  • .c-footer__disclaimer โ€” credits in viola (#4e2683), link con doppia sottolineatura

Il footer di questa pagina (in basso) รจ il componente .c-footer live.

.post-card

Modificatori per le card nella griglia .o-cards:

  • .post-card--alive โ€” su hover si sposta di -15px in X e Y (effetto "sollevamento")
  • .post-card--nomore โ€” cursor: default (card disabilitata)