domenica 19 maggio 2013

Guida al CSS per EPUB – Struttura della pagina

Nella puntata precedente ci siamo dedicati a una presentazione generale del CSS, imparando inoltre come aggiungere un foglio di stile alla nostra pagina. Prima di cominciare a scrivere il foglio di stile, e aggiungere al nostro testo una serie di formattazioni belle, strane o di cattivo gusto, dovremo però assicurarci che la nostra pagina sia pronta a farsi formattare, senza opporre resistenza, il che no è sempre così automatico. Vediamo dunque una struttura ottimale per le pagine dei nostri EPUB.
Lo schema di base di un file HTML dovrebbe ormai esserci familiare:
<html>

<head>
  <title></title>
</head>
<body>
</body>
</html>

Questo è il minimo indispensabile, lo scheletro su cui tutto il resto sarà costruito:
<html> è il tag che racchiude tutta la pagina.
<head> racchiude quella parte di pagina che, normalmente, non è visualizzata, ma che contiene una serie di regole, da utilizzare per la visualizzazione: è qui che inseriremo il CSS ed è qui che, in una normale pagina web, troveremo anche il JavaScript (in genere, ma non necessariamente: esistono almeno due scuole di pensiero, a riguardo, ma non è questo lo spazio per discuterne).
<title> contiene il titolo della pagina, che sarà visualizzato sul bordo alto del browser; siccome stiamo parlando di uno EPUB e il suo contenuto non sarà visualizzato in un browser, possiamo anche lasciare vuoto questo spazio, ma non lo possiamo eliminare.
<body> contiene tutto ciò che sarà visualizzato sullo schermo: il testo, le foto, i video, eccetera. Qui dovremmo inserire soltanto il contenuto, senza mischiarlo con stile (CSS) e funzionamento (JavaScript). Essendo HTML, questo spazio sarà brulicante di tag e i tag potranno essere modificati da CSS e JavaScript in qualsiasi modo vorremo, ma l’importante è che il codice per modificare i tag sia lasciato fuori dal body, ben separato dal contenuto. Se li mischiate, siete delle brutte persone, oppure avete trascorso gli ultimi quindici anni ibernati in un qualche laboratorio segreto.
Dopo questo rapido ripasso dello scheletro di una pagina, dovrebbe essere chiaro che la parte da strutturare a dovere, per poterla poi modificare col CSS, è quella contenuto nel tag <body>: qui finirà tutto il contenuto del nostro EPUB e qui dovremo lavorare, per renderlo adatto ad accogliere il CSS.
In una normale pagina web, dovremmo preoccuparci del layout dei vari elementi, del numero di colonne da utilizzare nella pagina e così via; nel microcosmo di uno EPUB, invece, molti di questi problemi non si pongono e possiamo concentrarci sullo stretto indispensabile. O meglio, in teoria potremmo anche cercare di utilizzare in uno EPUB tutte le regole di layout che magari abbiamo imparato per i siti web, ma ci sono buone probabilità che i risultati non saranno quelli che ci aspettavamo. Manteniamoci dunque sull'essenziale, cioè una pagina che presenta un titolo nella parte alta, ossia il titolo del capitolo, e poi una muraglia di testo, ossia il contenuto del capitolo: è lo schema seguito da quasi tutti i libri, dopotutto, ed è un ottimo schema, se vogliamo che il nostro e-book sia leggibile decentemente anche sullo schermo di un piccolo smartphone.
Una buona e semplice struttura potrebbe essere questa:
<body>
    <div class=”capitolo”>
        <div class=”titolo”>
            <h2>Titolo del capitolo</h2>
        </div>
        <div class=”corpo”>
        </div>
    </div>
</body>

