Aggregazione di contenuti intorno a percorsi personalizzati
Razvan Caliman
Per molto tempo i web designer sono stati costretti a creare contenuti all'interno dei vincoli del rettangolo. La maggior parte dei contenuti sul web è ancora intrappolata in semplici caselle, perché la maggior parte dei creativi si avventura in un layout non rettangolare finisce con la frustrazione. Questo sta per cambiare con l'introduzione delle forme CSS, disponibili a partire da Chrome 37.
Le forme CSS consentono ai web designer di aggregare i contenuti intorno a percorsi personalizzati, come cerchi, ellissi e poligoni, liberandosi dai vincoli del rettangolo.
Le forme possono essere definite manualmente o dedotte dalle immagini.
Vediamo un esempio molto semplice.
Forse sei stato ingenuo come me quando hai sospeso per la prima volta un'immagine con parti trasparenti aspettandoti che i contenuti si riempissero e riempissero gli spazi, solo per rimanere delusi dalla forma rettangolare a capo che persiste intorno all'elemento. Le forme CSS possono essere utilizzate per risolvere questo problema.
La dichiarazione CSS shape-outside: url(image.png) indica al browser di estrarre una forma dall'immagine.
La proprietà shape-image-threshold definisce il livello minimo di opacità dei pixel che verranno utilizzati per creare la forma. Il suo valore deve essere compreso tra 0.0 (completamente trasparente) e 1.0 (completamente opaco). Pertanto, shape-image-threshold: 0.5 significa che per creare la forma verranno utilizzati solo i pixel con un'opacità del 50% e superiore.
La proprietà float è fondamentale qui. Anche se la proprietà shape-outside definisce la forma dell'area attorno alla quale verrà eseguito il wrapping dei contenuti, senza il floating non vedrai gli effetti della forma.
Gli elementi hanno un'area mobile sul lato opposto del valore float. Ad esempio, se un elemento con l'immagine di una tazza di caffè viene fatto scorrere verso sinistra, l'area mobile viene creata a destra della tazza. Anche se puoi progettare un'immagine con intervalli vuoti su entrambi i lati, i contenuti verranno a capo solo intorno alla forma sul lato opposto indicato dalla proprietà floating, a sinistra o a destra, mai entrambi.
In futuro, sarà possibile utilizzare shape-outside su elementi che non vengono visualizzati in formato mobile con l'introduzione alle esclusioni CSS.
Creare forme manualmente
Oltre a estrarre le forme dalle immagini, puoi anche codificarle manualmente. Puoi scegliere tra alcuni valori funzionali per creare forme: circle(), ellipse(), inset() e polygon(). Ogni funzione di forma accetta un insieme di coordinate ed è abbinata a una casella di riferimento che stabilisce il sistema di coordinate. A breve potrai saperne di più sulle caselle di riferimento.
La funzione cerchia()
La notazione completa per un valore di forma del cerchio è circle(r at cx cy), dove r è il raggio del cerchio, mentre cx e cy sono le coordinate del centro del cerchio sull'asse X e sull'asse Y. Le coordinate per il centro del cerchio sono facoltative. Se ometti queste parole, per impostazione predefinita viene utilizzato il centro dell'elemento (l'intersezione delle diagonali).
Nell'esempio precedente, i contenuti verranno visualizzati all'esterno di un percorso circolare. L'argomento singolo 50% specifica il raggio del cerchio che, in questo caso specifico, equivale alla metà della larghezza o dell'altezza dell'elemento. La modifica delle dimensioni dell'elemento influirà sul raggio della forma del cerchio. Questo è un esempio base di come le forme CSS possono essere adattabili.
Prima di andare avanti, una breve nota: è importante ricordare che le forme CSS influenzano solo la forma dell'area mobile intorno a un elemento. Se l'elemento ha uno sfondo, non verrà tagliato dalla forma. Per ottenere questo effetto, devi utilizzare le proprietà di Mascheramento CSS: clip-path o mask-image. La proprietà clip-path è molto utile perché segue la stessa notazione delle forme CSS, quindi puoi riutilizzare i valori.
Le illustrazioni di questo documento usano i ritagli per evidenziare la forma e aiutarti a comprendere gli effetti.
Torna alla forma del cerchio.
Quando utilizzi le percentuali per il raggio del cerchio, il valore viene effettivamente calcolato con una formula leggermente più complessa: mq(larghezza^2 + altezza^2) / quadrato(2). È utile comprenderlo perché ti aiuterà a immaginare come sarà la forma del cerchio risultante se le dimensioni dell'elemento non sono uguali.
Tutti i tipi di unità CSS possono essere utilizzati nelle coordinate delle funzioni di forma: px, em, rem, vw, vh e così via. Puoi scegliere quello più flessibile o abbastanza rigido per soddisfare le tue esigenze.
Puoi regolare la posizione del cerchio impostando valori espliciti per le coordinate del centro.
.element{
shape-outside: circle(50% at 0 0);
}
In questo modo, il centro del cerchio posiziona il cerchio all'origine del sistema di coordinate. Qual è il sistema di coordinate? È qui che introduciamo le caselle di riferimento.
Caselle di riferimento per le forme CSS
La casella di riferimento è una casella virtuale attorno all'elemento che stabilisce il sistema di coordinate utilizzato per tracciare e posizionare la forma. L'origine del sistema di coordinate si trova nell'angolo superiore sinistro con l'asse X rivolto a destra e l'asse Y verso il basso.
Ricorda che shape-outside modifica la forma dell'area mobile intorno a cui verranno visualizzati i contenuti. L'area mobile si estende fino ai bordi esterni della casella definiti dalla proprietà margin. È denominato margin-box ed è la casella di riferimento predefinita per una forma se nessuna è menzionata esplicitamente.
Le due dichiarazioni CSS seguenti hanno risultati identici:
.element{
shape-outside: circle(50% at 0 0);
/* identical to: */
shape-outside: circle(50% at 0 0) margin-box;
}
Non abbiamo ancora impostato un margine sull'elemento. A questo punto è possibile supporre che l'origine del sistema di coordinate e il centro del cerchio si trovino nell'angolo superiore sinistro dell'area dei contenuti dell'elemento. Questo valore cambia quando imposti un margine:
.element{
shape-outside: circle(50% at 0 0) margin-box;
margin: 100px;
}
L'origine del sistema di coordinate ora si trova al di fuori dell'area di contenuto dell'elemento (100 px in alto e 100 px a sinistra), così come il centro del cerchio. Il valore calcolato del raggio del cerchio cresce anche per tenere conto della maggiore superficie del sistema di coordinate stabilite dalla casella di riferimento margin-box.