Skip to content

Instantly share code, notes, and snippets.

@Trystan4861
Created June 24, 2025 20:54
Show Gist options
  • Select an option

  • Save Trystan4861/7a5693b697f7d285d161229344f51cbe to your computer and use it in GitHub Desktop.

Select an option

Save Trystan4861/7a5693b697f7d285d161229344f51cbe to your computer and use it in GitHub Desktop.
Cheatsheet de CSS Moderno

🧠 Cheatsheet de CSS Moderno (2025)

Inspirado en RailsDesigner – Modern CSS Overview


1. 📀 Funciones: min(), max() y clamp()

Permiten establecer valores dinámicos según el entorno, como tamaños de pantalla.

/* Elige el menor valor: */
width: min(90%, 500px);

/* Elige el mayor valor: */
font-size: max(1rem, 2vw);

/* Limita entre mínimo y máximo, adaptándose al espacio: */
font-size: clamp(1rem, 3vw, 2rem);

2. 📦 Consultas de Contenedor (@container)

Los estilos se adaptan al tamaño del contenedor, no del viewport.

.card-group {
  container-type: inline-size;
}

@container (width > 600px) {
  .card {
    flex-direction: row;
  }
}

3. ✍️ Text Wrap: text-wrap: balance | pretty

Mejora la legibilidad del texto en encabezados y párrafos.

h1 {
  text-wrap: balance; /* Divide el título en líneas equilibradas */
}

p {
  text-wrap: pretty; /* Evita líneas con una sola palabra */
}

4. 🎨 Colores relativos (hsl(from ...))

Permite modificar tonos o saturación de un color existente.

/* Toma un azul y le aplica un tinte más cálido: */
background-color: hsl(from #0000FF calc(h + 40) s l);

5. 🖐️ Propiedades lógicas (inline / block)

Compatibles con idiomas LTR y RTL sin reescribir estilos.

section {
  padding-inline: 1rem;   /* padding izquierda + derecha */
  margin-block: 2rem;     /* margen arriba + abajo */
}

6. 🎮 @starting-style

Define el estado inicial antes de la animación.

@starting-style {
  .modal.appear {
    transform: scale(0.9);
    opacity: 0;
  }
}

.modal.appear {
  transition: transform 0.3s, opacity 0.3s;
  transform: scale(1);
  opacity: 1;
}

7. 🔍 Selector :has()

Estilo condicional basado en hijos o descendientes.

.card:has(.error) {
  border-color: red;
}

form:has(input:invalid) {
  background-color: #fff0f0;
}

8. 📱 Media Queries simplificadas

Nueva sintaxis que permite rangos encadenados.

@media (480px <= width < 768px) {
  .grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

9. 🌗 light-dark() y color-scheme

Diseño adaptado automáticamente a tema claro/oscuro del navegador.

:root {
  color-scheme: light dark;
}

.card {
  background: light-dark(#ffffff, #1a1a1a);
  color: light-dark(#000000, #ffffff);
}

10. 🌲 Anidación y @layer

Anidar selectores (como en Sass) y organizar el orden de estilos.

@layer base, components, utilities;

.card {
  padding: 1rem;

  &:hover {
    background-color: #f0f0f0;
  }

  h2 {
    font-size: 1.25rem;
  }
}

✅ Resumen de uso recomendado

Característica Ideal para...
min() / max() Ajuste de tamaños según pantalla o contenedor
clamp() Tipografía fluida
@container Comportamiento responsivo de componentes
text-wrap Mejorar estética de texto
:has() Estilos reactivos según el contenido
@starting-style Animaciones suaves desde un estado inicial
light-dark() Soporte automático de tema claro/oscuro
Propiedades lógicas Soporte internacionalizado (LTR / RTL)
@layer Control del orden y especificidad en CSS modular
Nesting Código más limpio y estructurado

🧰 Consejo: Estas características están siendo adoptadas ampliamente por navegadores modernos. Verifica compatibilidad en caniuse.com.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment