coding day may 26th un'architettura scalabile e modulare per il css

89
Andrea Stronati Software Engineer astronati @stronatiandrea Un'architettura scalabile e modulare per il CSS #VendiniUNIPG #CSS

Upload: vendini-italy

Post on 12-Apr-2017

38 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Coding Day May 26th Un'architettura scalabile e modulare per il css

Andrea StronatiSoftware Engineer

astronati @stronatiandrea

Un'architettura scalabile e modulare per il CSS

#VendiniUNIPG #CSS

Page 2: Coding Day May 26th Un'architettura scalabile e modulare per il css

Chi sono?Sono un Software Engineer a Vendini.

★ Backend ma soprattutto Frontend: JS, HTML e CSS

★ AngularJS, ExtJS, Backbone, jQuery, Grunt || Gulp

★ L’idea di base? "Make it simple!"

Di che cosa mi occupo?

Page 3: Coding Day May 26th Un'architettura scalabile e modulare per il css

E’ iniziato tutto per gioco....

Page 4: Coding Day May 26th Un'architettura scalabile e modulare per il css

I miei amati LEGO

★ Hanno un aspetto ingegneristico

★ Sono Modulari

★ Sono Creativi

Page 5: Coding Day May 26th Un'architettura scalabile e modulare per il css

Era il 1995 e a Natale mi regalarono la “cosa” più bella...

Page 6: Coding Day May 26th Un'architettura scalabile e modulare per il css

Col tempo ho incontrato Internet

★ Per me era un “linguaggio”

★ Un mondo pieno di possibilità, da scoprire

Page 7: Coding Day May 26th Un'architettura scalabile e modulare per il css

E fu così che decisi di diventare un Developer...

Page 8: Coding Day May 26th Un'architettura scalabile e modulare per il css

Ho iniziato con PHP, Javascript...

Page 9: Coding Day May 26th Un'architettura scalabile e modulare per il css

HTML…<html>

<head>...</head><body>

<div><p></p>

</div><p><span>...</span>

</p></body>

</html>

Page 10: Coding Day May 26th Un'architettura scalabile e modulare per il css

...e CSS

Che cosa sono i CSS?

★ Cascading Style Sheets (Fogli di stile a cascata)

★ E’ un linguaggio usato per la formattazione didocumenti HTML, XHTML e XML, quindi di pagineweb.

★ Nel 2014 è stata ufficializzata la versione 3

Page 11: Coding Day May 26th Un'architettura scalabile e modulare per il css

Le regole CSS

★ Usando uno o piu selettori:

Dichiara a quale parte del markup viene applicato lo stile★ Seguendo il pattern:

istruzioni di tipo proprietà : valore applicato

Il codice è strutturato

Page 12: Coding Day May 26th Un'architettura scalabile e modulare per il css

Le regole CSS

selettore {proprietà1: valore1;proprietà2:

valore2,valore3;}

Page 13: Coding Day May 26th Un'architettura scalabile e modulare per il css

Selettori

Tipo

p {

[…]}

div {[…]

}

★ Applicano la regola a tutti i tag della pagina del tipo determinato.

o….

Page 14: Coding Day May 26th Un'architettura scalabile e modulare per il css

Selettori Tipo<html>

<head>...</head><body>

<div><span id=”id-1”>this a paragraph</span>

</div><div class=”classe-1”>

for more details<a href=”test.html”>click here</a>

</div><span class=”classe-2”>this is a label</span>

<p id=”id-2”>this is a text

<a href=”index.html”>link</a></p>

</body></html>

Page 15: Coding Day May 26th Un'architettura scalabile e modulare per il css

Selettori

Classi

.classe-2 {[…]

}

.classe-1 {[…]

}

★ Applicano la regola a tutti gli elementi della pagina che presentano la proprietà class="nome-classe".

Page 16: Coding Day May 26th Un'architettura scalabile e modulare per il css

Selettori Classi<html>

<head>...</head><body>

<div><span id=”id-1”>this a paragraph</span>

</div><div class=”classe-1”>

for more details<a href=”test.html”>click here</a>

</div><span class=”classe-2”>this is a label</span>

<p id=”id-2”>this is a text

<a href=”index.html”>link</a></p>

</body></html>

Page 17: Coding Day May 26th Un'architettura scalabile e modulare per il css

Selettori

Identificatori

#id-2 {[…]

}

#id-1 {[…]

}

