Modalità di scrittura e layout CSS

Pubblicato: 2022-03-10
Riepilogo rapido ↬ Una comprensione delle modalità di scrittura CSS è utile se si desidera lavorare con script verticali o modificare la modalità di scrittura per motivi creativi. Tuttavia, sono anche alla base dei nostri nuovi metodi di layout e queste idee vengono sempre più applicate in tutti i CSS. In questo articolo, scopri perché Rachel Andrew crede che la comprensione delle modalità di scrittura sia così importante.

Questo non è un articolo sull'applicazione pratica o creativa di questa proprietà. Invece, voglio dimostrare perché la comprensione delle modalità di scrittura è così importante, anche a quelli di noi che hanno raramente bisogno di cambiare la modalità di scrittura di una pagina o di un componente. Il supporto di più modalità di scrittura è fondamentale per il modo in cui sono stati progettati i nostri nuovi metodi di layout di Flexbox e Grid Layout. Comprendere questo può sbloccare una migliore comprensione di come funzionano questi metodi di layout.

Cosa sono le modalità di scrittura?

La modalità di scrittura di un documento o di un componente si riferisce alla direzione in cui scorre il testo. In CSS, per lavorare con le modalità di scrittura utilizziamo la proprietà writing-mode . Questa proprietà può assumere i seguenti valori:

  • horizontal-tb
  • vertical-rl
  • vertical-lr
  • sideways-rl
  • sideways-lr

Se stai leggendo questo articolo su Smashing Magazine in inglese, la modalità di scrittura di questo documento è horizontal-tb o Horizontal Top To Bottom . In inglese, le frasi sono scritte orizzontalmente, la prima lettera di ogni riga che inizia a sinistra.

Una lingua come l'arabo ha anche una modalità horizontal-tb . È scritto orizzontalmente, dall'alto verso il basso, tuttavia la scrittura araba è scritta da destra a sinistra, quindi le frasi in arabo iniziano a destra.

Cinese, giapponese e coreano sono scritti verticalmente, con il primo carattere della prima frase in alto a destra. Segue frasi aggiunte a sinistra. Pertanto, la modalità di scrittura utilizzata è vertical-rl . Una modalità di scrittura verticale che va da destra a sinistra.

Anche il mongolo è scritto verticalmente, ma da sinistra a destra. Pertanto, se si desidera digitare lo script mongolo, utilizzare la modalità di scrittura vertical-lr .

Altro dopo il salto! Continua a leggere sotto ↓

Gli altri due valori della writing-mode sono progettati più per scopi creativi che per la composizione di script verticali. L'uso sideways-lr e sideways-rl trasforma il testo lateralmente, anche i caratteri normalmente scritti verticalmente e verticalmente. I valori, sfortunatamente, al momento sono supportati solo in Firefox. Il seguente CodePen mostra tutti i diversi valori di writing-mode , dovrai usare Firefox se vuoi vedere quelli sideways-* in azione.

