Vai direttamente al contenuto

Pattern library

Pattern library is the new facciamo ordine.

Questa pagina Γ¨ un mix di codice hard-coded e contento da CMS e serve per elencare tutti componenti che ho a disposizione.

Questa qui vicino Γ¨ l'immagine principale. Questo Γ¨ il corpo testo che uso come abstract. Quello a seguire Γ¨ un blocco testo.

Con tutti i tipi di titoli:

Titolo Heading 1

Con piccolo paragrafo sotto. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Titolo Heading 2

Con piccolo paragrafo sotto. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Titolo Heading 3

Con piccolo paragrafo sotto. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Titolo Heading 4

Con piccolo paragrafo sotto. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Titolo Heading 5

E il piccolo paragrafo sotto. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Ultimo il titolo heading 6

Poi ci sono tutte le altre componenti tipografiche.

Questa Γ¨ una citazione (quote)

Mentre questo Γ¨ come appare un blocco di codice

<meta name="viewport" content="width=device-width, initial-scale=1.0" />

Questo che segue invece, Γ¨ un campo figure.

Tra le opzioni c'Γ¨ anche il blocco testo. Questo ne Γ¨ un esempio. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Tipografia

Torna su πŸ”

Font families

Sailec (body, 400/700)

Abcdefghijklmnopqrstuvwxyz 0123456789 β€” Regular 400

Abcdefghijklmnopqrstuvwxyz 0123456789 β€” Bold 700

Ringside Compressed (headings, 700)

Abcdefghijklmnopqrstuvwxyz 0123456789

Monospace (code)

Abcdefghijklmnopqrstuvwxyz 0123456789 { } [ ] ( ) => //

Scala heading

Font: Ringside Compressed Black, weight 700, line-height 0.85, text-transform uppercase solo su h1.

Tag Mobile Tablet Desktop
h160px85px125px
h250px75px105px
h330px50px75px
h430px50px70px
h520px20px30px

Heading 1 β€” 60px mobile

Heading 2 β€” 50px mobile

Heading 3 β€” 30px mobile

Heading 4 β€” 30px mobile

Heading 5 β€” 20px mobile

Corpo testo

Font: Sailec Regular 400, 18px (mobile) → 20px (tablet+), line-height 1.4.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi eu felis at nulla facilisis condimentum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vivamus fermentum semper porta. Nunc diam velit, adipiscing et, hendrerit at, vulputate vitae, nisl.

Aenean lectus. Pellentesque eget nunc. Donec quis orci eget orci vehicula condimentum. Curabitur in libero ut massa volutpat convallis. Morbi odio odio, elementum eu, interdum eu, tincidunt in, leo.

Stili inline

Testo bold (700) e testo italic nella stessa riga.

Un link normale con doppia sottolineatura, e un link visitato.

Testo barrato con del per indicare una correzione.

Codice inline: var(--color-primary) dentro un paragrafo.

// Blocco di codice
$font-family-body: 'Sailec', Helvetica, Arial, sans-serif;
$font-size-default: px(18); // 1.125rem

Blockquote

Il tennis non Γ¨ solo uno sport, Γ¨ un'arte. Come ogni arte, richiede talento, ma il talento non serve a nulla senza dedizione.

β€” Andre Agassi

Liste

Lista non ordinata

  • Primo elemento con emoji freccia
  • Secondo elemento della lista
  • Terzo elemento con un link dentro

Lista ordinata

  1. Australian Open (gennaio)
  2. Roland Garros (maggio-giugno)
  3. Wimbledon (giugno-luglio)
  4. US Open (agosto-settembre)

CSS Custom Properties (tema attivo)

Questi colori cambiano in base al tema corrente. Gli swatch mostrano i valori applicati in questo momento.

--color-bg
Sfondo
--color-text
Testo
--color-primary
Link, accenti
--color-primary-offset
Link hover/focus
--color-secondary
Secondario
--color-bg-offset
Sfondo alternativo
--color-text-offset
Testo su sfondo alt.
--color-border
Bordi

Scala grigi base

Colori di base usati in tutti i temi come punto di partenza.

#fdfdfd
$color-bianco
#dcdbdb
$color-bianco-scuro
#AAA
$color-grigio
#4f4d4d
$color-grigione
#1D1E20
$color-nero

Dark mode

I colori si invertono automaticamente con prefers-color-scheme: dark. Non serve nessuna classe aggiuntiva: il tema attivo scambia le custom properties tramite media query.

In dark mode, ad esempio, --color-bg diventa scuro e --color-text diventa chiaro. Anche --color-primary e --color-primary-offset si scambiano per mantenere il contrasto.

Spaziatura e breakpoints

Torna su πŸ”

Funzione px()