★ Applicano la regola a quell'elemento della pagina che presenta la proprietà id="identificatore".

★ Gli ID contraddistinguono elementi unici.

o….

Page 18: Coding Day May 26th Un'architettura scalabile e modulare per il css

Selettori Identificatori<html>

<head>...</head><body>

<div><span id=”id-1”>this a paragraph</span>

</div><div class=”classe-1”>

for more details<a href=”test.html”>click here</a>

</div><span class=”classe-2”>this is a label</span>

<p id=”id-2”>this is a text

<a href=”index.html”>link</a></p>

</body></html>

Page 19: Coding Day May 26th Un'architettura scalabile e modulare per il css

Selettori

Di discendenza

.classe-1 a {[…]

}

div span {[…]

}

★ Identifica solo gli elementi contenuti in altri elementi.

Page 20: Coding Day May 26th Un'architettura scalabile e modulare per il css

Selettori Di Discendenza<html>

<head>...</head><body>

<div><span id=”id-1”>this a paragraph</span>

</div><div class=”classe-1”>

for more details<a href=”test.html”>click here</a>

</div><span class=”classe-2”>this is a label</span>

<p id=”id-2”>this is a text

<a href=”index.html”>link</a></p>

</body></html>

Page 21: Coding Day May 26th Un'architettura scalabile e modulare per il css

Selettori

Figlio

.class-1 > span {[…]

}

div > span {[…]

}

★ Identifica solo gli elementi che siano contenuti direttamente nell'elemento padre.

Page 22: Coding Day May 26th Un'architettura scalabile e modulare per il css

Selettori Figlio<html>

<head>...</head><body>

<div><span id=”id-1”>this a paragraph</span>

</div><div class=”classe-1”>

for more details<a href=”test.html”>click here</a>

</div><span class=”classe-2”>this is a label</span>

<p id=”id-2”>this is a text

<a href=”index.html”>link</a></p>

</body></html>

Page 23: Coding Day May 26th Un'architettura scalabile e modulare per il css

Proprietà

★ background. Definisce lo sfondo di un elemento.★ border. Definisce il bordo di un elemento. ★ color. Definisce il colore del testo di un elemento. ★ font. Definisce le proprietà del carattere.★ margin e padding. Definiscono lo spazio circostante gli

elementi. La prima lo spazio esterno ai bordi, la seconda quello interno.

★ text-align. Definisce l'allineamento degli elementi, tra cui il testo.

Ce ne sono piu di 60.

Page 24: Coding Day May 26th Un'architettura scalabile e modulare per il css

Proprietà

★ background. Definisce lo sfondo di un elemento.★ border. Definisce il bordo di un elemento. ★ color. Definisce il colore del testo di un elemento. ★ font. Definisce le proprietà del carattere.★ margin e padding. Definiscono lo spazio circostante gli

elementi. La prima lo spazio esterno ai bordi, la seconda quello interno.

★ text-align. Definisce l'allineamento degli elementi, tra cui il testo.

Background

Page 25: Coding Day May 26th Un'architettura scalabile e modulare per il css

Proprietà

Background

