Herramientas tecnológicas para el diseño y desarrollo

CSS: la forma
del contenido

El lenguaje con el que un documento marcado se convierte en un diseño. Aquí entra el criterio del diseñador, y el navegador empieza a obedecerlo.

Unidad de aprendizajeAplicaciones Enriquecidas para Internet
SubtemaHojas de estilo en cascada
DocenteL.D.G. Luis E. Maldonado Gil
FacultadFAD · UAEMéx

Para ubicar el tema

La estructura ya está de pie

</>
Sesión anterior

HTML

Cada parte del contenido tiene nombre: título, párrafo, imagen, enlace.

{ }
Estamos aquí

CSS

Ese contenido recibe color, tipografía, espacio y proporción.

W
Más adelante

WordPress + Elementor

La producción de sitios completos, apoyada en estas mismas bases.

Esta sesión Fundamentos: sintaxis, selectores, cascada, herencia, modelo de caja, unidades, color y tipografía.
La siguiente Maquetación con Flexbox y Grid, y adaptación a distintas pantallas.

Sesión 2.3

Objetivos de la sesión

01

Escribir una regla correcta

Selector, propiedad y valor, con la puntuación exacta que exige el lenguaje.

02

Apuntar al elemento correcto

Selectores de tipo, clase e identificador, combinadores y pseudoclases.

03

Predecir qué estilo gana

Cascada, especificidad y herencia explican casi todo conflicto en una hoja.

04

Dominar el modelo de caja

Contenido, relleno, borde y margen deciden el espacio real que ocupa cada elemento.

05

Manejar los valores del diseño

Unidades absolutas y relativas, notaciones de color, variables y ajustes tipográficos: el vocabulario con el que se traduce una decisión de diseño a código.

Concepto

CSSCascading Style Sheets · Hojas de Estilo en Cascada

Es el lenguaje que describe cómo se presenta un documento marcado. Declara qué aspecto tiene cada cosa: su color, su tamaño, su tipografía y el espacio a su alrededor.

Tampoco es un lenguaje de programación. Se escribe como una lista de declaraciones: elemento al que apunta, propiedad que se modifica y valor que se le asigna. El navegador las lee todas y resuelve el resultado.