Guarda la Pen [Demo della modalità di scrittura](https://codepen.io/rachelandrew/pen/dxVVRj) di Rachel Andrew.

Guarda la demo della modalità di scrittura con penna di Rachel Andrew.

Le modalità di scrittura possono essere utilizzate durante la creazione di un documento che utilizza una lingua scritta utilizzando quella modalità di scrittura. Possono anche essere utilizzati in modo creativo, ad esempio, per impostare un'intestazione verticalmente lungo il lato di alcuni contenuti. In questo articolo, tuttavia, voglio dare un'occhiata all'impatto che il supporto dei linguaggi verticali e la possibilità del testo verticale ha sul layout CSS e sui CSS in generale.

Prima di farlo, se sei interessato all'uso delle modalità di scrittura per il testo verticale, ecco alcune risorse utili:

  • Il sito dell'internazionalizzazione del W3C contiene molte informazioni utili. Leggi gli script RTL e il testo verticale.
  • Jen Simmons ha scritto un eccellente articolo sulle modalità di scrittura CSS che include anche diversi esempi dalla stampa di queste modalità in uso.
  • Pensieri sul mondo e sui nostri sistemi di scrittura - Chen Hui Jing
  • Composizione verticale con modalità di scrittura rivisitata - Chen Hui Jing
  • La proprietà della modalità di scrittura su MDN

Il blocco e le dimensioni in linea

Quando cambiamo la modalità di scrittura di un documento, ciò che stiamo facendo è cambiare la direzione del flusso del blocco . Pertanto, diventa rapidamente molto utile per noi capire cosa si intende per blocco e inline.

Una delle prime cose che apprendiamo sui CSS è che alcuni elementi sono elementi di blocco, ad esempio un paragrafo. Questi elementi vengono visualizzati uno dopo l'altro nella direzione del blocco. Gli elementi in linea, come una parola in una frase, vengono visualizzati uno dopo l'altro nella direzione in linea. Lavorando in modalità di scrittura orizzontale, ci abituiamo al fatto che la dimensione del blocco va dall'alto verso il basso verticalmente e la dimensione in linea da sinistra a destra orizzontalmente.

Poiché gli elementi block e inline si riferiscono alla modalità di scrittura del nostro documento, tuttavia, la dimensione inline è orizzontale solo se ci troviamo in una modalità di scrittura orizzontale. Non si riferisce alla larghezza, ma invece alla dimensione in linea. La dimensione del blocco è solo verticale quando si è in modalità di scrittura orizzontale. Quindi non si riferisce all'altezza, ma alla dimensione del blocco.

Proprietà logiche, relative al flusso

Questi termini, dimensione inline e dimensione del blocco sono usati anche come nomi di nuove proprietà CSS progettate per riflettere il nostro nuovo mondo consapevole della modalità di scrittura. Se, in una modalità di scrittura orizzontale, utilizzi la proprietà inline-size invece di width , agirà esattamente allo stesso modo di width, finché non cambierai la modalità di scrittura del tuo componente. Se utilizzi la width che sarà sempre una dimensione fisica, sarà sempre la dimensione del componente in orizzontale. Se utilizzi inline-size , quella sarà la dimensione nella dimensione in linea, come mostra l'esempio seguente.

Guarda la penna [larghezza vs. inline-size](https://codepen.io/rachelandrew/pen/RXLLyd) di Rachel Andrew.

Guarda la larghezza della penna rispetto alla dimensione in linea di Rachel Andrew.

Lo stesso vale per l' height . La proprietà height sarà sempre la dimensione verticale. Si riferisce a quanto è alto l'oggetto. La proprietà block-size , invece, fornisce la dimensione nella dimensione del blocco , verticalmente se siamo in una modalità di scrittura orizzontale e orizzontale in una verticale.

Come ho descritto nel mio articolo "Capire i valori e le proprietà logiche", ci sono mappature per tutte le proprietà fisiche, quelle che sono legate alle dimensioni dello schermo. Una volta che inizi a pensarci, gran parte dei CSS viene specificata in relazione al layout fisico di uno schermo. Impostiamo posizionamento, margini, riempimento e bordi utilizzando in alto, a destra, in basso e a sinistra. Facciamo fluttuare le cose a destra ea sinistra. A volte legare le cose alla dimensione fisica sarà ciò che vogliamo, tuttavia sempre più spesso pensiamo ai nostri layout senza fare riferimento alla posizione fisica. La specifica Proprietà e valori logici implementa questo modo indipendente dalla modalità di scrittura di lavorare attraverso CSS.

Modalità di scrittura, griglia e Flexbox

Quando i nostri nuovi metodi di layout sono atterrati sulla scena, hanno portato con sé un modo agnostico di guardare alla modalità di scrittura del componente che viene disposto come layout flessibile o griglia. Per la prima volta alle persone è stato chiesto di pensare all'inizio e alla fine, piuttosto che a sinistra e a destra, in alto e in basso.

Quando ho iniziato a presentare l'argomento CSS Grid, le mie prime presentazioni erano un riassunto di tutte le proprietà nella specifica. Ho detto che la proprietà grid-area potrebbe essere utilizzata per impostare tutte e quattro le linee per posizionare un elemento della griglia. L'ordine di quelle righe, tuttavia, non era quello familiare in alto, a destra, in basso e a sinistra che usiamo per impostare tutti e quattro i margini. Invece, dobbiamo usare in alto, a sinistra, in basso, a destra - il contrario di quell'ordine! Fino a quando non ho capito la connessione tra la griglia e le modalità di scrittura, mi è sembrata una decisione molto strana. Mi sono reso conto che quello che stiamo facendo è impostare entrambe le linee di partenza, quindi entrambe le linee di arrivo. Usare in alto, a destra, in basso e a sinistra funzionerebbe bene se fossimo in una modalità di scrittura orizzontale, girare la griglia su un lato comunque e questo non ha senso. Se usiamo grid-area: 1 / 2 / 3 / 5; come nella penna sottostante le linee sono impostate come segue:

  • grid-row-start: 1; - inizio blocco
  • grid-column-start: 2 - inizio in linea
  • grid-row-end: 3 - fine blocco
  • grid-column-end: 5 - fine in linea

Vedi la penna [grid-area](https://codepen.io/rachelandrew/pen/zgEEQW) di Rachel Andrew.

Vedi l'area della griglia della penna di Rachel Andrew.

Righe e colonne Flexbox

Se utilizzi Flexbox e aggiungi display: flex a un container, i tuoi articoli verranno visualizzati come una riga poiché il valore iniziale della proprietà flex-direction è row . Una riga seguirà la dimensione in linea della modalità di scrittura in uso. Pertanto, se la tua modalità di scrittura è horizontal-tb una riga viene eseguita in orizzontale. Se la direzione del testo dello script corrente è da sinistra a destra, gli elementi si allineeranno a partire da sinistra, se è da destra a sinistra si allineeranno a partire da destra.

Tuttavia, utilizzare una modalità di scrittura verticale, come vertical-rl e flex-direction: row farà sì che gli elementi dispongano verticalmente, poiché la direzione inline è verticale. In questo prossimo CodePen tutti gli esempi hanno flex-direction: row , solo la modalità o la direzione di scrittura è cambiata.

Guarda la penna [flex-direction: row](https://codepen.io/rachelandrew/pen/XvezrE) di Rachel Andrew.

Vedi la direzione flessibile della penna: riga di Rachel Andrew.

Aggiungi flex-direction: column e il layout degli elementi nella dimensione del blocco della modalità di scrittura. In una modalità di scrittura orizzontale la dimensione del blocco è dall'alto verso il basso, quindi una colonna è verticale. Con una modalità di scrittura vertical-rl una colonna è orizzontale. Come nell'esempio precedente, l'unica differenza tra i layout flessibili seguenti è la modalità di scrittura utilizzata.

Vedi la penna [flex-direction: column](https://codepen.io/rachelandrew/pen/RXLjbX) di Rachel Andrew.

Vedi la direzione della flessione della penna: colonna di Rachel Andrew.

Posizionamento automatico della griglia

Quando utilizzi il posizionamento automatico nella griglia, vedrai un comportamento simile a quello del layout flessibile. Gli elementi della griglia si posizionano automaticamente in base alla modalità di scrittura del documento. L'impostazione predefinita è posizionare gli elementi in righe, che saranno la direzione in linea - orizzontalmente in una modalità di scrittura orizzontale e verticalmente in una verticale.

Vedi la penna [Riga di posizionamento automatico della griglia](https://codepen.io/rachelandrew/pen/eqGeYV) di Rachel Andrew.

Vedi la riga di posizionamento automatico di Pen Grid di Rachel Andrew.

Prova a modificare il flusso di elementi in column come nell'esempio seguente. Gli elementi ora scorreranno nella dimensione del blocco - verticalmente in una modalità di scrittura orizzontale e orizzontalmente in una verticale.

Vedi la penna [colonna di posizionamento automatico della griglia](https://codepen.io/rachelandrew/pen/xvXPby) di Rachel Andrew.

Vedi la colonna di posizionamento automatico di Pen Grid di Rachel Andrew.

Posizionamento della linea della griglia

Il posizionamento basato sulla linea rispetta anche la modalità di scrittura. Le linee della nostra griglia iniziano da 1, sia per le righe che per le colonne. Se posizioniamo un elemento dalla riga di colonna 1 alla riga di colonna 3 e ci troviamo in una modalità di scrittura orizzontale con una direzione da sinistra a destra, quell'elemento si estenderà dalla riga della colonna più a sinistra attraverso due tracce della griglia orizzontalmente. Si estende così su due colonne.

Cambia la modalità di scrittura in vertical-rl e la riga della colonna 1 sarà nella parte superiore della griglia, l'elemento si estenderà verticalmente su due tracce. Si estendono ancora su due colonne, ma ora le colonne sono in esecuzione orizzontalmente.

Vedi la penna [Margini: fratelli adiacenti](https://codepen.io/rachelandrew/pen/mNBqEy) di Rachel Andrew.

Vedi i margini della penna: fratelli adiacenti di Rachel Andrew.

Allineamento In Griglia E Flexbox

Uno dei primi posti in cui molte persone entreranno in contatto con il modo in cui Flexbox ha gestito le modalità di scrittura, sarebbe quando si allineano gli elementi in un layout flessibile. Se prendiamo l'esempio flex-direction: row sopra, e utilizziamo la proprietà justify-content per allineare tutti gli elementi in modo che l' flex-end si sposti alla fine della loro riga. Ciò significa che in una modalità di scrittura orizzontale con direzione da sinistra a destra, gli elementi si spostano tutti a destra, poiché la fine di quella riga è a destra. Se la direzione è da destra a sinistra, si spostano tutti a sinistra.

Nella modalità di scrittura verticale, si spostano in basso, supponendo che ci sia spazio per farlo. Ho impostato una inline-size sui componenti in questo esempio per assicurarci di avere spazio libero nei nostri contenitori flessibili per vedere l'allineamento in azione.

L'allineamento è un po' più facile da capire nel layout della griglia, poiché abbiamo sempre i due assi con cui giocare. La griglia è bidimensionale, quelle due dimensioni sono a blocco e in linea. Pertanto, puoi ricordare una regola se vuoi sapere se usare le proprietà che iniziano con align- o quelle che iniziano con justify- . Nel layout della griglia le proprietà align: align- align-content , align-items , align-self vengono utilizzate per eseguire l'allineamento dell'asse del blocco. In una modalità di scrittura orizzontale che significa verticale, e in una modalità di scrittura verticale orizzontalmente.

Ancora una volta, non usiamo sinistra e destra o in alto e in basso, poiché vogliamo che il nostro layout della griglia funzioni esattamente allo stesso modo, indipendentemente dalla modalità di scrittura. Quindi ci allineiamo usando start e end . Se ci allineiamo per start sulla dimensione del blocco, quella sarà in top quando in horizontal-tb , ma sarà right quando in vertical-rl . Dai un'occhiata all'esempio seguente, i valori di allineamento sono identici in entrambe le griglie, l'unica differenza è la modalità di scrittura utilizzata.

Vedi la penna [Margini: fratelli adiacenti](https://codepen.io/rachelandrew/pen/jgGaML) di Rachel Andrew.

Vedi i margini della penna: fratelli adiacenti di Rachel Andrew.

Le proprietà justify-content , justify-items , justify-self sono sempre utilizzate per l'allineamento in linea nel layout della griglia. Sarà orizzontale in modalità di scrittura orizzontale e verticale in modalità di scrittura verticale.

Vedi la penna [Margini: fratelli adiacenti](https://codepen.io/rachelandrew/pen/RXLjpP) di Rachel Andrew.

Vedi i margini della penna: fratelli adiacenti di Rachel Andrew.

L'allineamento di Flexbox è in qualche modo complicato dal fatto che l'asse principale può essere cambiato da riga a colonna. Pertanto, in Flexbox, dobbiamo considerare il metodo di allineamento come l'asse principale rispetto all'asse trasversale. Le proprietà align- vengono utilizzate sull'asse trasversale. Sull'asse principale, tutto ciò che hai è justify-content perché trattiamo gli articoli come un gruppo in Flexbox. Sull'asse trasversale, puoi utilizzare align-content nei casi in cui hai più linee flessibili e spazio nel contenitore flessibile per distanziarle. Puoi anche usare align-items e align-self per spostare gli elementi flessibili sull'asse trasversale in relazione tra loro e alla loro linea flessibile.

Guarda la penna [Allineamento Flexbox](https://codepen.io/rachelandrew/pen/YmrExP) di Rachel Andrew.

Guarda l'allineamento Pen Flexbox di Rachel Andrew.

Per ulteriori informazioni sull'allineamento nel layout CSS, vedere i miei precedenti articoli di Smashing Magazine:

  • Come allineare le cose in CSS
  • Tutto quello che devi sapere sull'allineamento in Flexbox

Consapevolezza della modalità di scrittura e CSS precedenti

Non tutti i CSS hanno pienamente raggiunto questo modo di lavorare indipendente dalla modalità di scrittura relativo al flusso. I luoghi in cui non ha iniziato a risaltare come insoliti più pensi alle cose in termini di blocco e inline, inizio e fine. Ad esempio, in un layout a più colonne, specifichiamo column-width , che in realtà significa column inline-size, poiché non è mappato alla larghezza fisica quando si lavora in modalità di scrittura verticale.

Guarda la penna [Multicol e modalità di scrittura](https://codepen.io/rachelandrew/pen/pMWdLL) di Rachel Andrew.

Guarda Pen Multicol e la modalità di scrittura di Rachel Andrew.

Come puoi vedere, le modalità di scrittura sono alla base di gran parte di ciò che facciamo in CSS, anche se non utilizziamo mai una modalità di scrittura diversa da horizontal-tb .

Trovo incredibilmente utile pensare al layout CSS in questa modalità di scrittura in modo indipendente. Anche se forse è un po' presto per cambiare tutte le nostre proprietà e valori in quelli logici, siamo già in un mondo relativo al flusso quando abbiamo a che fare con nuovi metodi di layout. Il fatto che il tuo modello mentale sia uno di blocco e in linea, inizio e fine, piuttosto che legato ai quattro angoli dello schermo, chiarisce molte delle cose che incontriamo quando utilizziamo FlexBox e la griglia.