+ All Categories
Home > Technology > ITCSS: Architettura scalabile a triangolo invertito

ITCSS: Architettura scalabile a triangolo invertito

Date post: 11-Feb-2017
Category:
Upload: fabrizio-cuscini
View: 268 times
Download: 4 times
Share this document with a friend
55
FABRIZIO CUSCINI UX/UI DESIGNER • FRONTEND ENTHUSIAST ITCSS Inverted Triangle CSS Architecture
Transcript
Page 1: ITCSS: Architettura scalabile a triangolo invertito

FABRIZIO CUSCINIUX/UI DESIGNER • FRONTEND ENTHUSIAST

ITCSSInverted Triangle CSS Architecture

Page 2: ITCSS: Architettura scalabile a triangolo invertito

Scaletta

• Cos’è ITCSS

• Le sorgenti dei nostri problemi

• Struttura di ITCSS: il triangolo invertito

• Estendere l’architettura

• Organizzazione dei file

Page 3: ITCSS: Architettura scalabile a triangolo invertito

Credits

• Harry Roberts

• Consulente Frontend Architect

• @csswizardry

• inuitcss https://github.com/inuitcss • Framework CSS che implementa ITCSS (ovviamente!)

• www.csswizardry.com

Page 4: ITCSS: Architettura scalabile a triangolo invertito

COSA È ITCSS

Page 5: ITCSS: Architettura scalabile a triangolo invertito

Cosa non è ITCSS

• Non è un linguaggio

• Non è un framework

• Non è una libreria CSS

Page 6: ITCSS: Architettura scalabile a triangolo invertito

Cosa è ITCSS

• Architettura a triangolo invertito

• una metodologia, un approccio di alto livello

• architettura strutturata e scalabile

• un meta-framework (un framework per framework)

• molto, molto semplice…

Page 7: ITCSS: Architettura scalabile a triangolo invertito

LE SORGENTI DEI NOSTRI PROBLEMI

Page 8: ITCSS: Architettura scalabile a triangolo invertito

“Colpa” di CSS

• Cascata e ereditarietà

• Altamente dipendente dal Source Order

• Linguaggio poco espressivo

• Specificity

Page 9: ITCSS: Architettura scalabile a triangolo invertito

Colpa nostra!

• Documentazione, quella sconosciuta

• Mancanza di struttura solida, di quality assurance

• A volte, poca conoscenza (di CSS o del progetto)

• Mix di abilità diverse, altamente soggettive

• Diversi stili di programmazione, preferenze, modi di lavorare

• Si fa poco caso a cosa esiste già

• Aggiungere nuovi stili in coda allo stylesheet

Page 10: ITCSS: Architettura scalabile a triangolo invertito

Cascata e ereditarietà

• Ogni porzione di CSS necessita della conoscenza di cosa è venuto prima e di cosa potrebbe venire dopo aka Dependencies

Page 11: ITCSS: Architettura scalabile a triangolo invertito
Page 12: ITCSS: Architettura scalabile a triangolo invertito

Cascata e ereditarietà

• Ogni porzione di CSS necessita della conoscenza di cosa è venuto prima e di cosa potrebbe venire dopo aka Dependencies

• Il CSS di un sito/Web App è un unico gigantesco albero di dipendenze

• Abbiamo bisogno di gestire questa dipendenza a basso livello

Page 13: ITCSS: Architettura scalabile a triangolo invertito

Modi di ordinare CSS

• Replicare la struttura del sito • homepage.css, contacts.css, …

• segmenti tematici: tipografia, forms, buttons, etc… “alla Foundation” • @import "foundation/components/type"

• @import "foundation/components/forms"

• Aggiungi tutto in coda, alla fine del CSS

Page 14: ITCSS: Architettura scalabile a triangolo invertito

project.css

Page 15: ITCSS: Architettura scalabile a triangolo invertito

project.css

Page 16: ITCSS: Architettura scalabile a triangolo invertito