div {background:

#333;}

Page 26: Coding Day May 26th Un'architettura scalabile e modulare per il css

Proprietà

★ background. Definisce lo sfondo di un elemento.★ border. Definisce il bordo di un elemento. ★ color. Definisce il colore del testo di un elemento. ★ font. Definisce le proprietà del carattere.★ margin e padding. Definiscono lo spazio circostante gli

elementi. La prima lo spazio esterno ai bordi, la seconda quello interno.

★ text-align. Definisce l'allineamento degli elementi, tra cui il testo.

Border

Page 27: Coding Day May 26th Un'architettura scalabile e modulare per il css

Proprietà

Border

div {border: 4px solid

green;}

Page 28: Coding Day May 26th Un'architettura scalabile e modulare per il css

Proprietà

★ background. Definisce lo sfondo di un elemento.★ border. Definisce il bordo di un elemento. ★ color. Definisce il colore del testo di un elemento. ★ font. Definisce le proprietà del carattere.★ margin e padding. Definiscono lo spazio circostante gli

elementi. La prima lo spazio esterno ai bordi, la seconda quello interno.

★ text-align. Definisce l'allineamento degli elementi, tra cui il testo.

Color

Page 29: Coding Day May 26th Un'architettura scalabile e modulare per il css

Proprietà

Color

div {color: red;

}

Page 30: Coding Day May 26th Un'architettura scalabile e modulare per il css

Proprietà

★ background. Definisce lo sfondo di un elemento.★ border. Definisce il bordo di un elemento. ★ color. Definisce il colore del testo di un elemento. ★ font. Definisce le proprietà del carattere.★ margin e padding. Definiscono lo spazio circostante gli

elementi. La prima lo spazio esterno ai bordi, la seconda quello interno.

★ text-align. Definisce l'allineamento degli elementi, tra cui il testo.

Font

Page 31: Coding Day May 26th Un'architettura scalabile e modulare per il css

Proprietà

Font

div {font: italic bold 5rem

Georgia;}

Page 32: Coding Day May 26th Un'architettura scalabile e modulare per il css

Proprietà

★ background. Definisce lo sfondo di un elemento.★ border. Definisce il bordo di un elemento. ★ color. Definisce il colore del testo di un elemento. ★ font. Definisce le proprietà del carattere.★ margin e padding. Definiscono lo spazio circostante gli

elementi. La prima lo spazio esterno ai bordi, la seconda quello interno.

★ text-align. Definisce l'allineamento degli elementi, tra cui il testo.

Margin e Padding

Page 33: Coding Day May 26th Un'architettura scalabile e modulare per il css

Proprietà

Margin e Padding

div {margin: 0;padding: 0;

}

Page 34: Coding Day May 26th Un'architettura scalabile e modulare per il css

Proprietà

Margin e Padding

div {margin: 20px;padding: 0;

}

Page 35: Coding Day May 26th Un'architettura scalabile e modulare per il css

Proprietà

Margin e Padding

div {margin: 0;padding: 20px;

}

Page 36: Coding Day May 26th Un'architettura scalabile e modulare per il css

Proprietà

★ background. Definisce lo sfondo di un elemento.★ border. Definisce il bordo di un elemento. ★ color. Definisce il colore del testo di un elemento. ★ font. Definisce le proprietà del carattere.★ margin e padding. Definiscono lo spazio circostante gli

elementi. La prima lo spazio esterno ai bordi, la seconda quello interno.

★ text-align. Definisce l'allineamento degli elementi, tra cui il testo.

Text align

Page 37: Coding Day May 26th Un'architettura scalabile e modulare per il css

Proprietà

Font

div {text-align:

center;}

Page 38: Coding Day May 26th Un'architettura scalabile e modulare per il css

Esempio

.scheda {background: #333; border: 4px solid

#ab0;color: white;

margin: 10px; padding: 25px; text-align: center;}

Page 39: Coding Day May 26th Un'architettura scalabile e modulare per il css

Esempio

Page 40: Coding Day May 26th Un'architettura scalabile e modulare per il css

… e ho ritrovato le mie LEGO <3

. {background-color: blue;height: 100px;

}

. {border-top: 50px solid

green;}

Page 41: Coding Day May 26th Un'architettura scalabile e modulare per il css

… con infinite possibilità

<div class=” ...”>

hello world!</div>

Page 42: Coding Day May 26th Un'architettura scalabile e modulare per il css

… con infinite possibilità

Page 43: Coding Day May 26th Un'architettura scalabile e modulare per il css

Importare il CSS<html>

<head>...</head><body>

<div><p style=”text-

align:center...”></p></div>

</body></html>

Page 44: Coding Day May 26th Un'architettura scalabile e modulare per il css

Importare il CSS - Attributo style

Page 45: Coding Day May 26th Un'architettura scalabile e modulare per il css

Importare il CSS<html>

<head>...</head><body>

<div><p></p>

</div><style>

p {...}</style>

</body></html>

Page 46: Coding Day May 26th Un'architettura scalabile e modulare per il css

Importare il CSS - Tag style

Page 47: Coding Day May 26th Un'architettura scalabile e modulare per il css

Importare il CSS<html>

<head><link href="style.css" ... /></head>

<body><div>

<p></p></div>

</body></html>

Page 48: Coding Day May 26th Un'architettura scalabile e modulare per il css

Importare il CSS - File esterno

Page 49: Coding Day May 26th Un'architettura scalabile e modulare per il css

… dopo un po di esperienza

Ho iniziato a scrivere del “bellissimo” CSS

#nav .new item ul li {...}

.Pag .red_area#ORO HR {...}

/* Not working *//* MUST BE A CSS BUG*/.str.hi..new > * > div {...}

Page 50: Coding Day May 26th Un'architettura scalabile e modulare per il css

Quali erano le problematiche?

★ Perdere il controllo del mio frontend era davvero semplice

★ Non era semplice scrivere CSS a regola d’arte

★ A metà pagina era gia impossibile per me sovrascrivere gli stili appena fatti

Page 51: Coding Day May 26th Un'architettura scalabile e modulare per il css

Framework

★ Un set di componenti gia fatti… ( come le lego )

★ Permette di guadagnare tempo

★ Griglie e widgets

Page 52: Coding Day May 26th Un'architettura scalabile e modulare per il css

Metodologie di sviluppo

★ Sono delle linee guida

★ Permette di essere consistenti

★ Rende l’applicazione scalabile (eviterà di farvi fare i miei stessi errori)

Page 53: Coding Day May 26th Un'architettura scalabile e modulare per il css

Metodologie di sviluppo

★ SMACSS

★ OOCSS

★ BEM

Page 54: Coding Day May 26th Un'architettura scalabile e modulare per il css

Categorizzare il CSS

★ Base★ Layout★ Module★ State★ Theme

… Base

LayoutModuleStateTheme

Page 55: Coding Day May 26th Un'architettura scalabile e modulare per il css

Base

a {font-size: 2rem;

}

body {margin: 0;padding:

0;}

★ E’ applicata agli elementi i cui selettori sono gli elementi stessi.

★ Non include alcuna classe o ID

★ E’ vietato l’uso di !important

Page 56: Coding Day May 26th Un'architettura scalabile e modulare per il css

Base

… Base

Layout

Module

State

Theme

… a

body

… a.css … body.css

Analisi File System.

Page 57: Coding Day May 26th Un'architettura scalabile e modulare per il css

Layout

.header {margin:

auto;width:

960px;}

★ E’ applicato agli elementi che definiscono “fissano” la pagina.

★ E’ preferibile usare le classi come selettori

.footer {border: 0.125rem

solid;padding: 0.125rem;

}

Page 58: Coding Day May 26th Un'architettura scalabile e modulare per il css

Layout

… Base

Layout

Module

State

Theme

… footer

header

… footer.css … header.css

Analisi File System.

Page 59: Coding Day May 26th Un'architettura scalabile e modulare per il css

Module

.tab {text-align:

center;}

★ E’ un componente della pagina. (dialog, carousel, widget, etc…)

★ Un modulo puo essere all’interno di altri moduli

★ Un modulo è definito come componente standalone..tab .tab-title {

font-size: 3rem;}

Page 60: Coding Day May 26th Un'architettura scalabile e modulare per il css

Module

… Base

Layout

Module

State

Theme

… tab

… tab.css

Analisi File System.

Page 61: Coding Day May 26th Un'architettura scalabile e modulare per il css

State

.is-tab-active {color: black;

}

★ E’ qualcosa che sovrascrive altri stili

★ Sono applicati ai moduli e ai layout

★ E’ consentito l’uso di !important

.is-tab-disabled {color: grey;

}

Page 62: Coding Day May 26th Un'architettura scalabile e modulare per il css

State

… Base

Layout

Module

State

Theme

… tab

… tab.css

Analisi File System.

Page 63: Coding Day May 26th Un'architettura scalabile e modulare per il css

Theme

.tab {border-color:

black;Color: blue

}

★ Può essere applicato a tutti.

★ Raggruppano tutte le regole inerenti il colore

.tab-theme-light {border-color:

white;}

Page 64: Coding Day May 26th Un'architettura scalabile e modulare per il css

Theme

… Base

Layout

Module

State

Theme

… tab

… tab.css

Analisi File System.

Page 65: Coding Day May 26th Un'architettura scalabile e modulare per il css

Prefissi★ Evitano collisioni con altri componenti

★ Utile quando altri framework UI vengono usati

.vnd-tag {color: black;

}

.vnd-tag-theme-light {color: white;

}

Page 66: Coding Day May 26th Un'architettura scalabile e modulare per il css

Costruiamo il nostro primo componente

Page 67: Coding Day May 26th Un'architettura scalabile e modulare per il css

Costruiamo il nostro primo componente

★ Scegliere un nome per il componente

★ Individuare gli elementi del componente

★ Assegnare un nome per ogni componente seguendo l’approccio: nome-componente-nome-elemento-modificatore

Steps

Page 68: Coding Day May 26th Un'architettura scalabile e modulare per il css

Costruiamo il nostro primo componente

★ Scegliere un nome per il componente

★ Individuare gli elementi del componente

★ Assegnare un nome per ogni componente seguendo l’approccio: nome-componente-nome-elemento-modificatore

Steps.card {

[…]}

Page 69: Coding Day May 26th Un'architettura scalabile e modulare per il css

Costruiamo il nostro primo componente

★ Scegliere un nome per il componente

★ Individuare gli elementi del componente

★ Assegnare un nome per ogni componente seguendo l’approccio: nome-componente-nome-elemento-modificatore

Steps

Page 70: Coding Day May 26th Un'architettura scalabile e modulare per il css

Individuare gli elementi del componente

Page 71: Coding Day May 26th Un'architettura scalabile e modulare per il css

Costruiamo il nostro primo componente

★ Scegliere un nome per il componente

★ Individuare gli elementi del componente

★ Assegnare un nome per ogni componente seguendo l’approccio: nome-componente-nome-elemento-modificatore

Steps

Page 72: Coding Day May 26th Un'architettura scalabile e modulare per il css

Assegnare un nome per ogni componente.card-section {

[…]}

Page 73: Coding Day May 26th Un'architettura scalabile e modulare per il css

Individuare gli elementi del componente

Page 74: Coding Day May 26th Un'architettura scalabile e modulare per il css

Assegnare un nome per ogni componente

.card-title {[…]

}

Page 75: Coding Day May 26th Un'architettura scalabile e modulare per il css

Assegnare un nome per ogni componente

.card-link {[…]

}

Page 76: Coding Day May 26th Un'architettura scalabile e modulare per il css

Assegnare un nome per ogni componente

.card-subsection {

[…]}

Page 77: Coding Day May 26th Un'architettura scalabile e modulare per il css

Costruiamo il nostro primo componente

… Base

Layout

Module

State

Theme

… card

… card.css

Analisi File System.

Page 78: Coding Day May 26th Un'architettura scalabile e modulare per il css

module/card/card.css

.unipg-card {border: 1px

solid;font-family:

Arial;}

Page 79: Coding Day May 26th Un'architettura scalabile e modulare per il css

module/card/card.css

.unipg-card .unipg-card-section {border-bottom: 1px solid;padding: 20px;

}

.unipg-card .unipg-card-section:last-of-type {

border-bottom: 0;}

Page 80: Coding Day May 26th Un'architettura scalabile e modulare per il css

module/card/card.css

.unipg-card-title {font-size: 30px;text-transform:

capitalize;}

Page 81: Coding Day May 26th Un'architettura scalabile e modulare per il css

module/card/card.css

.unipg-card-link {cursor: pointer;text-decoration: none;text-transform:

uppercase;}

Page 82: Coding Day May 26th Un'architettura scalabile e modulare per il css

module/card/card.css

.unipg-card-subsection {display: inline-block;width: 50%;

}

.unipg-card .unipg-card-subsection.unipg-card-subsection-align-right {

text-align: right;}

Page 83: Coding Day May 26th Un'architettura scalabile e modulare per il css

Costruiamo il nostro primo componente

… Base

Layout

Module

State

Theme

… card

… card.css

Analisi File System.

Page 84: Coding Day May 26th Un'architettura scalabile e modulare per il css

theme/card/card.css

.unipg-card {background:

#546e7a;border-color:

#737373;box-shadow: ...;color: white;

}

Page 85: Coding Day May 26th Un'architettura scalabile e modulare per il css

theme/card/card.css

.unipg-card .unipg-card-section {

border-color: #73737;}

Page 86: Coding Day May 26th Un'architettura scalabile e modulare per il css

theme/card/card.css

.unipg-card-link {color:

#ffab40;}

Page 87: Coding Day May 26th Un'architettura scalabile e modulare per il css

Minificare il css

*.min.css

*.css

Page 88: Coding Day May 26th Un'architettura scalabile e modulare per il css

Link★ SMACSS https://smacss.com

★ BEM http://getbem.com

★ Website Style Guide Resources http://styleguides.io

★ Semantic UI http://semantic-ui.com

★ Bootstrap http://getbootstrap.com

★ Foundation http://foundation.zurb.com

Page 89: Coding Day May 26th Un'architettura scalabile e modulare per il css

Grazie mille per l’attenzione!

</> with <3 || stop()

Domande?