Miglioramenti del layout logico con scorciatoie relative ai flussi

Nuove abbreviazioni per le proprietà logiche e nuove proprietà dei riquadri per Chromium.

Da Chromium 69 (3 settembre 2018), proprietà logiche e valori hanno contribuito gli sviluppatori mantengono il controllo dei propri layout internazionali tramite rispetto agli stili fisici, di direzione e di dimensione. In Chromium 87, brevi e gli offset sono stati spediti per semplificare la scrittura di queste proprietà e valori logici. Chromium passa a Firefox, che supporta le abbreviazioni dal 66. Safari li ha pronti nella sua anteprima tecnologica.

Mostrano testo segnaposto in latino, ebraico e giapponese all'interno del frame di un dispositivo. Le frecce e i colori seguono il testo per contribuire ad associare le due direzioni: blocco e in linea.

Flusso di documenti

Se hai già familiarità con le proprietà logiche, gli assi in linea e a blocchi e non se hai bisogno di un ripasso, puoi andare avanti. In caso contrario, ti inviamo un breve promemoria.

In inglese, lettere e parole scorrono da sinistra a destra, mentre i paragrafi sono impilati dall'alto verso il basso. In cinese tradizionale, lettere e parole sono posizionate dall'alto verso il basso, mentre i paragrafi sono impilati da destra a sinistra. Solo in questi 2 casi, se scriviamo il codice CSS che inserisce "margin top" in un paragrafo, spaziamo in modo appropriato solo uno stile linguistico. Se la pagina viene tradotta in Cinese dall'inglese, il margine potrebbe non avere senso nella nuova modalità di scrittura verticale.

Di conseguenza, la parte fisica della scatola non è molto utile a livello internazionale. Inizia così la procedura per supportare più lingue; scoprire i lati fisici e logici del modello box.

Hai mai ispezionato l'elemento p in Chrome DevTools? In tal caso, è possibile che notato che gli stili predefiniti dello user agent non sono fisici, ma logici.

p {
  margin-block-start: 1em;
  margin-block-end: 1em;
  margin-inline-start: 0px;
  margin-inline-end: 0px;
}

CSS del foglio di stile dello user agent di Chromium

Il margine non si trova nella parte superiore o inferiore come potrebbe credere un lettore inglese. Sono le ore block-start e block-end. Queste proprietà logiche sono simili a quelle di un in alto e in basso, ma anche come un lettore giapponese di destra e sinistra. Se scritto una volta, funziona ovunque.

Un flusso normale si verifica quando la pagina web fa intenzionalmente parte di questa multidirezionale. Quando i contenuti della pagina vengono aggiornati in base ai cambiamenti di direzione del documento, il layout e i relativi sono considerati in flusso. Scopri di più su "in" e "fuori" del flusso su MDN o nel Specifiche del modulo display CSS. Mentre le proprietà logiche non devono necessariamente essere in flusso, svolgono gran parte del lavoro pesante per te man mano che la direzione cambia. Il flusso implica la direzione, ovvero le lettere, le parole e i contenuti che devono spostarsi. Questo ci porta a bloccare e incorporare direzioni logiche.

La direzione del blocco è la direzione che seguono i nuovi blocchi di contenuti, ad esempio chiediti: "dove posizionare il paragrafo successivo?". Si potrebbe considerare un "blocco di contenuti" o un "blocco di testo". Ogni lingua organizza i propri blocchi e li ordina i rispettivi block-axis. block-start è il lato in cui un paragrafo viene posizionato per primo, mentre block-end è la parte verso cui scorrono i nuovi paragrafi.

Nella scrittura a mano libera tradizionale giapponese, ad esempio, la direzione del blocco scorre da destra a sinistra:

La direzione in linea è la direzione in cui vanno le lettere e le parole. Prendi in considerazione la direzione il braccio e la mano viaggiano quando scrivi; stanno viaggiando lungo il inline-axis. inline-start è il lato in cui inizi a scrivere, mentre inline-end è il lato al termine della scrittura. Nel video sopra, inline-axis è dall'alto verso il basso, ma nel prossimo video lo inline-axis scorre da destra a sinistra.