El nombre lo explica Se llama en cascada porque varias hojas y varias reglas pueden hablar del mismo elemento a la vez. El lenguaje trae un procedimiento para decidir cuál se aplica.
h1 { color: #b45309; font-family: Georgia, serif; font-size: 44px; } /* Todos los h1 del sitio, de golpe */

Una sola regla alcanza a cuántos elementos haga falta. Ahí está su economía: el estilo se escribe una vez y se aplica en todas partes.

Principio de trabajo

Dos archivos, dos responsabilidades

.html

El documento marcado

Contiene el contenido y su jerarquía. Cambia cuando cambia lo que se dice.

<h1 class="titulo">Estudio Ocre</h1>
.css

La hoja de estilos

Contiene las decisiones visuales. Cambia cuando cambia el diseño.

.titulo { letter-spacing: -0.02em; }
Lo que se gana Un rediseño completo del sitio puede resolverse tocando únicamente la hoja de estilos. El contenido permanece intacto, y con él el trabajo de redacción, las rutas de las imágenes y el posicionamiento ganado en los buscadores.

La demostración clásica de esto es csszengarden.com: un mismo documento HTML y cientos de diseños sin parecido entre sí, cada uno con solo cambiar el archivo CSS.

Sintaxis

Anatomía de una regla

.pieza { color: #b45309; }

Selector · bloque de declaración

Comentarios Todo lo que va entre /* y */ lo ignora el navegador. Los comentarios separan las zonas de la hoja y dejan constancia de por qué se tomó una decisión de diseño.

Vinculación

Tres formas de aplicarlo, una recomendable

Laboratorio 1

El mismo documento, otra hoja

index.html · fijo
styles.css
Resultado
Lo que se observa aquí El documento de la izquierda no se toca en ningún momento. Todo lo que cambia en el resultado sale de la columna de en medio: es la separación entre estructura y presentación, funcionando.

Selectores

Apuntar antes de pintar

Un selector es una descripción de los elementos a los que se quiere alcanzar dentro del documento.

El navegador recorre el árbol del documento, comprueba cuáles encajan con esa descripción y les aplica el bloque. Puede alcanzar a ninguno, a uno o a todos.

Consecuencia práctica Un selector demasiado amplio pinta cosas que no debía; uno demasiado estrecho obliga a repetir la regla. Ajustar esa puntería es la mitad del trabajo con CSS.
p → todos los párrafos .pieza → los que llevan class="pieza" #trabajo → el que lleva id="trabajo" article p → párrafos dentro de un article .pieza:hover → una pieza con el cursor encima nav a:not(.activo) → enlaces del menú, salvo el activo

Los tres básicos

Tipo, clase e identificador

p

De tipo

Nombra la etiqueta. Alcanza a todos los elementos de esa clase de contenido en el documento.

h2 { font-size: 28px; }

Para el estilo de base de un sitio: la tipografía de los títulos, el interlineado de los párrafos.

.clase

De clase

Se apoya en el atributo class. Puede repetirse en cuantos elementos haga falta, y un elemento puede llevar varias.

.destacada { border-color: #b45309; }

Es el selector de trabajo diario. Casi todo el diseño de un sitio se resuelve con clases.

#id

De identificador

Se apoya en el atributo id, que debe ser único en toda la página.

#trabajo { padding-top: 80px; }

Queda mejor reservado a los enlaces internos y al código; como herramienta de estilo pesa demasiado en la cascada.

El asterisco * alcanza a todo elemento del documento. Se emplea sobre todo al principio de la hoja, para fijar un punto de partida común: * { box-sizing: border-box; }.

Interactivo

A quién alcanza cada selector

Estudio Ocre

Proyectos recientes

Identidad Cauce

Marca, papelería y señalética para un centro cultural.

Cartel Aire

Serigrafía a dos tintas sobre papel de algodón.

Colección Nube

Siete títulos de narrativa breve, en rústica.

Estudio Ocre · Toluca

Relaciones

Selectores que dependen del lugar

EscrituraRelaciónQué alcanza
article pDescendienteTodos los párrafos que estén dentro de un article, a cualquier profundidad.
article > pHijo directoSolo los párrafos que cuelgan inmediatamente del article, sin ningún elemento intermedio.
h3 + pHermano contiguoEl párrafo que viene justo después de un h3, al mismo nivel. Sirve para la entradilla que sigue a un título.
h3 ~ pHermano posteriorTodos los párrafos que vengan después de ese h3 dentro del mismo contenedor.
.pieza.destacadaSin espacioEl elemento que lleva las dos clases a la vez. El espacio cambia por completo el significado.
h1, h2, h3AgrupaciónLa coma une selectores independientes que comparten el mismo bloque de declaraciones.
El detalle que más cuesta .pieza .destacada con espacio y .pieza.destacada sin espacio son dos selectores distintos: el primero busca un descendiente, el segundo un solo elemento con ambas clases.

Estados y partes

Pseudoclases y pseudoelementos

Pseudoclases · un signo :

Describen un estado o una posición. Nada de eso está escrito en el documento: lo sabe el navegador mientras la página se usa.

a:hover cursor encima a:focus-visible recorrido con el teclado a:visited enlace ya consultado li:first-child el primero de su grupo li:nth-child(odd) los impares input:checked casilla marcada

Pseudoelementos · dos signos ::

Alcanzan una parte del elemento que no existe como etiqueta propia.

p::first-line la primera línea p::first-letter la capitular .pieza::before contenido antepuesto .pieza::after contenido añadido al final ::selection el texto seleccionado
Accesibilidad El estado :focus-visible marca el elemento que tiene el foco del teclado. Suprimir ese contorno sin poner otro en su lugar deja sin orientación a quien navega sin ratón.

Criterio

El nombre de una clase dice para qué sirve

Frágil

.texto-rojo .caja-izquierda .titulo-24 .margen-20

El nombre describe el aspecto actual. En cuanto el rojo pase a ocre, el nombre miente y hay que tocar también el HTML.

Duradero

.alerta .barra-lateral .titulo-seccion .pieza

Aquí el nombre apunta a la función que cumple esa pieza dentro del sitio. El rojo puede volverse ocre, la barra puede pasarse a la derecha y el documento no se entera.

Convención de escritura Minúsculas, sin acentos ni espacios, y guiones para separar palabras: galeria-portada. Distinguir mayúsculas de minúsculas es habitual en los servidores, y una clase mal escrita simplemente no se aplica.

En proyectos grandes se adoptan convenciones más estrictas —BEM Block Element Modifier · bloque, elemento y modificador es la más difundida— que prefijan el nombre del componente en cada clase para evitar colisiones.

La cascada

Todo elemento ya tiene estilo antes de tocarlo

01

Hoja del navegador

Cada navegador trae su propia hoja. Es la que hace que un h1 salga grande y en negritas, y que un enlace salga azul y subrayado.

02

Hoja del autor

La que se escribe en el proyecto. Se aplica encima de la anterior y la reemplaza donde coincidan.

03

Preferencias de la persona

Ajustes del propio usuario: tamaño mínimo de letra, contraste alto, movimiento reducido.

Por qué importa Los márgenes que aparecen sin haberlos pedido, el subrayado de los enlaces y el relleno de las listas vienen de la hoja del navegador. Muchas hojas de estilo empiezan neutralizando esos valores para partir de un terreno parejo.
/* Punto de partida común en cualquier proyecto */ *, *::before, *::after { box-sizing: border-box; } body, h1, h2, p, ul { margin: 0; padding: 0; }

La cascada

A igualdad de peso, manda la última

.pieza { color: #2c2a26; } .pieza { color: #b45309; } ← esta gana

Dos reglas idénticas en fuerza y en puntería, sobre la misma propiedad. Se aplica la que aparece más abajo en la hoja.

Lo mismo ocurre entre archivos: si se vinculan dos hojas, la del segundo <link> pisa a la del primero.

Consecuencia de trabajo Lo general va arriba —tipografía de base, colores, reglas de etiqueta— y lo particular abajo, donde puede afinar sin pelear. Ese reparto ahorra la mitad de los conflictos.
Diagnóstico frecuente Cuando un cambio “no se aplica”, lo primero es revisar si más abajo en la hoja existe otra regla que lo está reemplazando.

La cascada

Antes del orden se mide la puntería

Cuando dos reglas discrepan, el navegador compara primero cuán preciso es cada selector. A esa medida se le llama especificidad y se cuenta en tres cifras.

CifraQué cuentaEjemplosPeso
AIdentificadores#trabajoEl más alto. Una sola cifra A vence a cualquier cantidad de B.
BClases, atributos y pseudoclases.pieza · [href] · :hoverEl terreno normal de trabajo.
CEtiquetas y pseudoelementosarticle · ::beforeEl más bajo. Solo decide si A y B empatan.
Se comparan de izquierda a derecha 1-0-0 vence a 0-9-9. Las columnas se leen por orden, como un número de tres dígitos que nunca acarrea.
Casos que no puntúan El selector universal * y los combinadores > + ~ valen cero. :not() tampoco puntúa, pero sí lo que lleva dentro.

Interactivo

Qué regla gana

Regla escrita antes

0Id
0Clase
0Etiqueta
vs

Regla escrita después

0Id
0Clase
0Etiqueta

Propagación

Lo que se hereda y lo que no

Algunas propiedades pasan de un elemento a sus descendientes sin necesidad de repetirlas. Casi todas las que tienen que ver con el texto.

body { font-family: Georgia, serif; color: #2c2a26; line-height: 1.6; } /* Toda la página queda cubierta */

De ahí la costumbre de fijar la tipografía de base en body: se escribe una vez y desciende hasta el último párrafo.

Se hereda

color
font-family
font-size
font-weight
line-height
letter-spacing
text-align
visibility

No se hereda

margin
padding
border
background
width
height
display
position

Forzar la herencia El valor inherit obliga a una propiedad a tomar la del elemento padre, aunque no sea heredable por naturaleza: border-color: inherit;

Resolución

El orden en que se decide

01  ¿Alguna declaración lleva !important? Esa gana, sin más comprobaciones.

02  ¿Hay estilo en línea, escrito en el atributo style? Pesa más que cualquier hoja.

03  Se comparan las especificidades: identificadores, luego clases, luego etiquetas.

04  Si todo empata, se aplica la declaración que aparece más abajo.

05  Si ninguna regla habla de esa propiedad, se hereda del padre o se toma el valor inicial.

.pieza { color: #b45309 !important; }
Sobre !important Salta el procedimiento completo. Resuelve el problema del momento y crea el de la semana siguiente: la única forma de vencer a un !important es otro !important, y así se llega a hojas donde nada se puede modificar.

Su uso legítimo es puntual: forzar un estilo sobre una biblioteca externa que no se puede editar, o sobre el marcado que genera un gestor de contenidos.

Espacio

Todo elemento es una caja

El navegador dibuja cada elemento como una caja rectangular formada por cuatro capas concéntricas.

Contenido

El texto o la imagen. Su tamaño lo fijan width y height, o lo decide el propio contenido.

Relleno · padding

Aire interior, entre el contenido y el borde. Toma el color de fondo del elemento.

Borde · border

La línea perimetral. Tiene grosor, estilo y color, y ocupa espacio real.

Margen · margin

Aire exterior, que separa esta caja de sus vecinas. Siempre transparente.

Márgenes verticales Entre dos elementos apilados, los márgenes superior e inferior no se suman: prevalece el mayor de los dos. A ese comportamiento se le llama colapso de márgenes, y solo ocurre en vertical.
/* Cuatro lados */ padding: 16px; /* Vertical | horizontal */ padding: 16px 24px; /* Arriba | derecha | abajo | izquierda */ padding: 16px 24px 20px 24px; /* Centrado horizontal de un bloque */ margin: 0 auto;

Interactivo

La caja, con valores

200px
16px
4px
20px
contenido
contenido relleno borde margen

Comportamiento

Cómo se coloca cada caja

ValorComportamiento
blockOcupa todo el ancho disponible y provoca salto de línea. Acepta width, height y márgenes en los cuatro lados. Es lo que traen div, p, section o h1.
inlineOcupa solo lo que mide su contenido y convive con el texto en la misma línea. Ignora el alto y los márgenes verticales. Es lo que traen a, span, strong o em.
inline-blockSe comporta como una palabra dentro de la línea, pero sí acepta ancho, alto y márgenes. Útil para botones y para elementos de un menú horizontal.
noneRetira el elemento del documento visible. No deja hueco, y los lectores de pantalla tampoco lo anuncian.
Ocultar sin borrar visibility: hidden deja el hueco y opacity: 0 mantiene el elemento activo al hacer clic. Cada forma de ocultar tiene consecuencias distintas.
Lo que sigue flex y grid son otros dos valores de esta misma propiedad. Con ellos se arma la maquetación, y son el tema de la próxima sesión.

Valores

Medir en absoluto y en relativo

UnidadCon qué se mide
pxPíxeles. Medida fija, la más predecible y la menos adaptable.
%Porcentaje del elemento contenedor.
emRelativa al tamaño de letra del propio elemento. Se acumula al anidar.
remRelativa al tamaño de letra de la raíz del documento. No se acumula.
vw · vhPorcentaje del ancho o del alto de la ventana.
chAncho del carácter cero. Con ella se acota la medida de línea de un texto.

Un contenedor de 400 px, con la raíz en 16 px

200px
200 px
50%
200 px
12rem
192 px
12em
240 px · letra de 20 px
25vw
según la ventana
Criterio habitual rem para tipografía y espacios, porque respeta el tamaño de letra que la persona haya configurado en su navegador. px para grosores de borde y detalles que no deben crecer.

Valores

Cuatro maneras de escribir un color

#b45309Hexadecimal
rgb(180 83 9)Rojo, verde, azul
hsl(29 91% 37%)Tono, saturación, luminosidad
siennaNombre reservado

La notación hsl es la más manejable para un diseñador: fijando el tono y moviendo solo la luminosidad se obtiene una escala coherente de un mismo color. Añadir un cuarto valor introduce transparencia: hsl(29 91% 37% / .4).

Contraste Un texto pequeño necesita una relación de contraste de 4.5 a 1 contra su fondo para cumplir las pautas de accesibilidad. La cifra se comprueba con un medidor antes de cerrar la paleta.

Variables propias

:root { --ocre: #b45309; --tinta: #2c2a26; } h1 { color: var(--ocre); }

La paleta queda declarada en un solo lugar. Cambiar ahí el valor repinta el sitio entero, y es lo que hace posible el modo claro y oscuro de esta misma presentación.

Valores

La tipografía en código

Estudio Ocre
font-family: Georgia, "Times New Roman", serif;
Estudio Ocre
font-family: "Segoe UI", system-ui, sans-serif;

La lista se llama pila de fuentes. El navegador prueba una por una hasta encontrar la primera disponible en el equipo; la última es siempre una familia genérica, como red de seguridad.

PropiedadQué controla
font-sizeEl cuerpo. En rem para que respete la preferencia del usuario.
font-weightEl grosor, de 100 a 900. La palabra bold equivale a 700.
line-heightLa interlínea. Sin unidad —1.6— se calcula sobre el cuerpo de cada elemento.
letter-spacingEl interletraje. En títulos grandes suele pedir un valor negativo.
text-transformMayúsculas o versalitas, sin alterar el texto del documento.
max-widthAcota la medida de línea. Entre 60 y 75 caracteres se lee sin fatiga.
Tipografía web Para usar una fuente que no está instalada en el equipo se declara con la regla @font-face o se vincula desde un servicio de fuentes. Cada archivo añadido retrasa la carga de la página.

Referencia

Catálogo de propiedades

Práctica

Hoja basePunto de partida reutilizable para cualquier proyecto

Laboratorio 2

Una página del portafolio, ya diseñada

portafolio.html · fijo
styles.css
Resultado

Variables de color, tipografía heredada desde body, modelo de caja y pseudoclases, trabajando sobre el mismo documento.

Diagnóstico

Por qué un estilo no aparece

El punto o la almohadilla que falta

Escribir pieza en lugar de .pieza hace que el navegador busque una etiqueta con ese nombre. No encuentra ninguna y descarta la regla.

La llave sin cerrar

Todo lo que viene después queda absorbido dentro del bloque anterior. Suele delatarse porque deja de funcionar la mitad inferior de la hoja.

La ruta equivocada en el link

Si la hoja no carga, la página se ve con el estilo del navegador. Conviene comprobar la ruta y las mayúsculas del nombre del archivo.

La unidad ausente

width: 300 no significa nada. Solo 0 y las cifras sin unidad de line-height pueden ir sin ella.

Otra regla más específica

La declaración se escribió, pero pierde contra un selector de mayor puntería o contra una regla situada más abajo.

La versión guardada del navegador

La hoja anterior sigue en la memoria intermedia del navegador. Se resuelve recargando con la memoria vaciada.

El acento o el espacio en el nombre de la clase

Nombres como .título principal se interpretan como dos selectores distintos. Las clases van sin acentos, sin eñes y sin espacios.

Herramienta

El navegador enseña sus cartas

Las herramientas de desarrollo muestran, para cualquier elemento de la página, todas las reglas que lo afectan y cuáles quedaron descartadas.

Se abren con F12 en Windows. El panel de estilos permite además modificar valores en caliente y ver el resultado al instante, sin tocar el archivo.

En la práctica Es el instrumento que convierte la cascada en algo observable: las declaraciones vencidas aparecen tachadas, y junto a cada regla se indica de qué hoja y de qué línea proviene.

Elementos

El árbol del documento tal como quedó, con el elemento señalado resaltado en la página.

Estilos

Las reglas aplicadas, en orden de peso, con las descartadas tachadas.

Calculado

El valor final de cada propiedad y el diagrama de la caja con sus medidas reales.

Dispositivo

La página vista con las medidas de un teléfono o una tableta.

Evaluación

Actividad: dar forma a la página propia

Partir de la página de presentación personal entregada en la sesión anterior y escribir su hoja de estilos. Entregar el archivo .html, el archivo .css y una captura del resultado.

01  Vincular una hoja externa con <link>. Sin estilos en línea ni bloques <style>.

02  Declarar la paleta y la tipografía como variables en :root, con un mínimo de cuatro.

03  Usar los tres tipos de selector básicos y al menos un combinador y una pseudoclase.

04  Nombrar cada clase por la función que cumple dentro de la página.

05  Aplicar el modelo de caja: relleno, borde y margen deliberados, y la medida de línea acotada.

06  Resolver el estado :hover y el :focus-visible de los enlaces.

07  Entregar la hoja comentada y sin ningún !important.

CriterioPeso
Selectores adecuados y bien nombrados30 %
Modelo de caja y espaciado25 %
Sistema de color y tipografía coherente25 %
Hoja externa, ordenada y comentada20 %
Preguntas de repaso

¿Qué separa a la propiedad de su valor? · ¿Por qué conviene una hoja externa? · ¿Qué gana entre #menu a y nav .enlace? · ¿Qué propiedades se heredan? · ¿Qué cambia border-box en el ancho final? · ¿Cuándo se usa rem y cuándo px?

Referencia

Fuentes de consulta

MDN

MDN Web Docs

La referencia de cada propiedad, con su sintaxis, sus valores admitidos y ejemplos ejecutables. Disponible en español.

developer.mozilla.org

W3

W3Schools

Tutoriales breves y un editor en línea para probar cada propiedad sin instalar nada.

w3schools.com

CSS

CSS Portal

Generadores de sombras, degradados y bordes redondeados, con el código listo para copiar.

cssportal.com

W3C

Validador de CSS del W3C

Revisa la hoja completa y señala línea por línea los errores de sintaxis y las propiedades desconocidas.

jigsaw.w3.org/css-validator

Documentación consultada en 2025. Las especificaciones del lenguaje las publica el W3C World Wide Web Consortium · Consorcio de la Red Informática Mundial por módulos independientes.

Fin del subtema 2.3

Ya hay forma.
Falta el orden.

Color, tipografía y espacio ya responden. Lo que todavía se resiste es la retícula: dónde se coloca cada bloque y cómo se reacomoda todo en una pantalla pequeña.

Siguiente temaMaquetación: Flexbox, Grid y diseño adaptable
TemaHerramientas tecnológicas
DocenteL.D.G. Luis E. Maldonado Gil
FacultadFAD · UAEMéx
01 / 34

Esta presentación está pensada para pantalla horizontal.

Índice de la sesión

CSS: selectores, cascada y modelo de caja

←→ cambiar de diapositiva O abrir y cerrar este índice T modo claro u oscuro F pantalla completa InicioFin primera y última