Progettazione di siti web
a.a. 2021/22
Responsive web design
Maria Simi
Aprile, 2022
[Responsive web design, Ethan Marcotte (2011); Mobile first, Luke Wroblewski (2011)]
Due piccoli e-book del 2011
Accesso al web
- dal 2015/16 oltre il 50% degli accessi da dispositivo mobile
Immagine da StatCounter
Statistiche più recenti: Italia
Immagine da StatCounter
Le sfide del web oggi e domani
Immagini di Brad Frost
Come affrontare tutto ciò
- Realizzare siti diversi, con stili e contenuti diversi
- Ma quando si tratta di condividere un link, quale scegliere?
- Poco sostenibile
- Stesso contenuto, fogli di stile alternativi
- Layout ad-hoc per ciascun tipo di dispositivo
- Un web più adattivo, con meno vincoli:
Responsive web design
Fogli di stile alternativi per media diversi
- Possiamo per una stessa pagina richiamare fogli di stile diversi, per media type diversi.
- In particolare possiamo avere un foglio di stile per lo schermo, uno diverso per la stampa, uno per un telefonino o palmare con browser …
- I media type ben supportati sono:
- media="all", per tutti i media
- media="print", per la stampa
- media ="screen", per il video
- media ="projection", per il proiettore
- Altri: handheld, speech, tty, tv, braille …
Fogli di stili per media diversi: uso
<link rel="stylesheet"
media="screen, projection" href="stile_schermo.css" />
<link rel="stylesheet"
media="print" href="stile_stampa.css" />
Il primo è utilizzato per lo schermo o la proiezione, il secondo per la stampa (visibile con anteprima di stampa).
In alternativa, nel foglio di stile:
@media screen {
body {font-size: 0.8em;}
}
@media print {
body {font-size: 15pt;}
nav {display: none}
}
Responsive web design
- Ethan Marcotte: responsive web design (2011)
- Prefazione (J. Keith): l'importanza di dare un nome a un concetto
- Basato su tecnologie web già conosciute:
- griglie ridimensionabili
- immagini ridimensionabili
- stili "adattivi" e media query (CSS3)
- La filosofia e la metodologia associata hanno cambiato il modo di progettare per il web
Arrendersi alla marea
The control which designers know in the print medium, and often desire in the print medium, is simply a function of the limitations of the printed page.
We should embrace the fact that the web doesn't have the same constraints, and design for this flexibility. But first, we must accept the ebb and flow of things.
John Allsopp, "A Dao of web design" (2000)
Nella filosofia cinese "dao" sta per "la via" (il processo in cui la natura si manifesta in continuo mutamento)
La tela e i suoi vincoli
Immagine dal libro di E. Marcotte
Design for flexibility!
- L'artista inizia da una tela vuota; la tela ha confini ben definiti.
Ma una delle caratteristiche essenziali del web è, o dovrebbe essere, la flessibilità
- Le metafore del canvas e della carta stampata sono difficili da morire e si continua a progettare per spazi rigidi e ben definiti; si cerca il controllo definendo tutto in pixel
- I risultati non sono soddisfacenti
- gli schermi stanno diventando sempre più piccoli e più grandi
- la variabilità aumenta: dispositivi mobili, tablet, desktop, widescreen ...
- un'unica soluzione o un foglio di stile distinto per ciascuno?
- Meglio arrendersi alla flessibilità.
Responsive architecture
- Nuova tendenza anche in architettura
- Musica personalizzata in risposta al timbro vocale, vetri smart, pareti deformabili per creare spazio ...
- Se lo fanno gli architetti lo possiamo fare anche nel web!

