Solicitud de comentarios del desarrollador sobre el flujo de lectura y los elementos con pantalla: contenido

El año pasado, publicamos la entrada de blog Resuelve la desconexión del diseño CSS y el orden de las fuentes. Detalle la propuesta que se estaba debatiendo en el grupo de trabajo de CSS para resolver el problema de que el reordenamiento en flexbox y cuadrícula, lo que genera una experiencia de tabulación desconectada. El la sección inicial de esa publicación describe el problema al que el grupo de trabajo está de resolver. Desde entonces, todo ha ido avanzando, y esta publicación ofrece una actualización de dónde estamos ahora. También necesitamos que sus comentarios, ¿cómo lidiamos con los elementos que tienen display-contents?

Actualizaciones de la propuesta

Ahora hay borrador de texto de especificación en la especificación de nivel 4 de Display del CSS. Esto presenta una nueva propiedad llamada reading-flow. Esta propiedad se agrega al elemento contenedor para el diseño flexible o de cuadrícula (el elemento con display: grid o display: flex).

La propiedad acepta los siguientes valores:

  • normal: Sigue el orden de los elementos en el DOM, que es el valor actual. el comportamiento de los usuarios.
  • flex-visual: Solo tiene efecto en los contenedores flexibles. Sigue el el orden de lectura visual de los elementos flexibles, teniendo en cuenta el modo de escritura.
  • flex-flow: Solo tiene efecto en los contenedores flexibles. Sigue el flujo flexible dirección IP.
  • grid-rows: Solo tiene efecto en los contenedores de cuadrícula. Sigue el elemento visual el orden de los elementos de la cuadrícula por fila, teniendo en cuenta el modo de escritura.
  • grid-columns: Solo tiene efecto en los contenedores de cuadrícula. Sigue el orden visual de elementos de cuadrícula por columna, teniendo en cuenta el modo de escritura.
  • grid-order: Solo tiene efecto en los contenedores de cuadrícula. Tiene en cuenta la propiedad order. pero actúa como normal.

Por ejemplo, si tiene tres elementos flexibles en un contenedor, y establece su flex-direction en row-reverse, se alinean desde el final del contenedor flexible y el orden de tabulación se mueve de derecha a izquierda.

.flex {
  display: flex;
  flex-direction: row-reverse;
}
Flujo predeterminado de elementos flexibles con row-reverse.

Agrega flex-flow: visual y, luego, el flujo de lectura seguirá el orden visual en inglés, por lo tanto, de izquierda a derecha.

.flex {
  display: flex;
  flex-direction: row-reverse;
  reading-flow: flex-visual;
}
Con reading-flow:flex-visual.

En los diseños de cuadrícula, usa reading-flow para seguir las filas o columnas visuales en lugar de que el orden de origen. En el siguiente ejemplo, el flujo de lectura sigue el filas.

.wrapper {
  display: grid;
  grid-template-columns: repeat(3, 150px);
  grid-template-areas: "d b b"
                       "c c a";
  reading-flow: grid-rows;
}

.a { grid-area: a; }
.b { grid-area: b; }
.c { grid-area: c; }
.d { grid-area: d; }
Con reading-flow: grid-rows.

Probar

Actualmente, esta propiedad de CSS es experimental, pero es posible habilitarla para realizar pruebas. Para probarlo, instala Chrome Dev o la versión Canary 128 o una posterior. y habilita el marca de tiempo de ejecución CSSReadingFlow. Aquí tienes algunos ejemplos para comenzar, que funcionan en Canary con la marca habilitada.

El comportamiento para los casos de display: contents aún está en desarrollo y podría cambio en función del feedback que proporciones después de leer la siguiente sección de esta publicación.

Elementos con display: contents y componentes web

Hay un problema pendiente para el grupo de trabajo de CSS decidir cómo lidiar con una situación en la que uno de los elementos secundarios de un elemento con flujo de lectura tienen display: contents de manera similar si el elemento fuera un <slot>.

En el siguiente ejemplo, los elementos <div> tienen display: contents. Debido a todos los elementos <button> se promueven para que participen en el programa y, por lo tanto, reading-flow tiene en cuenta su orden.

 .wrapper {
   display: flex;
   reading-flow: flex-visual;
 }
<div class="wrapper">
   <div style="display: contents" id="contents1">
     <button style="order: 3" id="o3">3</button>
     <button style="order: 1" id="o1">1</button>
     <div style="display: contents" id=contents2>
       <button style="order: 4" id="o4">4</button>
       <button style="order: 2" id=o2>2</button>
     </div>
   </div>
 </div>

Nos gustaría saber si tiene algún ejemplo real que esté causando la situación como se muestra en este ejemplo. ¿Alguna vez necesitas volver a pedir los artículos que están dentro de que tiene display: contents con elementos que no son del mismo nivel, debido a hermanos del elemento que tiene display: contents

Además, mientras trabajamos para resolver los problemas relacionados con display: contents sería útil ver ejemplos en los que es posible que quieras usar la Propiedad reading-flow con display: contents. Comprende el mundo real casos de uso que tengas, nos ayudará a diseñar una solución que satisfaga tus necesidades.

Agrega casos de uso al Problema con el grupo de trabajo de CSS. Si tiene ejemplos en sitios activos o puede crear una demostración en CodePen o JSFiddle, serían muy útiles cuando analicemos este problema. como un grupo. Si tienes pensamientos sobre lo que esperarías que suceda, eso también es útil. Sin embargo, el lo más importante es ver los casos de uso reales.