Selectores
Selectores Básicos
*Universal — todos los elementos
divTipo — todos los elementos
.classClase — elementos con clase
#idID — elemento con id
[attr]Atributo — tiene el atributo
[attr="val"]Atributo igual al valor
Combinadores
A BDescendiente (cualquier profundidad)
A > BSolo hijo directo
A + BHermano adyacente (el siguiente)
A ~ BHermano general (todos los siguientes)
Pseudo-clases
:hoverMouse sobre el elemento
:focusElemento tiene foco
:first-childPrimer hijo del padre
:nth-child(n)N-ésimo hijo (base 1, odd, even, 2n+1)
:not(sel)Negación — excluir coincidencias
:has(sel)Selector de padre (contiene coincidencia)
Pseudo-elementos
::beforeInsertar contenido antes del elemento
::afterInsertar contenido después del elemento
::placeholderEstilo del texto placeholder del input
::selectionEstilo del texto seleccionado
Modelo de Caja
Box Sizing
/* Incluir padding/border en el ancho */ *, *::before, *::after { box-sizing: border-box; }
Propiedades
marginEspacio fuera del borde
borderBorde alrededor del padding
paddingEspacio dentro del borde
width / heightDimensiones del contenido
outlineAnillo fuera del margen (sin espacio)
Abreviación
margin: 10px; /* todos los lados */ margin: 10px 20px; /* vertical | horizontal */ margin: 10px 20px 30px; /* top | horiz | bottom */ margin: 10px 20px 30px 40px; /* T D B I */
Flexbox
Contenedor
.flex { display: flex; justify-content: center; /* eje principal */ align-items: center; /* eje cruzado */ gap: 1rem; }
Propiedades del Contenedor
flex-directionrow | column | row-reverse | column-reverse
flex-wrapnowrap | wrap | wrap-reverse
justify-contentflex-start | center | space-between | space-around | space-evenly
align-itemsstretch | center | flex-start | flex-end | baseline
align-contentAlineación del eje cruzado multi-línea
gapEspacio entre elementos flex
Propiedades del Elemento
flex: 1Crecer para llenar el espacio disponible
flex: 0 0 200pxAncho fijo, sin crecer/encoger
align-selfOverride de align-items para un elemento
orderCambiar orden visual (por defecto 0)
Grid
Contenedor
.grid { display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: auto 1fr auto; gap: 1rem; }
Propiedades del Contenedor
grid-template-columnsDefinir pistas de columna: 1fr 2fr, repeat(3, 1fr)
grid-template-rowsDefinir pistas de fila
grid-template-areasÁreas con nombre: "header header" "nav main"
gapEspacios entre filas y columnas
justify-itemsAlinear elementos en línea (horizontal)
align-itemsAlinear elementos en bloque (vertical)
Posicionamiento de Elementos
.item { grid-column: 1 / 3; /* abarcar cols 1-2 */ grid-row: 1 / -1; /* abarcar todas las filas */ grid-area: header; /* área con nombre */ }
Tipografía
Propiedades de Fuente
font-familyPila de tipografías: 'Inter', sans-serif
font-sizeTamaño: 1rem, 16px, clamp(1rem, 2vw, 2rem)
font-weightnormal (400) | bold (700) | 100-900
font-stylenormal | italic | oblique
line-heightEspaciado entre líneas: 1.5 (sin unidad recomendado)
letter-spacingEspaciado entre caracteres: 0.05em
Propiedades de Texto
text-alignleft | center | right | justify
text-decorationnone | underline | line-through
text-transformuppercase | lowercase | capitalize
text-overflowellipsis (con overflow: hidden)
white-spacenowrap | pre | pre-wrap
word-breakbreak-all | break-word
Colores y Fondos
Formatos de Color
color: #ff6600; /* hex */ color: rgb(255, 102, 0); /* rgb */ color: hsl(24, 100%, 50%); /* hsl */ color: oklch(70% 0.15 50); /* oklch */
Propiedades de Fondo
background-colorRelleno sólido: #f0f0f0
background-imageurl(img.jpg) o gradiente
background-sizecover | contain | 100px 200px
background-positioncenter | top right | 50% 50%
background-repeatno-repeat | repeat-x | repeat-y
Gradientes
background: linear-gradient(to right, #f00, #00f); background: radial-gradient(circle, #fff, #000); background: conic-gradient(red, yellow, green);
Transiciones y Animación
Transiciones
.btn { transition: background 0.3s ease, transform 0.2s; } .btn:hover { background: #0056b3; transform: scale(1.05); }
Propiedades de Transición
transition-propertyQué propiedad animar
transition-durationDuración: 0.3s, 300ms
transition-timing-functionease | linear | ease-in-out | cubic-bezier()
transition-delayEsperar antes de comenzar
Animación con Keyframes
@keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .icon { animation: spin 1s linear infinite; }
Propiedades de Animación
animation-nameReferenciar nombre de @keyframes
animation-durationDuración de un ciclo
animation-iteration-count1 | 3 | infinite
animation-directionnormal | alternate | reverse
animation-fill-modeforwards | backwards | both
Diseño Responsivo
Media Queries
@media (max-width: 768px) { .sidebar { display: none; } } @media (prefers-color-scheme: dark) { body { background: #1a1a1a; color: #eee; } }
Breakpoints Comunes
max-width: 480pxTeléfonos móviles
max-width: 768pxTablets
max-width: 1024pxLaptops pequeñas
max-width: 1280pxEscritorios
Unidades de Viewport
vw / vh% del ancho / alto del viewport
dvhAlto dinámico del viewport (seguro en móvil)
svh / lvhAlto del viewport pequeño / grande
cqiTamaño inline del container query
Container Queries
.card-wrapper { container-type: inline-size; } @container (min-width: 400px) { .card { flex-direction: row; } }
Posicionamiento
Valores de Position
staticPor defecto — flujo normal del documento
relativeDesplazado de su posición normal; conserva espacio
absolutePosicionado respecto al ancestro posicionado más cercano
fixedPosicionado respecto al viewport; fijo al hacer scroll
stickyAlterna entre relative/fixed según el scroll
Patrones de Centrado
/* Centrar con Flex */ display: flex; justify-content: center; align-items: center; /* Centrar con Grid */ display: grid; place-items: center;
Apilamiento
z-indexOrden de apilamiento (mayor = encima); requiere position
isolation: isolateCrea nuevo contexto de apilamiento
Propiedades Personalizadas
Definir y Usar
:root { --color-primary: #3b82f6; --spacing-md: 1rem; } .btn { background: var(--color-primary); padding: var(--spacing-md); }
Valores de Respaldo
color: var(--accent, #ff6600); /* usa #ff6600 si --accent no está definido */
Tematización Dinámica
[data-theme="dark"] { --bg: #1a1a2e; --text: #e0e0e0; } body { background: var(--bg); color: var(--text); }