Houston, abbiamo perso il controllo

• Undoing CSS: scrivere (ulteriori) righe di CSS per annullare l’effetto di altre righe di CSS

• Source order gestito male, unito a lunghe e complesse catene di eredità possono portare ad un grosso spreco e/o a ridondanza (e perdita di controllo del progetto)

Page 17: ITCSS: Architettura scalabile a triangolo invertito

Specificity (The Specificity wars)

• Non importa • quanta cura metti nell’ordinare i tuoi sorgenti,

• quanto bene usi la cascata,

• quale naming convention usi…

• la specificitàpuò annullare tutto.

Page 18: ITCSS: Architettura scalabile a triangolo invertito
Page 19: ITCSS: Architettura scalabile a triangolo invertito
Page 20: ITCSS: Architettura scalabile a triangolo invertito

Come si può risolvere?

Page 21: ITCSS: Architettura scalabile a triangolo invertito
Page 22: ITCSS: Architettura scalabile a triangolo invertito

Scrivi CSS in ordine di specificità.

Page 23: ITCSS: Architettura scalabile a triangolo invertito
Page 24: ITCSS: Architettura scalabile a triangolo invertito

IL TRIANGOLO NO, NON LO AVEVO CONSIDERATO

Page 25: ITCSS: Architettura scalabile a triangolo invertito

Abbiamo bisogno di…

• un ambiente sano e accessibile a più persone

• domare la cascata CSS e gestire il source order

• creare un posto in cui far vivere e coesistere tutto (vecchio e nuovo)

• ridurre lo spreco di codice (risorse) e ridondanza

• mettere fine alle Specificity Wars

Page 26: ITCSS: Architettura scalabile a triangolo invertito

generico

esplicito

Page 27: ITCSS: Architettura scalabile a triangolo invertito

vasta scala

localizzato

Page 28: ITCSS: Architettura scalabile a triangolo invertito

bassaspecificità

altaspecificità

Page 29: ITCSS: Architettura scalabile a triangolo invertito

SETTINGS

GENERIC

BASE

OBJECTS

COMPONENTS

TRUMPS

TOOLS

Page 30: ITCSS: Architettura scalabile a triangolo invertito

Organizzazione dei livelli

• Settings: variabili globali, configurazioni, …

• Tools: mixin e funzioni

• Generic: stili ground-zero (Normalize, reset, box-sizing)

• Base: elementi non classati (type selector)

• Objects: cosmetic-free design patterns

• Components: componenti, pezzi della UI

• Trumps: helpers, overrides, utilities, …

Page 31: ITCSS: Architettura scalabile a triangolo invertito

Ricapitolando…

Page 32: ITCSS: Architettura scalabile a triangolo invertito

SETTINGS

Settings disponibili globalmente

Configuration

Brand colors, etc…

Page 33: ITCSS: Architettura scalabile a triangolo invertito

$brand-color: #005dad;$gutter: 20px;

Page 34: ITCSS: Architettura scalabile a triangolo invertito

TOOLS

Tool disponibili globalmente

Public mixins

Helper functions

Page 35: ITCSS: Architettura scalabile a triangolo invertito

@mixin font-brand() { font-family: “UI Font”, sans-serif; font-weight: 400;}

Page 36: ITCSS: Architettura scalabile a triangolo invertito

GENERIC Stili ground-zero

Bassa specificità, su vasta scala

Reset, Normalize, etc…

Page 37: ITCSS: Architettura scalabile a triangolo invertito

html { box-sizing: border-box;} *, *:before,*:after { box-sizing: inherit;}

Page 38: ITCSS: Architettura scalabile a triangolo invertito

BASE

Elementi HTML senza classe

H1-H6, text link, liste, …

Ultimo livello in cui vediamo selettori di tipo (a {}, blockquote {})

Page 39: ITCSS: Architettura scalabile a triangolo invertito

ul { list-style: square outside;} textarea { height: auto; min-height: 50px;}

