5 fragmentos de CSS que todo desarrollador front-end debe conocer en 2024

Un CSS estable, potente y digno de herramientas que puedes usar hoy en día.

Creo que todo desarrollador de frontend debe saber que :has() es más que un "selector superior", cómo y por qué de un subgrid, cómo anidar con la sintaxis de CSS integrada, cómo permitir que el navegador equilibre el ajuste del texto del título y cómo usar las unidades de consulta del contenedor.

Esta publicación es una continuación de los 6 fragmentos de CSS del año pasado que todo desarrollador de frontend debe conocer en 2023.

CSS:has(.potential-beyond-being-a-parent-selector)

:has()

Navegadores compatibles

  • 105
  • 105
  • 121
  • 15.4

Origen

:has() llegó a los principales navegadores a fines de 2023. Este nuevo selector parece inocente y pequeño, pero te sorprenderás con todos los casos de uso que puede desbloquear: juegos, reactividad, diseño adaptado al contenido, componentes inteligentes y mucho más que se explora bien en este artículo de Jhey.

Se muestran 4 paneles, cada uno con una imagen y una leyenda.
Cada imagen muestra un cerebro que activa cada vez más poder cerebral. El primer panel dice :has(). El segundo panel dice shape:has(caption) como selector principal.
El tercer panel dice .layout:has(> :nth-child(5)) como selector de cantidad.
El cuarto panel dice html:has(#checked) .new-subject como selector de cambio de asunto condicional.

Estos son algunos ejemplos del uso de :has() como selector superior. Tiene este nombre porque, por lo general, el tema de un selector está al final, como ul li, donde li es el asunto y obtiene los estilos. Con :has(), el elemento al comienzo del selector puede convertirse en el asunto. En el siguiente ejemplo, el botón tiene un espacio si hay un elemento dentro con una clase de .icon. La tarjeta cambia de orientación si hay una imagen adentro.

button:has(.icon) {
  gap: 1ch;
}

.card:has(img) {
  grid-auto-flow: row;
}

Un selector largo deseado es cambiar un diseño en función de la cantidad de elementos que tiene. Ahora, esto es posible con :has(), ya que puede mantener el contenedor como el sujeto mientras consulta la cantidad de elementos secundarios.

main:has(> :nth-child(5)) {…}

Otro ejemplo de nivel superior es cambiar los estilos configurados en todo el documento cuando una casilla de verificación específica en la página esté habilitada:

html:has(#dark-mode:checked) {…}

Estos son casos de uso simples que no cambian el tema del selector. Si solo miras ejemplos como este, es posible que creas que :has() se limita a ser un selector superior. Sin embargo, considera los siguientes ejemplos. Estos comprueban si hay algo basado en un elemento principal común y, luego, giran el selector que está sujeto a un elemento secundario en algún lugar más profundo de la página.

En este ejemplo, se muestra un elemento de error de formulario si alguna de sus entradas no es válida:

form:has(:user-invalid) .error {
  display: block;
}

Este se desliza fuera del área de contenido principal cuando una barra de navegación lateral tiene una clase de .--is-open:

html:has(#sidenav.--is-open) main {
  translate: -320px;
}

Esta es una demostración divertida que usa :has() como selector superior, :has() con consultas de cantidad y consultas de contenedor para crear un diseño de cuadrícula que pueda mostrar de forma elegante 1 a 12 elementos en orientación horizontal o vertical:

Probar CodePen

Crear una subcuadrícula

subgrid

Navegadores compatibles

  • 117
  • 117
  • 71
  • 16

Origen

Durante muchos años, la comunidad web de frontend solicitó ayuda a la subcuadrícula para completar y terminar el potente y popular motor de diseño de cuadrícula de CSS. Ahora está disponible en los tres motores principales.

Obtén más información sobre la subcuadrícula aquí si deseas obtener una descripción general.

body {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(30ch, 1fr));

  > article {
    display: grid;
    grid-row: span 4; 
    grid-template-rows: subgrid;
  }
}

Anidar con CSS

nesting

Navegadores compatibles

  • 120
  • 120
  • 117
  • 17.2

Origen

El anidamiento de CSS integrado está disponible en todos los navegadores principales en 2023. Incluso actualicé mi sitio web para quitar el proceso de compilación que compilaba la anidación y ahora envío una hoja de estilo más pequeña. Sí, las hojas de estilo con anidación son más pequeñas y todas las Herramientas para desarrolladores del navegador están listas para representarlas.

Puedes encontrar una descripción general de la sintaxis de anidación de CSS aquí para obtener todos los detalles. El siguiente ejemplo de código muestra un ejemplo de sintaxis.

.you {
  .can-totally-ship-this {
    &.if-you-wanted {
      /* it's VERY MUCH like SCSS */
      
      &:is(:hover, :focus-visible) {
        /* put a bird on it */
      }
    }
  }
}

.for-theming {
  @media (prefers-color-scheme: dark) {
    /* you can nest media queries */
  }
}

/* or for theming with [data-theme="dark"] */
.button {
  background: black;
  color: white;

  /* nest and do more than just append, flip it and reverse it */
  [data-theme="dark"] & {
    background: white;
    color: black;
  }
}

Permita que el navegador equilibre los títulos

balance

Navegadores compatibles

  • 114
  • 114
  • 121

Origen

pretty

Navegadores compatibles

  • 117
  • 117
  • x
  • x

Origen

Sin text-wrap: balance, los desarrolladores y los redactores de contenido tienen que realizar las sugerencias de salto de línea, como los elementos <wbr> o &shy;. Se trata, en general, de una batalla perdida porque, apenas se traduzca, se acerque o se modifique el contenido, no hay garantía de que esas sugerencias de ajuste estén en el lugar correcto para la nueva presentación del contenido.

Con el ajuste de texto equilibrado, puedes dejar esta tarea para el navegador. Puedes ver una comparación en el siguiente CodePen.

Usa unidades de consulta de contenedor

cqw

Navegadores compatibles

  • 105
  • 105
  • 110
  • 16

Origen

La publicación del año pasado sugirió que todos los desarrolladores de frontend deberían saber cómo escribir una consulta de contenedor. Si aún no lo aprendiste, haz que 2024 sea el año para el éxito y revisa también las unidades de consulta de contenedores. A modo de descripción general, Ahmad Shadeed escribió un excelente artículo sobre las unidades de consulta de contenedores en 2021.

Hay seis unidades de contenedor nuevas:

  1. Una variante intercalada cqi.
  2. Una variante de ancho cqw.
  3. Una variante de bloque cqb.
  4. Una variante de altura cqh.
  5. Una variante para la longitud que sea menor cqmin
  6. Una variante para la longitud que sea mayor a cqmax

Considera una situación para animaciones intrínsecas y relativas en un contenedor. Un elemento secundario que se desliza por completo desde su contenedor con 100cqi, que es el 100% del tamaño intercalado del contenedor

@keyframes slide-out-of-container {
  to {
    translate: -100cqi;
  }
}

A continuación, se muestra una tarjeta con tipografía responsiva del contenedor y una imagen que se adapta a la orientación del contenedor, convirtiéndose en la mitad de su tamaño si la orientación es horizontal.

.card {
  :is(h2,h3) {
    font-size: clamp(1.5rem, 5cqi, 4rem);
  }

  img {
    inline-size: 100cqi;

    @container (orientation: landscape) {
      inline-size: 50cqi;
    }
  }
}

Si estas unidades son nuevas para ti, te recomendamos que revises todas las unidades disponibles en 2024.