21 aprile 2015: giorno del Mobilegeddon
- Siti mobile friendly: test
Il libro di E. Marcotte
- Si assume di partire con un progetto su carta (o un layout rigido)
- Tecniche come rendere flessibile un semplice schema di pagina disegnato sulla base di una griglia.
- Come mantenere le proporzioni al variare delle dimensioni dello schermo
- Il sito di esempio: Robot or not?
Griglia flessibile: un esempio
- La parte blog del sito: Blog
<div id="page">
<div class="blog section">
<h1 class="lede">Recently in
<a href="♯">The Bot Blog</a>
</h1>
<div class="main">
…
</div><!-- /end .main -->
<div class="other">
…
</div><!-- /end .other -->
</div><!-- /end .blog.section -->
</div>
Griglia flessibile in tre passi
Come calcolare le misure relative
Immagini flessibili
Immagini di sfondo: false colonne
Immagini di sfondo flessibili
Stili alternativi per tipo di media
- Fluidità ancora non ottimale
- Pagina flessibile ma non responsive
- Abbiamo visto come specificare regole di stile alternative per i diversi tipi di media:
- richiamando fogli di stile alternativi nello head
- specificando regole alternative all'interno dei fogli di stile per i diversi media.
- Problema: i media type non offrono abbastanza distinzioni:
- handheld è lo stesso per tanti dispositivi anche molto diversi
- le dimensioni degli schermi screen possono essere molto diverse
Media query
@media screen and (min-width: 1024px) {
body {font-size: 100%}
}
oppure anche (nella head del documento HTML):
<link rel="stylesheet" href="wide.css"
media="screen and (min-width: 1024px)" />
- La prima condizione è sempre il media type.
- Seguono altre condizioni sul dispositivo che possono riguardare:
- la finestra del browser, la parte visibile della pagina (display area)
- lo schermo del dispositivo (rendering surface))
- altro ...
Attributi nelle media query
width | ampiezza browser | min, max |
height | altezza browser | min, max |
device-width | ampiezza dispositivo | min, max |
device-height | altezza dispositivo | min, max |
orientation | portrait, landscape | - |
aspect-ratio | ampiezza:altezza, es 16:9 | min, max |
device-aspect-ratio | ampiezza:altezza | min, max |
color | n. di bit per il colore | min, max |
color-index | n. di colori nella palette | min, max |
monochrome | n. di colori per pixel | min, max |
resolution | definizione in dpi | min, max |
Media query combinate
@media screen and
(min-device-width: 480px) and
(orientation: landscape) {
body { ... }
}
@media screen and (max-width: 320px) {
#page {
margin: 20px;
width: auto;
}
#extras {
display: none;
}
}
Controllo dello "scaling" con viewport
Normalmente i dispositivi mobili scalano le pagine per adattarle al dispositivo. Rimpiccioliscono tutto. Meglio che tagliare!
Da includere sempre nell'head dei siti ottimizzati per i dispositivi mobili
<meta name="viewport"
content="initial-scale=1.0, width=device-width" />
L'ampiezza della pagina viene adattata all'ampiezza del dispositivo, e la scala è fissata 1:1, evitando ridimensionamenti da parte del browser.
Da provare con il cellulare:
Normale
No scaling
Media query in azione
- Consideriamo ora l'intera pagina del sito Robot or not
- Poniamoci i seguenti tre obiettivi:
- Ridimensionare e cambiare font al titolo nella versione "in piccolo"
- Evitare wrapping del menù nella versione "in molto piccolo"
- Sfruttare meglio lo spazio nella versione "molto grande"
<div id="page"> <!-- Struttura della pagina -->
<h1 class="logo"> ... </h1>
<ul class="nav"><li>...</li><li>...</li><li>...</li><li>...</li></ul>
<div class="welcome"> ... </div>
<div class="main">
<h1 class="main_title">You can never be too sure.</h1> ... </div>
<div class="other"> ... </div>
<div class="gallery"> ... </div>
<div class="footer"> ... </div>
</div>
Versione in piccolo (< 768)
- Introduciamo una media query per:
Robot or not (in piccolo)
- Ridurre i margini e ampiezze al massimo
- Ridurre la dimensione e font del titolo
@media screen and (max-width: 768px) {
♯page { /* margini più piccoli, ampiezza al massimo */
margin: 20px; /* invece che 38px */
width: auto; /* invece che 90% */
}
.welcome, .blog, .gallery {
margin: 0 0 30px; /* margini piu' piccoli */
width: auto; /* ampiezza al massimo */
}
.main-title { /* Titolo piu' piccolo e in una font diversa */
font: normal 1.5em Calibri, Candara, Segoe, ... sans-serif;
}
}
Versione in molto piccolo (< 520)
- Introduciamo una media query per:
- Evitare il wrapping del menù
@media screen and (max-width: 520px) {
.nav-primary li {
clear: left; float: left; width: 48%;
}
li♯nav-rated, li♯nav-contact { /* li:nth-child(even) { */
clear: right; float: right;
}
.nav-primary a {
display: block; padding: 0.45em;
}
}
Robot or not (in molto piccolo)
Versione molto grande (> 1200)
- Introduciamo una media query per:
- Usare meglio lo spazio affiancando .blog e .gallery
@media screen and (min-width: 1200px) {
.welcome, .blog, .gallery {
width: 49.375%;
}
.welcome, .gallery {
float: right;
margin: 0 0 40px;
}
.blog {
float: left;
margin: 0 0 20px;
}
♯footer {clear: both}
}
Robot or not (in wide screen)
Robot or not (finito)
Una base fluida e punti di rottura
- Le due cose vanno insieme, una delle due non basta
- Misure percentuali, griglie flessibili, immagini flessibili ...
- Cambiamenti più radicali in corrispondenza dei punti di rottura (breakpoint) da una risoluzione ad un'altra
www.yourinspirationweb.com
Resolution breakpoint e dispositivi
cmswire.com
Responsive design o versioni diverse?
- Motivi a favore della soluzione responsive
- Una sola versione per tutti i dispositivi
- Passaggio graduale da una all'altra
- Motivi a favore della versione diversa per mobile:
- Contesto d'uso diverso, priorità dell'informazione diversa;
- Pesantezza della versione responsive, rispetto a una versione ad hoc
- Specificità e potenzialità del mobile
Mobile first
- Luke Wroblewski, Mobile first: dare la precedenza ai dispositivi mobili
- Motivi per cui questa "filosofia" è vincente:
- I dispositivi mobili sono diventati il modo privilegiato per accedere al web
- La pagina sarà più veloce da caricare sul dispositivo mobile
- Il mobile obbliga a focalizzarci e a dare priorità alle informazioni
- I dispositivi mobili hanno più capacità
- interattività
- geolocalizzazione
- multi-touch
- bussola, accelerometro
si prestano meglio ad applicazioni ricche e "context aware".
Mobile first in pratica
- Identificare i breakpoint
- Iniziare con una versione semplice e lineare, adatta a un dispositivo mobile
- Adottare una strategia di miglioramento progressivo per risoluzioni maggiori (min-width)
.page { /* Default, linear layout */
margin: 0 auto;
max-width: 700px;
width: 93%;
}
@media screen and (min-width: 600px) { … } /* Small screen! */
@media screen and (min-width: 860px) { … } /* Desktop */
@media screen and (min-width: 1200px) { … } /* wide-screen */
Suggerimenti e strumenti di sviluppo
- Provare con diverse dimensioni della finestra del browser
- Non sviluppate in modalità del browser "a tutto schermo"
- Ma attenzione: i docenti hanno schermi molto grandi!!!
- Onde evitare sorprese all'esame ... "amplificate" i vostri schermi con la funzione zoom
- Vietato giustificarsi con: "Ma da me si vedeva bene"
- Non pensare al responsive come ultima cosa: rischiate di dover ricominciare da capo
- Usate la funzione "Modalità di visualizzazione flessibile" di Firefox o simili
Conclusioni
- L'accesso al web è sempre più mobile
- Il responsive design è un passo in questa direzione
- Forse non sufficiente: le potenzialità dei dispositivi sono ancora tutte da esplorare
- Mobile web e app native
- L'importanza dei framework di programmazione:
- Bootstrap, dagli sviluppatori di Twitter
- JQuery e JQuery mobile