Essere flow-relative gli stili scritti per una lingua saranno contestuali e in modo appropriato applicati in altre lingue. I contenuti verranno trasmessi in base alla lingua di pubblicazione.

Nuove scorciatoie

Alcune delle seguenti sintetiche brevi non sono nuove funzionalità per il browser, ma più semplici scrivere stili, sfruttando la possibilità di impostare valori su entrambi i blocchi o in linea contemporaneamente. Le proprietà logiche di inset-* offrono nuove funzionalità, poiché non esistevano modi lunghi per specificare posizioni assolute con proprietà logiche prima. Però, gli inserti e le abbreviazioni si intrecciano molto bene. illustrarti tutte le nuove funzionalità delle proprietà logiche disponibili contemporaneamente su Chromium 87.

Abbreviazioni dei margini

Non ci sono nuove funzionalità disponibili, ma hai trovato delle scorciatoie molto utili:
margin-block e margin-inline.

Lunga
margin-block-start: 2ch;
margin-block-end: 2ch;
Nuova forma abbreviata
margin-block: 2ch;
/* or */
margin-block: 2ch 2ch;

Non esiste una forma abbreviata per "top and bottom" o "destro e sinistro"... fino ad ora! Probabilmente farai riferimento a tutti e quattro i lati utilizzando la forma abbreviata di margin: 10px; e ora può facilmente fare riferimento a due lati complementari utilizzando l'abbreviazione della proprietà logica.

Lunga
margin-inline-start: 4ch;
margin-inline-end: 2ch;
Nuova forma abbreviata
margin-inline: 4ch 2ch;

Abbreviazioni spaziatura interna

Non sono disponibili nuove funzionalità, ma hai trovato delle scorciatoie molto più pratiche:
padding-block e padding-inline.


Lunga
padding-block-start: 2ch;
padding-block-end: 2ch;
Nuova forma abbreviata
padding-block: 2ch;
/* or */
padding-block: 2ch 2ch;

E la serie di scorciatoie senza costi di inline:

Lunga
padding-inline-start: 4ch;
padding-inline-end: 2ch;
Nuova forma abbreviata
padding-inline: 4ch 2ch;

Intaglio e sigle

Le proprietà fisiche top, right, bottom e left possono essere scritte come valori per la proprietà inset. Qualsiasi valore di position può trarre vantaggio da posiziona i lati con un riquadro.

.cover {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  inset: 0;
}


Fisica a mano lunga
position: absolute;
top: 1px;
right: 2px;
bottom: 3px;
left: 4px;
Nuova forma abbreviata fisica
position: absolute;
inset: 1px 2px 3px 4px;

Dovrebbe essere immediatamente pratico. Il riquadro è un modo breve per indicare i lati fisici, e funziona come margine e spaziatura interna.

Nuove funzionalità

Per quanto sia entusiasmante sia l'abbreviazione delle parti fisiche, c'è ancora di più dalla caratteristiche logiche aggiunte da ulteriori abbreviazioni di inset. Queste scorciatoie portano la praticità degli sviluppatori (sono più brevi da digitare), ma aumentano anche la copertura potenziale del layout, in quanto sono relative al flusso.

Fisica a mano lunga
position: absolute;
top: 10px;
bottom: 10px;
Abbreviazione logica
position: absolute;
inset-block: 10px;


Fisica a mano lunga
position: absolute;
left: 10px;
right: 20px;
Abbreviazione logica
position: absolute;
inset-inline: 10px 20px;

Per approfondire e consultare un elenco completo di riquadri in forma breve e lunga è disponibile su MDN.

Simboli dei bordi

Il bordo e le relative proprietà nidificate color, style e width hanno tutte nuove scorciatoie logiche.


Fisica a mano lunga
border-top-color: hotpink;
border-bottom-color: hotpink;
Abbreviazione logica
border-block-color: hotpink;
/* or */
border-block-color: hotpink hotpink;


Fisica a mano lunga
border-left-style: dashed;
border-right-style: dashed;
Abbreviazione logica
border-inline-style: dashed;
/* or */
border-inline-style: dashed dashed;


Fisica a mano lunga
border-left-width: 1px;
border-right-width: 1px;
Abbreviazione logica
border-inline-width: 1px;
/* or */
border-inline-width: 1px 1px;