Il tag <div>, che qui vediamo utilizzato, è un tag che, di per sé, non possiede un preciso valore semantico, nello HTML, ma è solitamente usato per dividere in blocchi il contenuto di una pagina. In un futuro prossimo, quando saranno rimasti in circolazione soltanto browser che supportano lo HTML5, questa funzione del tag div sarà svolta da tag speciali, che lo HTML5 ha introdotto proprio per questo scopo, e <div> diventerà molto meno frequente nelle pagine web. Siccome però noi ci occupiamo di EPUB, tutto ciò non ci tocca e possiamo continuare a usare il tag div per strutturare i nostri capitoli, indipendentemente dai nuovi tag dello HTML5.
A ogni tag può essere assegnato un attributo class, che ci servirà a rendere più precise le regole CSS da applicare alla pagina: invece di applicare genericamente una regola a tutti i tag dello stesso tipo (tutti i tag <a>, ad esempio), possiamo usare l’attributo class per applicare una regola a tutti i tag di uno stesso tipo, che possiedono un determinato class (ad esempio, class=”testo”), oppure a tag di tipo diverso, purché possiedano lo stesso class. Lo vedremo meglio più avanti, parlando delle regole CSS: per il momento, possiamo vedere che ci sono tre tag div, ognuno dei quali ha un attributo class differente, e grazie a questo attributo possiamo applicare loro stili differenti.
<div class=”capitolo”> è il tag più ampio, che racchiude l’intero contenuto della pagina: per questo suo ruolo, possiamo utilizzarlo nel CSS per assegnare regole di base, che saranno applicate a tutto il contenuto della pagina. Per esempio, possiamo utilizzare questo tag per impostare una immagine di sfondo, oppure la larghezza dei margini della pagina, o ancora il tipo di font, e così via. Al suo interno, troviamo poi altri due tag, che separano i due blocchi di base per ogni capitolo, ossia il titolo e il testo: entrambi sono all'interno della pagina, per questo li abbiamo inseriti all'interno del tag più generale, ma entrambi hanno un ruolo paritario, per questo li abbiamo mantenuti uno accanto all'altro.
<div class=”titolo”> è quindi la parte in cui inseriremo il titolo del nostro capitolo. Nel foglio di stile CSS potremo utilizzare questa combinazione tag + class, per assegnare uno stile particolare al titolo e distinguerlo dal resto del testo, oppure per racchiudere il titolo in una cornice, o applicare qualsiasi altro tipo di decorazione noi vogliamo.
<div class=”corpo”>, infine, racchiude il grosso del nostro capitolo, ossia il testo, dal primo all'ultimo paragrafo. I vari paragrafi al suo interno, poi, saranno racchiusi in altrettanti tag <p>, uno per paragrafo, e a questi tag <p> potremo assegnare attributi class, ad esempio per distinguere il primo paragrafo dagli altri. In una struttura del tipo

<div class=”corpo”>
    <p class=”primo”></p>
    <p class=”paragrafo”></p>
    <p class=”paragrafo”></p>
    <p class=”paragrafo”></p>
    <p class=”paragrafo”></p>
    <p class=”paragrafo”></p>
</div>

abbiamo definite due classi differenti per i nostri paragrafi: un attributo class=”primo”, che identifica il primo paragrafo del capitolo, e un attributo class=”paragrafo”, che identifica tutti gli altri paragrafi del capitolo. In questo modo, nel foglio di stile CSS potremo assegnare uno stile particolare al primo paragrafo, ad esempio ingrandendo la prima lettera, a simulare un manoscritto miniato del medioevo, mentre tutti i successivi paragrafi utilizzeranno uno stile comune e uniforme.
Se abbiamo bisogno di utilizzare uno stile particolare su una porzione molto ridotta di testo, ad esempio una riga o anche solo una parola all'interno di un paragrafo, dovremo racchiudere quella porzione di testo in un tag <span class=”nome”></span> (al posto di “nome”, ovviamente, inseriremo il nome che preferiamo, purché non sia già stato usato in altri class): in questo modo, nel foglio di stile potremo creare uno stile apposito, da applicare al testo che utilizza quell'attributo class.
Adesso che abbiamo strutturato a dovere la nostra pagina, possiamo cominciare a scrivere qualche regola in CSS: è ciò che faremo nella prossima puntata.

venerdì 17 maggio 2013

Guida al CSS per EPUB - Introduzione

