Saltar al contenido
chuleta.css · devschool

Chuleta de CSS

Curso de CSS

Resumen de consulta rápida con las propiedades y selectores de CSS moderno que más vas a usar. Cada apartado enlaza a la lección donde se explica con calma.

Sintaxis y cómo añadir CSS

/* selector { propiedad: valor; } */
.tarjeta {
  color: #333;
  padding: 16px;
}
CódigoQué hace
<link rel="stylesheet" href="estilos.css">Hoja externa, en el head (la forma recomendada)
<style> ... </style>CSS dentro del propio HTML
style="color: red"CSS en línea en un elemento
/* comentario */Comentario
@import url("base.css");Importa otra hoja (al principio del archivo)

Más en: ¿Qué es CSS?

Selectores

CódigoQué hace
*Todos los elementos
pPor etiqueta
.botonPor clase
#cabeceraPor id
h1, h2Varios selectores a la vez
nav aDescendientes: cualquier a dentro de nav
ul > liHijos directos
h2 + pHermano inmediatamente siguiente
h2 ~ pTodos los hermanos siguientes
.boton.activoElemento con las dos clases
[type="email"]Por atributo y valor
[href^="https"], [href$=".pdf"]Atributo que empieza o termina por
a:hover, :focus-visibleRatón encima; foco con teclado
:active, :visitedPulsado; enlace ya visitado
li:first-child, li:last-childPrimer y último hijo
li:nth-child(2n)Hijos pares (odd para impares)
:not(.activo)Los que no cumplen el selector
:is(h1, h2) aAgrupa selectores en uno
.tarjeta:has(img)Elementos que contienen algo
::before, ::afterContenido generado (con content: "")
::placeholder, ::selectionTexto de ejemplo; texto seleccionado

Más en: Selectores

Cascada, especificidad y herencia

CódigoQué hace
OrdenA igual especificidad, gana la última regla
p = (0,0,1)Especificidad de etiqueta
.clase = (0,1,0)Clase, atributo o pseudoclase
#id = (1,0,0)Id: pesa más que cualquier número de clases
style="..."En línea: gana a las hojas de estilo
!importantSalta la especificidad; evítalo
:where(...)Especificidad cero
color, font-*, line-heightSe heredan de padres a hijos
margin, padding, borderNo se heredan
inheritToma el valor del padre
initialVuelve al valor por defecto de la propiedad
unsetHereda si la propiedad se hereda; si no, initial
@layer base, componentes;Capas: controla qué bloques ganan

Más en: Cascada y herencia

Unidades

CódigoQué hace
pxPíxeles: tamaño fijo
%Porcentaje del contenedor
emRelativo al tamaño de letra del propio elemento
remRelativo al tamaño de letra de html (16px por defecto)
vw, vh1 % del ancho y del alto de la ventana
dvh, svhAlto de ventana real en móviles
chAncho del carácter 0 (útil para líneas de texto)
frFracción del espacio libre en Grid
calc(100% - 2rem)Operaciones con unidades mezcladas
min(90%, 60rem)El menor de los valores
max(1rem, 2vw)El mayor de los valores
clamp(1rem, 4vw, 2rem)Valor fluido con mínimo y máximo

Más en: Unidades

Colores, fondos, bordes y sombras