Per approfondire l'argomento e un elenco completo di etichette per i bordi a mano e a mano lunga è disponibile su MDN.

Esempio di proprietà logica <figure>

Riepiloghiamo il tutto con un breve esempio. Le proprietà logiche possono un'immagine con una didascalia per gestire diverse direzioni di scrittura e documenti.

Oppure prova!

Non è necessario fare molto per rendere una carta reattiva a livello internazionale con una <figure> e alcune proprietà logiche. Se vuoi sapere come funziona tutto questo a livello internazionale, CSS premuroso funziona insieme, spero che questa sia una piccola introduzione significativa.

Polyfilling e supporto tra browser

Gli strumenti Cascade o di creazione sono opzioni attuabili per avere browser vecchi e nuovi, spaziate correttamente con proprietà logiche aggiornate. Per i fallback Cascade, segui una proprietà fisica con una logica e il browser utilizzerà l'"ultimo" che ha trovato durante lo stile risoluzione del problema.

p {
  /* for unsupporting browsers */
  margin-top: 1ch;
  margin-bottom: 2ch;

  /* for supporting browsers to use */
  /* and unsupporting browsers to ignore and go 🤷‍♂️ */
  margin-block: 1ch 2ch;
}

Non si tratta di una soluzione completa per tutti, però. Ecco un video di riserva scritto a mano che sfrutta lo pseudo-selettore :lang() per scegliere come target lingue specifiche, regola la distanza fisica appropriata, poi alla fine si pone la logica per i browser supportati:

/* physical side styles */
p {
  margin-top: 1ch;
  margin-bottom: 2ch;
}

/* adjusted physical side styles per language */
:lang(ja) {
  p {
    /* zero out styles not useful for traditional Japanese */
    margin-top: 0;
    margin-bottom: 0;

    /* add appropriate styles for traditional Japanese */
    margin-right: 1ch;
    margin-left: 2ch;
  }
}

/* add selectors and adjust for languages all supported */
:lang(he) {}
:lang(mn) {}

/* Logical Sides */
/* Then, for supporting browsers to use */
/* and unsupporting browsers to ignore #TheCascade */
p {
  /* remove any potential physical cruft.. */
  margin: 0;
  /* explicitly set logical value */
  margin-block: 1ch 2ch;
}

Puoi utilizzare @supports anche per determinare se fornire o meno materiali proprietà di riserva:

p {
  margin-top: 1ch;
  margin-bottom: 2ch;
}

@supports (margin-block: 0) {
  p {
    margin-block: 1ch 2ch;
  }
}

Sass, PostCSS, Emotion e altri utilizzano il bundler e/o build automatici nel tempo che hanno una vasta gamma di fallback o soluzioni. Dai un'occhiata a tutti per vedere quale corrisponde alla tua catena di strumenti e alla strategia complessiva del sito.

Passaggi successivi

Ancora più CSS offrirà proprietà logiche, ma non è ancora tutto fatto. Manca un grosso problema una serie di abbreviazioni e non è ancora possibile trovare una soluzione per questo problema di GitHub. C'è una soluzione temporanea in una bozza. E se volessi applicare uno stile a tutto lati logici di un riquadro con una forma breve?

Sintesi fisica
margin: 1px 2px 3px 4px;
margin: 1px 2px;
margin: 2px;
Abbreviazione logica
margin: logical 1px 2px 3px 4px;
margin: logical 1px 2px;
margin: logical 2px;

La bozza di proposta attuale significherebbe che scriverai logical in ogni si tratta di una forma breve per ottenere l'applicazione dell'equivalente logico, che non suona molto DRY ad alcuni.

Esistono altre proposte di modifica a livello di blocco o di pagina ma che potrebbe tradursi in usi logici in stili che comunque assumevano lati fisici.

html {
  flow-mode: physical;
  /* or */
  flow-mode: logical;
  /* now all margin/padding/etc references are logical */
}

/* hopefully no 3rd/1st party code is hard coded to top/left/etc ..? */

È tosta! Vota, esprimi la tua opinione, vorremmo conoscere la tua opinione.

Vuoi apprendere o studiare meglio le proprietà logiche? Ecco un riferimento dettagliato, insieme a guide ed esempi, su MDN 🤓

Feedback