Già in precedenza mi ero dedicato a una breve introduzione all'uso del CSS negli EPUB, per controllare e modificare lo stile di una pagina in base ai nostri gusti. Tornerò adesso sull'argomento  dedicandovi però più spazio, in una guida che, almeno nelle mie intenzioni, dovrebbe essere più chiara e completa della precedente introduzione. Non escludo che il risultato sarà un bignami di CSS, ma staremo a vedere. Argomento di oggi (e non solo di oggi) è dunque: come usare il CSS in uno EPUB.
Come ho ripetuto fino alla nausea, uno EPUB è fondamentalmente un sito web, compresso e impacchettato fino a sembrare un libro: i vari capitoli di uno EPUB sono altrettante pagine in formato HTML, oppure XHTML, ossia il formato di una normale pagina web, e come ogni normale pagina web possono essere formattati utilizzando un foglio di stile CSS. Un foglio di stile CSS è un normale file di testo, con estensione .CSS, al cui interno è raccolta una lista di regole di stile, che dovranno essere applicate alla pagina che le utilizza, al momento della sua apertura in un browser: quale font usare per il testo, quale colore, quali dimensioni avranno i caratteri, quando spazio lasciare sui margini, quale immagine caricare come sfondo della pagina, se ce ne deve essere una, e così via. Tutto ciò che rende una pagina bella (o brutta) da vedere, in pratica, raccolto e organizzato in un file a parte, che dovrà poi essere aggiunto alla pagina. Ma non è sempre stato così.
Alla fine del ventesimo secolo, quando il web era giovane, libero e selvaggio, gli animi erano coraggiosi, gli uomini erano veri uomini, le donne erano vere donne e le piccole creature pelose di Alpha Centauri erano vere piccole creature pelose di Alpha Centauri (per citare la Guida Galattica), stile e contenuto erano mischiati assieme, in una poltiglia difficilmente distinguibile. Nella pancia delle pagine, ossia tra i tag <body> e </body>, il testo da mostrare sullo schermo era intervallato da tag, che dicevano ai browser come dovesse essere formattato questo testo: c’erano tag che definivano il tipo di font, la sua dimensione, il suo colore, ma anche il colore dello sfondo, la larghezza e il colore delle caselle di una tabella, e così via. Un periodo in cui i web designer finivano spesso vittime di tremende crisi depressive e affondavano negli abissi bui dell’alcolismo, insomma, colti dallo sconforto mentre cercavano di annidare una tabella nell'altra, nel vano tentativo di impaginare il testo in modo decente.
A risolvere questo pasticciaccio brutto è arrivato il CSS.
Il CSS ha portato con sé una nuova e più razionale filosofia di progettazione, per le pagine web: una separazione netta tra il contenuto e lo stile. Nella pancia della pagina, ossia tra i tag <body> e </body>, doveva restare soltanto il contenuto, cioè testo, immagini e altro: in pratica, il cosa vediamo. Tutto ciò che serviva a definire il come lo vediamo, invece, doveva essere spostato altrove: nella parte alta della pagina, ossia tra i tag <head> e </head>, o meglio ancora in un file separato, da caricare assieme alla pagina. In questo file separato potevamo elencare i vari tag utilizzati nella pagina, assieme alle regole di stile da applicare al contenuto di quei tag; in fase di caricamento, il browser avrebbe controllato di volta in volta le regole, per applicarle alla visualizzazione dei tag, a mano a mano che li incontrava. Il file con la lista di tag e di regole è il foglio di stile CSS.
La progettazione di siti web ha poi proseguito su questa strada, aggiungendo un terzo elemento, cioè il funzionamento: se il semplice HTML contiene il cosa vediamo e il CSS si occupa del come lo vediamo, il JavaScript si occupa di far fare qualcosa a quella pagina. Siccome al momento gli EPUB supportano il JavaScript in teoria, ma in pratica siamo ancora abbastanza lontani dal poterlo usare decentemente (per fortuna, aggiungo io, ma questo è solo un parere personale), possiamo ignorare questo elemento e occuparci solo degli altri due.
Primo problema: come aggiungere un foglio di stile CSS a una pagina? Le possibilità sono due: scriverlo direttamente nella pagina, oppure scriverlo in un file a parte e poi dire alla pagina di caricare questo file. Il risultato finale sarà lo stesso, in entrambi i casi, ma le due soluzioni non sono equivalenti, sul piano del lavoro necessario: la scelta più razionale è quella di creare un file a parte, con tutto il CSS necessario per il nostro libro, e poi inserire un link a quel file in ogni pagina del libro, per cui vi invito caldamente a seguirla. Se poi un capitolo avrà bisogno di formattazioni particolari, perché magari contiene porzioni di testi in un altro alfabeto, allora potrete aggiungere una piccola estensione al CSS direttamente in quella pagina, per modificare le regole generali e adattarle al contesto.
Ipotizziamo allora che abbiate deciso di utilizzare un file esterno, in cui mettere tutto il CSS necessario, e lo abbiate salvato come “Stile.css” nella cartella Styles del vostro EPUB. Come fare ad aggiungerlo a ogni pagina? Con un poco di olio di gomito e di pazienza. Con Sigil, apriamo a una a una le pagine del nostro EPUB (ossia quelle contenute nella cartella Text) e passiamo alla Vista Codice. Nella parte alta di ogni pagina, cerchiamo il tag <head> e, al suo interno, il tag <title>: una volta localizzato, nello spazio tra </title> e </head> inseriamo un codice di questo tipo
<link href="../Styles/Stile.css" rel="stylesheet" type="text/css" />
Questa riga dirà al lettore di caricare un determinate file, ogni volta che deve visualizzare questa pagina; lo informerà inoltre sulla posizione in cui si trova il file (la parte che segue l’attributo href) e specificherà anche a cosa serva il file (la parte che segue l’attributo rel). Ovviamente, se il nostro foglio di stile ha un nome diverso, al posto di “Stile.css” dovremo scrivere il nome corretto del file, qualunque esso sia.
Se la pagina non è in XHTML, ma in HTML, il codice sarà quasi identico, ma un poco più corto:
<link b="" gt="" href="../Styles/Stile.css" rel="stylesheet">
Per sapere se la pagina sia in XHTML o in HTML, è sufficiente guardare la sua estensione, che ci è indicate chiaramente da Sigil.
Utilizzare un file esterno è la scelta più semplice e razionale, per risparmiarci fatiche inutili, ma niente e nessuno ci vieta di inserire il CSS direttamente nella pagina. In questo caso, nello spazio tra </title> e </head> dovremo aggiungere due tag, ossia <style type=”text/css”> e </style>: fra i due tag scriveremo poi tutte le regole che vogliamo.
Adesso che sappiamo come aggiungere un foglio di stile CSS alla nostra pagina, dovremo preoccuparci di preparare la nostra pagina ad accogliere il CSS, ottimizzandola cioè per la formattazione, ed è ciò che vedremo la prossima volta. Conclusa questa fase introduttiva, cominceremo a scrivere regole in CSS, per formattare la nostra pagina.