Tutti i valori di spaziatura usano la funzione SCSS px(n) che converte pixel in rem (base 16px). Ad esempio px(32) produce 2rem.

Scala di spaziatura

Scala geometrica (raddoppio) definita in 00-settings/_spacing.scss.

$space-xxs β€” 4px (0.25rem)
$space-xs β€” 8px (0.5rem)
$space-s β€” 16px (1rem)
$space-m β€” 32px (2rem)
$space-l β€” 64px (4rem)
$space-xl β€” 128px (8rem)
$space-xxl β€” 256px (16rem)

Page padding per breakpoint

Padding generico della pagina, scala con il viewport:

Breakpoint Variabile Valore
Mobile $page-padding-mobile 8px ($space-xs)
Tablet $page-padding-tablet 16px ($space-s)
Desktop $page-padding-desktop 32px ($space-m)
Wide $page-padding-wide 64px ($space-l)

Breakpoints

Definiti in 00-settings/_mq-config.scss e gestiti dal mixin sass-mq. Sono 7 breakpoint mobile-first.

mobile β€” 360px
360px
mobile-hor β€” 640px
640px
tablet β€” 768px
768px
tablet-hor β€” 1024px
1024px
desktop β€” 1190px
1190px
wide β€” 1360px
1360px
giga β€” 1920px
1920px β†’

Mixin mq()

Sintassi per le media query. Genera min-width (mobile-first) o max-width con $until.

// Da tablet in su (min-width: 768px)
@include mq(tablet) { ... }

// Solo fino a tablet (max-width: 767px)
@include mq($until: tablet) { ... }

// Tra mobile-hor e desktop
@include mq(mobile-hor, desktop) { ... }

// Valore custom in px
@include mq(950px) { ... }

Page width

Larghezze di riferimento per il contenitore principale:

Variabile Valore
$page-width-default 95%
$page-width-min 288px
$page-width-tablet 576px
$page-width-desktop 1000px
$page-width-wide 1200px

Z-index

Scala definita in 00-settings/_z-index.scss. Mai usare valori arbitrari: scegliere sempre da questa scala.

Variabile Valore Uso
$z-00Crea contesto di stacking
$z-content300Contenuto
$z-footer500Footer
$z-header600Header
$z-dropdown700Dropdown
$z-overlay800Overlay
$z-modal900Modal

Utilities

Classi helper con prefisso u-. Hanno !important dove serve per garantire l'override. Definite in 06-utilities/.

Torna su πŸ”

.u-border-field

Bordo decorativo a "campo da tennis": un ::before assoluto con bordo 16px in --color-text, opacity 0.7, largo 90% e alto 80vh. Usato su <main> in quasi tutti i template.

  • .u-border-field--w100 β€” larghezza 100% (senza margine laterale)
  • .u-border-field--h100 β€” altezza 100% (invece di 80vh)

Questa stessa pagina usa .u-border-field β€” il bordo visibile dietro il contenuto.

Tipografia

Font weight

u-font-normal (400) β€” u-font-bold (700)

Font size

.u-font-size-2xs (12px) β€” .u-font-size-xs (14px) β€” .u-font-size-s (16px)

Allineamento e trasformazioni

  • .u-align-left / .u-align-right
  • .u-uppercase β€” testo in maiuscolo
  • .u-no-decoration β€” rimuove text-decoration

VisibilitΓ  responsive

Nascondono elementi per breakpoint con display: none:

Classe Nasconde
.u-hidden-m Sotto tablet (< 768px)
.u-hidden-t Tra tablet e desktop (768px – 1190px)
.u-hidden-d Tra desktop e wide (1190px – 1360px)
.u-hidden-w Da wide in su (≥ 1360px)
.u-hidden-l Da tablet in su (≥ 768px)

Test live β€” ridimensiona il browser: [visibile: non sei su mobile] [visibile: sei su mobile]

Opacity

.u-opacity-3 β€” .u-opacity-5 β€” .u-opacity-7 β€” .u-opacity-9

Background

  • .u-background-white β€” bianco fisso
  • .u-background-black β€” nero fisso ($color-black)
  • .u-background-themed β€” var(--color-bg)
  • .u-background-themed-secondary β€” var(--color-secondary)
  • .u-background-themed-alternate β€” var(--color-bg-offset)
white
black
themed
secondary
alternate

Colori testo (tema)

  • .u-color-text β€” colore testo principale
  • .u-color-primary β€” colore primario
  • .u-color-primary-offset β€” colore primario offset
  • .u-color-secondary β€” colore secondario

Layout helpers

  • .u-no-padding / .u-no-margin β€” reset spacing
  • .u-float-left / .u-float-right
  • .u-flip-hor β€” transform: scaleX(-1) (mirror orizzontale)
  • .u-listreset β€” rimuove stili lista (margin, padding, list-style)
  • .u-box-shadow β€” applica $color-ombra (l'ombra pesante standard)
  • .u-cols--two / .u-cols--three / .u-cols--four β€” CSS columns

Hovemoji

Cursore emoji personalizzato su hover (solo hover: hover + pointer: fine). Ogni sezione del sito ha un set di 4 emoji che ruotano con suffisso -0 / -1 / -2 / -3.

Classe base Emoji
.u-hovemoji--homepage 🏑 🏘 🏚 🏠
.u-hovemoji--blog-index πŸ“ πŸ™‡πŸ»β€β™‚οΈ πŸ€” 🍿
.u-hovemoji--extra-index ☠️ πŸ¦ƒ 🐲 🍝
.u-hovemoji--chi πŸ‘‹πŸ» πŸ™‹β€β™‚οΈ πŸ›Ή 🚴🏻
.u-hovemoji--cerca πŸ•΅πŸΌβ€β™€οΈ πŸ€“ 🧐 πŸ¦‰
.u-hovemoji--en πŸ‘ΈπŸ» πŸ‡¬πŸ‡§ 🏏 πŸ‡¦πŸ‡Ί

Debug (dev only)

Classi di debug definite in _debug.scss (commentata in produzione):

  • .debug-borders β€” box-shadow rosso inset sull'elemento
  • .debug-borders-nested β€” bordi rossi + arancio su tutti i figli
  • .debug-background β€” sfondo grigio chiaro

SCSS tools & mixins

Mixin e funzioni definiti in 01-tools/. Non generano CSS da soli β€” vanno inclusi con @include nei componenti.

Torna su πŸ”

Funzioni di conversione (00-settings/_px.scss)

GiΓ  documentate nella sezione Spaziatura. Riepilogo rapido:

px(32)          // β†’ 2rem (shortcut principale)
px2rem(32px)    // β†’ 2rem
px2em(32px)     // β†’ 2em
strip-unit(32px) // β†’ 32

@include listreset

Rimuove gli stili di default delle liste.

// Output:
list-style: none;
padding-left: 0;
margin: 0;

Usato anche come utility class: .u-listreset.

@include cf

Micro clearfix. Aggiunge ::before e ::after con display: table e clear: both.

// Uso:
.my-container {
  @include cf;
}

@include cropimg-h

Centra un'immagine orizzontalmente e verticalmente dentro un contenitore con position: relative. L'immagine viene "croppata" se eccede le dimensioni del parent.

// Output:
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);

@include linethrough

Linea barrata tramite ::before con border-top: 1px solid currentColor posizionata al 50% dell'altezza. Rimuove text-decoration nativa.

// Uso:
.prezzo-vecchio {
  @include linethrough;
}

// Variante storta (commentata nel sorgente):
// top: 45%;
// transform: skewY(-20deg);

@include text-gradient

Overlay gradient scuro sul fondo di un elemento. Va applicato a un ::before o ::after di un contenitore con position: relative.

// Output:
display: block;
content: '';
width: 100%;
height: 100%;
position: absolute;
bottom: 0;
background: linear-gradient(
  180deg,
  transparent 42%,
  rgba(0,0,0,0.4) 72%
);
pointer-events: none;

@include breakstring

Previene che URL lunghi o stringhe senza spazi escano dal contenitore. Applica word-break, overflow-wrap e hyphens: auto con tutti i vendor prefix.

// Uso:
.c-comment__body {
  @include breakstring;
}

@include maxTextHeight($font, $lead, $lines, $force)

Limita l'altezza di un blocco di testo a N righe (senza ellipsis). Calcola max-height da font-size × line-height × righe.

Parametro Tipo Descrizione
$font shorthand o unit Dimensione font (es. "m" o px(18))
$lead shorthand o number Line-height (default = $font)
$lines number Numero massimo di righe visibili
$force boolean Se true, forza anche height (non solo max-height)
// Esempio: max 3 righe di testo medio
@include maxTextHeight("m", "m", 3);

// Esempio: esattamente 2 righe, forzato
@include maxTextHeight(px(18), 1.4, 2, true);

@include iconSize($size) / @include iconColor($color)

Mixin per le icone SVG.

// iconSize β€” imposta width e height in px
@include iconSize(24); // β†’ width: 24px; height: 24px;

// iconColor β€” colora fill e stroke del SVG figlio
@include iconColor(var(--color-primary));

@include mq() (sass-mq)

Documentato nella sezione Spaziatura e breakpoints. È il mixin piΓΉ usato nel progetto β€” genera media query mobile-first dai breakpoint definiti in _mq-config.scss.

@include hovemoji($char)

Documentato nella sezione Utilities. Genera un cursore SVG data-URI con un emoji personalizzato.

// Uso:
&:hover {
  @include hovemoji(🎾);
}