CódigoQué hace
color: tomatoColor de texto por nombre
#2d6cdf, #2d6cdf80Hexadecimal; con transparencia
rgb(45 108 223 / 50%)Rojo, verde, azul y opacidad
hsl(220 70% 50%)Tono, saturación y luminosidad
oklch(60% 0.15 250)Espacio de color moderno y uniforme
currentColorEl valor actual de color
opacity: 0.5Transparencia de todo el elemento
background-colorColor de fondo
background-image: url("fondo.jpg")Imagen de fondo
background-size: coverLa imagen cubre toda la caja
background-position: centerPosición de la imagen
background-repeat: no-repeatSin repetición
linear-gradient(to right, #fff, #000)Degradado lineal
radial-gradient(circle, #fff, #000)Degradado circular
border: 1px solid #cccBorde: grosor, estilo y color
border-top, border-left…Un solo lado
border-radius: 8px / 50%Esquinas redondeadas / círculo
outline: 2px solid blueContorno que no ocupa espacio
box-shadow: 0 4px 12px rgb(0 0 0 / 20%)Sombra: x, y, desenfoque, color
text-shadow: 1px 1px 2px #000Sombra del texto

Más en: Colores y fondos, Bordes y sombras

Tipografía y fuentes web

CódigoQué hace
font-family: "Inter", system-ui, sans-serifFuente con alternativas
font-size: 1.125remTamaño de letra
font-weight: 700Grosor (100 a 900; bold = 700)
font-style: italicCursiva
line-height: 1.5Interlineado (sin unidad)
text-align: centerAlineación (left, right, justify)
text-decoration: noneQuita el subrayado
text-transform: uppercaseMayúsculas (lowercase, capitalize)
letter-spacing: 0.05emEspacio entre letras
text-indent: 2emSangría de la primera línea
white-space: nowrapSin saltos de línea
text-overflow: ellipsisPuntos suspensivos (con overflow: hidden)
text-wrap: balanceReparte mejor las líneas de los títulos
font: italic 700 1rem/1.5 sans-serifAtajo de varias propiedades
@font-faceCarga una fuente propia
font-display: swapMuestra texto mientras carga la fuente
@font-face {
  font-family: "Titulos";
  src: url("fuentes/titulos.woff2") format("woff2");
  font-weight: 700;
  font-display: swap;
}

Más en: Tipografía, Fuentes web

Modelo de caja y display

CódigoQué hace
width, heightAncho y alto del contenido
min-width, max-widthLímites de tamaño
padding: 16pxRelleno interior
margin: 16pxMargen exterior
margin: 10px 20pxArriba y abajo, izquierda y derecha
margin: 1px 2px 3px 4pxArriba, derecha, abajo, izquierda
margin: 0 autoCentra un bloque con ancho definido
box-sizing: border-boxwidth incluye padding y borde
aspect-ratio: 16 / 9Proporción fija
display: blockOcupa todo el ancho, línea nueva
display: inlineEn línea; ignora width y height
display: inline-blockEn línea pero acepta tamaño
display: noneOculta y no ocupa espacio
visibility: hiddenOculta pero sigue ocupando espacio
overflow: hidden / autoRecorta / barra de desplazamiento si hace falta
overflow-x: autoDesplazamiento solo horizontal
*, *::before, *::after {
  box-sizing: border-box;
}

Los márgenes verticales de dos bloques seguidos se colapsan: queda el mayor, no la suma.

Más en: Modelo de caja, display y overflow

Posicionamiento

CódigoQué hace
position: staticValor por defecto: flujo normal
position: relativeSe desplaza desde su sitio; sirve de referencia
position: absoluteFuera del flujo; relativo al ancestro posicionado
position: fixedFijo respecto a la ventana
position: stickySe pega al hacer scroll (con top)
top, right, bottom, leftDesplazamientos
inset: 0Atajo de los cuatro lados
z-index: 10Orden de apilamiento (necesita position)
.tarjeta { position: relative; }
.etiqueta {
  position: absolute;
  top: 8px;
  right: 8px;
}

Más en: Posicionamiento

Flexbox

CódigoQué hace
display: flexActiva Flexbox en el padre
flex-direction: row / columnFila o columna
justify-content: centerReparto en el eje principal
space-between, space-around, space-evenlyOtros repartos del espacio
align-items: centerAlineación en el eje cruzado
align-items: stretchEstira los hijos (por defecto)
flex-wrap: wrapPermite varias líneas
gap: 16pxEspacio entre hijos
align-contentReparte las líneas cuando hay wrap
flex-grow: 1El hijo crece para ocupar el hueco
flex-shrink: 0El hijo no se encoge
flex-basis: 200pxTamaño inicial del hijo
flex: 1Atajo: crece y reparte a partes iguales
align-self: flex-endAlinea solo ese hijo
order: -1Cambia el orden visual
margin-left: autoEmpuja el hijo hacia el final
.centrado {
  display: flex;
  justify-content: center;
  align-items: center;
}

Más en: Flexbox

Grid

CódigoQué hace
display: gridActiva Grid en el padre
grid-template-columns: 1fr 2frDos columnas: la segunda, el doble
repeat(3, 1fr)Tres columnas iguales
repeat(auto-fit, minmax(200px, 1fr))Columnas que se adaptan solas
grid-template-rows: auto 1fr autoTamaño de las filas
gap: 1rem 2remEspacio entre filas y columnas
grid-column: 1 / 3El hijo va de la línea 1 a la 3
grid-column: span 2El hijo ocupa dos columnas
grid-row: 1 / -1Ocupa todas las filas explícitas
grid-template-areasDiseño con nombres de zonas
grid-area: menuColoca el hijo en una zona
justify-items, align-itemsAlinea el contenido de las celdas
place-items: centerCentra en los dos ejes
grid-auto-rows: 200pxAlto de las filas creadas automáticamente
.pagina {
  display: grid;
  grid-template-columns: 200px 1fr;
  grid-template-areas:
    "cabecera cabecera"
    "menu     contenido";
}

Más en: Grid

Responsive

CódigoQué hace
<meta name="viewport" ...>Imprescindible en el HTML
@media (min-width: 768px) { }Estilos a partir de 768px (mobile first)
@media (max-width: 767px) { }Estilos hasta 767px
@media (width >= 768px) { }Sintaxis moderna de rangos
@media (orientation: landscape)Pantalla en horizontal
@media (prefers-color-scheme: dark)El usuario usa modo oscuro
@media (prefers-reduced-motion: reduce)El usuario prefiere menos animación
@media (hover: hover)Dispositivos con ratón
@media printEstilos para imprimir
max-width: 100%Imágenes que no se salen de su caja
.productos { display: grid; gap: 1rem; }

@media (min-width: 768px) {
  .productos { grid-template-columns: repeat(3, 1fr); }
}

Más en: Responsive

Imágenes, listas, tablas y formularios

CódigoQué hace
img { max-width: 100%; height: auto; }Imagen fluida
object-fit: coverRellena la caja sin deformar (recorta)
object-fit: containCabe entera sin deformar
object-position: topQué parte se ve al recortar
filter: grayscale(1)Filtros (blur(), brightness()…)
list-style: noneQuita las viñetas
list-style-type: squareTipo de viñeta
li::marker { color: red; }Estilo de la viñeta o número
border-collapse: collapseBordes de tabla sencillos, sin doble línea
tr:nth-child(even)Filas alternas de color (cebra)
text-align: right en tdAlinea números a la derecha
input:focus-visibleEstilo del campo con foco
input:invalid, :user-invalidCampo no válido (tras interactuar)
accent-color: #2d6cdfColor de casillas, radios y rangos
appearance: noneQuita el estilo nativo del control
font: inheritLos campos usan la fuente de la página
cursor: pointerCursor de mano en botones

Más en: Imágenes en CSS, Listas y tablas, Formularios

Variables y animaciones

CódigoQué hace
:root { --primario: #2d6cdf; }Declara una variable global
color: var(--primario)Usa la variable
var(--primario, blue)Con valor de reserva
transition: background-color 0.3s easeCambio suave entre estados
transition: all 0.2sAnima todas las propiedades (menos eficiente)
ease, linear, ease-in-outCurvas de velocidad
transition-delay: 0.1sRetraso antes de empezar
transform: translateY(-4px)Mueve el elemento
transform: scale(1.05)Lo agranda o encoge
transform: rotate(45deg)Lo gira
@keyframes nombre { }Define los pasos de una animación
animation: aparecer 1s ease forwardsAplica una animación
animation-iteration-count: infiniteSe repite sin fin
@keyframes aparecer {
  from { opacity: 0; transform: translateY(20px); }
  to   { opacity: 1; transform: none; }
}
.aviso { animation: aparecer 0.5s ease; }

Más en: Variables CSS, Animaciones

CSS moderno, organización y Bootstrap

CódigoQué hace
.tarjeta { & h2 { } }Anidamiento nativo
&:hoverEstado del propio selector anidado
container-type: inline-sizeConvierte en contenedor para consultas
@container (min-width: 400px) { }Estilos según el ancho del contenedor
margin-inline, padding-blockPropiedades lógicas (horizontal / vertical)
color-mix(in srgb, red 50%, white)Mezcla dos colores
scroll-behavior: smoothDesplazamiento suave a las anclas
@supports (display: grid) { }Estilos si el navegador lo admite
Orden: reset, base, diseño, componentes, utilidadesEstructura recomendada del archivo
BEM: .tarjeta__titulo--destacadoBloque, elemento y modificador
class="container"Bootstrap: contenedor centrado
class="row" + class="col-md-6"Bootstrap: rejilla de 12 columnas
class="btn btn-primary"Bootstrap: botón
class="d-flex gap-2 mt-3"Bootstrap: utilidades de flex y espacios

Más en: CSS moderno, Organizar el CSS, Proyecto: landing, Bootstrap, Bootstrap: rejilla, Bootstrap: componentes

CSS · devschool.es/chuletas/css/