Page 40: ITCSS: Architettura scalabile a triangolo invertito

OBJECTS

OOCSS

Design patterns

Niente cosmetica

Si utilizzano solo classi

Nomi agnostici (.ui-list {})

Page 41: ITCSS: Architettura scalabile a triangolo invertito

.UIList { margin: 0; padding: 0; list-style: none; &__item { padding: ($gutter / 2); }}

Page 42: ITCSS: Architettura scalabile a triangolo invertito

COMPONENTS

Veri pezzi di UI

Ancora, solo classi

Nomi espliciti (.products-list {})

Page 43: ITCSS: Architettura scalabile a triangolo invertito

.ProductsList { @include font-brand(); border-top: 1px solid $brand-color; &__item { border-bottom: 1px solid $brand-color; }}

Page 44: ITCSS: Architettura scalabile a triangolo invertito

TRUMPS

Overrides, helpers, utilities

Interessa solo un pezzo di DOM alla volta

Solitamente, portatore di!important

Page 45: ITCSS: Architettura scalabile a triangolo invertito
Page 46: ITCSS: Architettura scalabile a triangolo invertito

.one-half { width: 50% !important; }

Page 47: ITCSS: Architettura scalabile a triangolo invertito

Da notare…

• Si gestisce il source order, si doma la cascata, si alleggerisce l’ereditarietà

• La specificità aumenta gradualmente, livello dopo livello

• Si toccano piccoli pezzetti del DOM alla volta • Ogni livello è un “passaggio” nel DOM

• Si aggiungono stili progressivamente, non si “annulla” mai l’effetto di altre righe CSS • Ogni stadio è più dettagliato ed esplicito del precedente

Page 48: ITCSS: Architettura scalabile a triangolo invertito

Come lavora uno scultore

• Si ricava della roccia da una cava con dell’esplosivo

• Si ricavano dei grandi blocchi

• Si inizia ad abbozzare una forma molto generica

• Si aggiungono man mano caratteristiche (aspetto)

• Solo alla fine, si lavora sui dettagli precisi

Page 49: ITCSS: Architettura scalabile a triangolo invertito

ESTENDERE L’ARCHITETTURA

Page 50: ITCSS: Architettura scalabile a triangolo invertito

CSS scalabile

• Ora, il nostro CSS può scalare facilmente

• Aggiungiamo cose nei livelli rilevanti (gli ultimi…)

• Le cose non diventano più complicate, ma più grandi

• Il trend del grafico della specificità rimane lo stesso

Page 51: ITCSS: Architettura scalabile a triangolo invertito

Architettura personalizzata

• Aggiungi o rimuovi livelli se e quando ne hai bisogno

• Non usi un preprocessor? Rimuovi i livelli Settings e Tools

• Non usi OOCSS? Rimuovi il livello Objects

• His bisogno di theming? Aggiungi un livello Theme (dopo Components e prima di Trumps)

• Fai A/B Test, devi isolare stili temporanei? Aggiungi un livello Test (prima del Trumps)

Page 52: ITCSS: Architettura scalabile a triangolo invertito

ORGANIZZAZIONE DEI FILE

Page 53: ITCSS: Architettura scalabile a triangolo invertito

Organizzazione dei file

• Prefisso nei file per indicare il livello di appartenenza • settings.global.scss

tools.functions.scssgeneric.ground-zero.scssbase.typography.scss

• Oppure una cartella per livello • 1-settings/global.scss

2-tools/functions.scss3-generic/ground-zero.scss4-base/typography.scss

• Un main.scss che include tutto nell’ordine corretto

Page 54: ITCSS: Architettura scalabile a triangolo invertito

// SETTINGS@import "1-settings/global";// TOOLS@import "2-tools/functions";@import "2-tools/mixins";// GENERIC@import “3-generic/ground-zero";@import "3-generic/normalize";...// COMPONENTS@import “6-components/infobox";...

Page 55: ITCSS: Architettura scalabile a triangolo invertito

Recommended