- Aprender
- Informática
- Programación
- Fundamentos de desarrollo web
- Hojas de estilo CSS
Hojas de estilo CSS: selectores, cascada y modelo de caja
PrincipianteUnidad 4 de 8 del curso Curso de Fundamentos de desarrollo web
Lo que aprenderás
- Escribe reglas CSS válidas, vincula una hoja de estilo a una página HTML y parte de los estilos que ya aplica el navegador, usando las herramientas de desarrollo para ver qué ocurre.
- Escribe reglas CSS y vincula una hoja de estilo a una páginaLee y escribe las partes de una regla CSS, elige entre una hoja de estilo externa, un elemento
<style>y estilos en línea, y descubre qué hace el navegador con los errores. - Parte de los estilos predeterminados del navegador e inspecciónalosReconoce los estilos que aplica cada navegador antes que los tuyos, decide cuáles restablecer y usa las herramientas de desarrollo para averiguar por qué un elemento tiene determinado aspecto.
- Escribe reglas CSS y vincula una hoja de estilo a una página
- Selecciona exactamente los elementos deseados con selectores de tipo, clase e ID, selectores de atributo, pseudoclases, pseudoelementos y combinadores.
- Selecciona elementos por tipo, clase e IDSelecciona elementos por nombre, clase o ID, combina selectores que deben coincidir con el mismo elemento y agrupa varios selectores en una regla.
- Selecciona por atributos, estados y partes de los elementosUsa selectores de atributo, pseudoclases para estados y posiciones, y pseudoelementos que aplican estilos a parte de un elemento o añaden contenido generado.
- Combina selectores según su posición en la páginaSelecciona elementos por su relación con otros elementos del árbol HTML: en cualquier lugar dentro, directamente dentro, justo después o en algún lugar después de otro elemento.
- Selecciona elementos por tipo, clase e ID
- Determina qué declaración se aplica cuando varias reglas establecen la misma propiedad, calcula la especificidad y explica cómo obtienen los elementos valores que ninguna regla les asignó directamente.
- Sigue la cascada para encontrar la declaración que prevaleceAplica los pasos de la cascada (origen e importancia, especificidad y después orden de aparición), y usa con cuidado los estilos en línea,
!importanty las capas de cascada. - Calcula y compara la especificidadCalcula la puntuación de cualquier selector en el formato ID-CLASE-TIPO, compara las puntuaciones columna por columna y mantén baja la especificidad para que los estilos sigan siendo fáciles de reemplazar.
- Usa la herencia y las palabras clave globalesConoce qué propiedades pasan de padres a hijos, usa la herencia para escribir menos CSS y contrólala con
inherit,initial,unsetyrevert.
- Sigue la cascada para encontrar la declaración que prevalece
- Especifica colores con las principales notaciones de CSS, haz que el texto sea legible sobre su fondo y elige entre unidades absolutas y relativas para texto, espaciado y tamaños.
- Especifica colores con palabras clave, notación hexadecimal, rgb() y hsl()Usa palabras clave de color, códigos hexadecimales,
rgb()yhsl(), añade transparencia y comprueba que el texto contraste lo suficiente con su fondo. - Elige longitudes y unidadesUsa correctamente píxeles,
em,rem, porcentajes y unidades relativas al área de visualización, conoce la referencia de cada unidad relativa y combina unidades concalc().
- Especifica colores con palabras clave, notación hexadecimal, rgb() y hsl()
- Explica cómo se dibuja cada elemento como una caja de contenido, relleno, borde y margen, calcula su tamaño y controla el espacio dentro de las cajas y entre ellas.
- Calcula el tamaño de las cajas a partir del contenido, el relleno, el borde y el margenNombra las cuatro partes de una caja, escribe las propiedades abreviadas de espaciado y calcula el tamaño de un elemento en los modelos de caja estándar y alternativo.
- Controla el espaciado entre cajas de bloque y cajas en líneaPredice cómo ocupan espacio las cajas de bloque, en línea y de bloque en línea, centra un bloque con márgenes automáticos y reconoce cuándo colapsan los márgenes verticales.
- Calcula el tamaño de las cajas a partir del contenido, el relleno, el borde y el margen
- Elige y carga fuentes, haz legible el texto, aplica estilos a listas y enlaces y decora cajas con fondos, degradados, bordes, esquinas redondeadas y sombras.
- Elige fuentes y carga fuentes webEscribe listas de fuentes alternativas, establece el tamaño, el grosor y el estilo, usa la propiedad abreviada
fonty carga una fuente personalizada con@font-face. - Aplica estilos al texto, las listas y los enlaces para facilitar la lecturaEstablece la altura de línea, la alineación, la decoración, las mayúsculas y minúsculas y el espaciado, cambia los marcadores y la sangría de las listas y da a los enlaces estados claros y accesibles.
- Añade colores, imágenes y degradados de fondoRellena cajas con colores, imágenes y degradados, controla cómo se repiten, escalan y colocan las imágenes de fondo y escribe la propiedad abreviada
background. - Dibuja bordes, esquinas redondeadas, contornos y sombrasEscribe propiedades abreviadas de borde para todos los lados o para uno solo, redondea esquinas con
border-radiusy añade contornos y sombras sin cambiar la disposición.
- Elige fuentes y carga fuentes web
Guía de estudio de Hojas de estilo CSS
1Vincula CSS e inspecciona el resultado
CSS convierte una página HTML con significado en una página con colores, tipografía y espaciado elegidos. Para que una regla funcione, necesita tanto una sintaxis válida como una vinculación con el documento. El navegador también aporta sus propios estilos, por lo que siempre partes de un aspecto existente. Aprende a vincular una hoja de estilo externa, hacer un pequeño cambio y seguirlo en las herramientas de desarrollo cuando el resultado sea distinto de lo que esperabas.
1.1 Reglas, declaraciones y hojas de estilo
HTML describe el contenido y su significado. CSS, abreviatura de hojas de estilo en cascada, describe la presentación: colores, fuentes, espaciado, bordes y fondos. Cambiar una hoja de estilo puede dar al mismo HTML un aspecto diferente sin cambiar sus encabezados, párrafos ni enlaces.
Lee una regla
p {
color: navy;
font-size: 18px;
}
El selector p coincide con los párrafos. Las llaves encierran el bloque de declaraciones. Cada declaración tiene una propiedad, dos puntos, un valor y un punto y coma. Aquí, color y font-size son propiedades; navy y 18px son valores. Los saltos de línea y los espacios entre estas partes facilitan la lectura del código sin cambiar su efecto.
El punto y coma separa una declaración de la siguiente. El último es opcional, pero conservarlo evita errores cuando añades otra línea. En color: navy font-size: 18px;, el navegador lee un único valor de color no válido. No puede recuperar las dos declaraciones que querías escribir, por lo que ese texto no establece ninguno de los dos estilos.
Vincula el CSS
Una hoja de estilo externa es un archivo CSS independiente vinculado desde el head del HTML:
<link rel="stylesheet" href="css/styles.css">
Esta ruta significa que una carpeta llamada css está junto al archivo HTML y contiene styles.css. Un archivo externo puede aplicar estilos a varias páginas. Al guardar un cambio en él, se actualizan las reglas que cargan esas páginas.
Un elemento style en el head contiene reglas para una página. Un atributo style en línea contiene declaraciones para un elemento, como <p style="color: crimson;">Hello.</p>. Las hojas de estilo externas suelen ser más fáciles de mantener. Las declaraciones normales en línea también prevalecen sobre las reglas normales de las hojas de estilo del autor, lo que puede dificultar cambios posteriores.
Para obtener un primer resultado, coloca body { font-family: Arial, sans-serif; } y h1 { color: darkslateblue; } en el archivo vinculado. Recarga la página. El texto principal usa Arial donde esté disponible, con una fuente sin serifa como alternativa; el encabezado cambia de color. Los controles como los botones pueden conservar su propia fuente del navegador hasta que indiques expresamente que la hereden.
Detecta errores de sintaxis y de ruta
Los navegadores omiten las declaraciones no válidas y continúan. color: 12px; no es válido porque una longitud no es un color. font-size: 16 px; no es válido porque el número y la unidad deben ir juntos. Una propiedad mal escrita también se ignora. Una declaración de borde válida en el mismo bloque puede seguir funcionando, por lo que un cambio visible no demuestra que todas las declaraciones sean válidas.
Los comentarios de CSS usan /* Header styles */ y pueden ocupar varias líneas. // no inicia un comentario de CSS; puede hacer que se omita el código que sigue. Los nombres de propiedades y los valores de palabras clave habituales no distinguen entre mayúsculas y minúsculas; por convención, escríbelos en minúsculas. Los nombres de clase y las rutas de archivo deben coincidir con su escritura y sus mayúsculas y minúsculas reales.
Si no aparece ningún estilo, comprueba la solicitud en el panel Red. Una ruta incorrecta como style.css puede devolver 404 aunque la propia página HTML se abra con normalidad.
Trata las propiedades abreviadas como configuraciones completas
Una propiedad abreviada establece varias propiedades relacionadas a la vez. margin: 10px 20px; establece los cuatro márgenes. Las partes omitidas vuelven a sus valores iniciales: background-image: url("sky.jpg"); seguido de background: lightblue; elimina la imagen. Coloca primero la propiedad abreviada y después las excepciones individuales que deban conservarse.
Puntos clave
- Escribe cada declaración como
property: value;dentro de una regla. - Vincula una hoja de estilo externa desde el
headdel HTML; resuelve su ruta desde el archivo HTML. - El navegador omite el CSS no válido y continúa con las declaraciones válidas.
- Usa
/* ... */para los comentarios de CSS. - Una propiedad abreviada restablece las propiedades individuales relacionadas que omite.
1.2 Valores predeterminados del navegador y herramientas de desarrollo
Una página HTML sin estilos sigue teniendo encabezados grandes, espaciado entre párrafos, marcadores de lista y enlaces subrayados. Estos proceden de la hoja de estilo del agente de usuario, el CSS integrado del navegador. Tus estilos parten de estos valores predeterminados; una página sin estilos propios no es una página sin reglas CSS.
Elige el significado antes que el aspecto
Los valores predeterminados habituales incluyen un margen de 8px en el cuerpo, márgenes verticales de 1em en los párrafos y un relleno inicial de 40px en las listas. Los valores predeterminados de los encabezados incluyen 2em para h1 y 1.5em para h2, con márgenes verticales de 0.67em para h1. El texto de importancia destacada aparece en negrita; el texto con énfasis aparece en cursiva. Los enlaces no visitados suelen ser azules y los visitados, morados. La configuración y las implementaciones de los navegadores pueden afectar a los valores predeterminados, así que inspecciona la página real cuando necesites precisión.
El tamaño de texto predeterminado suele ser 16px, con una fuente elegida en la configuración del navegador. Los lectores pueden cambiar ese tamaño. Los tamaños de fuente relativos pueden seguir su elección.
Elige un elemento HTML por su significado y después aplícale estilos. Si un h2 parece demasiado grande, usa h2 { font-size: 1.25rem; }. Elegir un h4 solo por tener una letra más pequeña cambiaría la estructura de encabezados. Cambiar el tamaño en CSS mantiene intacto el significado del encabezado de segundo nivel.
Los valores predeterminados también determinan cómo ocupan espacio los elementos. Los párrafos y las secciones normalmente forman cajas de bloque. Los elementos span y los enlaces normalmente fluyen dentro de las líneas. Los elementos de lista tienen display: list-item, lo que les da una caja de nivel de bloque y un marcador. Un cambio de display en CSS altera el comportamiento de la caja y conserva el significado HTML del elemento.
Restablece solo lo que quieras
Un restablecimiento de estilos elimina determinados valores predeterminados. body { margin: 0; } elimina el espacio exterior. Una regla general como * { margin: 0; padding: 0; } también elimina el espaciado de los párrafos y la sangría de las listas, que después tendrás que volver a definir. Un enfoque de normalización conserva los valores predeterminados útiles y ajusta las diferencias.
Los controles de formulario suelen tener fuentes del navegador asignadas directamente. Para que coincidan con la página, escribe:
button, input, select, textarea {
font: inherit;
}
Comienza el documento HTML con <!DOCTYPE html>. Esta declaración selecciona el modo de estándares. Omitirla puede activar el modo de compatibilidad, en el que el comportamiento de compatibilidad antiguo cambia algunos tamaños y otros resultados de CSS.
Inspecciona la propiedad que te sorprende
Haz clic derecho en un elemento y elige Inspeccionar. El panel Estilos muestra las reglas que coinciden, incluidas las reglas del navegador etiquetadas como estilos del agente de usuario. Una declaración tachada ha perdido frente a otra declaración; una advertencia puede señalar CSS no válido. Las declaraciones que prevalecen se eligen propiedad por propiedad, así que una regla puede perder su color y seguir aportando su relleno.
El panel de estilos calculados muestra los valores finales de las propiedades y el contenido, relleno, borde y margen del modelo de caja. Si un encabezado tiene un espacio inesperado, inspecciona su margen antes de añadir relleno a otro elemento. Prueba un cambio directamente en las herramientas de desarrollo y después copia la regla que funciona en tu hoja de estilo: las ediciones realizadas durante la inspección desaparecen al recargar.
Cuando un estilo falle, sigue un orden útil: comprueba que la hoja de estilo se ha cargado, que el selector coincide, que la declaración es válida, que prevalece y que la propiedad afecta a ese tipo de caja. Un width: 200px válido sigue sin dimensionar un span en línea ordinario.
Puntos clave
- La hoja de estilo del agente de usuario proporciona valores predeterminados legibles antes de que se aplique tu CSS.
- Elige los elementos HTML por su significado y cambia su aspecto con CSS.
- Un restablecimiento elimina valores predeterminados que quizá necesites volver a añadir.
- Usa el modo de estándares con
<!DOCTYPE html>. - Inspecciona las reglas que coinciden, su validez y las declaraciones tachadas antes de cambiar el código.
- Guarda en la hoja de estilo los cambios que funcionen en las herramientas de desarrollo.
2Selecciona exactamente los elementos adecuados
Un selector describe a qué elementos alcanza una regla. Algunos selectores coinciden con nombres o atributos; otros coinciden con un estado, una parte de un elemento o una relación en el árbol HTML. Los pequeños cambios de puntuación importan: un espacio, una coma y un punto indican algo distinto. Parte del elemento al que quieres aplicar estilos y retrocede por las condiciones que lo identifican, para que la regla alcance todos los elementos deseados y deje los demás intactos.
2.1 Selectores de tipo, clase, ID y compuestos
Un selector responde a una pregunta práctica: ¿qué elementos deben recibir estas declaraciones? Comienza con el selector más sencillo que exprese la función deseada. Una clase puede reutilizarse en muchos elementos sin vincular el estilo a una posición concreta de la página.
Selecciona nombres y atributos
| Selector | Coincide con |
|---|---|
p | Todos los párrafos |
.warning | Todos los elementos con la clase warning |
#site-header | El elemento con el ID site-header |
* | Todos los elementos |
Un selector de tipo es el nombre de un elemento. Un selector de clase empieza con un punto; un selector de ID empieza con #. Estos signos forman parte del selector CSS, no del valor del atributo HTML. Escribe <p class="warning">, no <p class=".warning">.
Un elemento puede tener varias clases separadas por espacios. Tanto <p class="warning"> como <div class="box warning"> coinciden con .warning. Un ID debe ser único dentro de una página. Su alta especificidad también dificulta reemplazar los estilos basados en ID, por lo que las clases suelen ser la principal herramienta para aplicar estilos reutilizables.
Usa nombres que describan una función, como .error-message o .product-card. Un nombre como .red-text resulta engañoso si el diseño cambia a otro color. Los nombres de clase distinguen entre mayúsculas y minúsculas: .Warning y .warning son distintos. Un nombre que comienza con un dígito necesita un escape en un selector CSS; elegir .three-columns evita la forma no válida sin escape .3-columns.
Exige varias condiciones en un mismo elemento
Al escribir selectores juntos se forma un selector compuesto. El mismo elemento debe cumplir todas las partes. p.intro coincide con párrafos que tienen la clase intro. .card.featured coincide con un elemento que tiene ambas clases.
<p class="note important">Doors open at 19:00.</p>
<p class="note">Bring your ticket.</p>
.note { color: #333333; }
.important { font-weight: bold; }
p.note.important { border-left: 4px solid crimson; }
Primero busca las coincidencias. Ambos párrafos tienen note, por lo que ambos reciben texto gris oscuro. Solo el primero tiene important, por lo que solo él aparece en negrita. El selector compuesto añade el borde izquierdo a ese mismo primer párrafo porque es un p con ambas clases. No se necesita ningún contenedor adicional.
Un espacio cambia la tarea: p .intro selecciona un elemento con la clase intro dentro de un párrafo. No selecciona el párrafo en sí. Mantén las partes juntas cuando describan el mismo elemento.
Comparte un bloque de declaraciones
Una coma crea una lista de selectores:
h1, h2, h3 { font-family: Georgia, serif; }
Cada selector coincide de forma independiente con su nivel de encabezado. Sin las comas, h1 h2 h3 buscaría un h3 dentro de un h2 dentro de un h1.
Un selector no válido en una lista de selectores ordinaria puede invalidar toda la regla. h1, h2..title, h3 no aplica estilos a ninguno de esos encabezados porque el punto doble no es válido. Cuando parezca que falta una regla compartida, comprueba todos los selectores de la lista, no solo el correspondiente al elemento que inspeccionaste.
Puntos clave
- Una clase puede aparecer en muchos elementos y un elemento puede tener varias clases.
- Un ID debe ser único en la página y tiene una especificidad alta como selector.
p.introexige ambas condiciones en un elemento;p .introdescribe un descendiente.- Las comas crean selectores independientes que comparten declaraciones.
2.2 Atributos, estados y partes
Algunas condiciones para aplicar estilos ya están presentes en los atributos HTML. Otras dependen de lo que hace el lector o de la posición de un elemento entre sus hermanos. CSS puede seleccionar estas condiciones sin añadir una clase para cada una.
Selecciona un atributo o su valor
Los selectores de atributo usan corchetes. [alt] coincide cuando el atributo está presente, aunque su valor esté vacío. input[type="email"] exige el valor exacto del atributo.
| Patrón | Significado |
|---|---|
[href^="https"] | El valor empieza por https |
[href$=".pdf"] | El valor termina en .pdf |
[href*="example"] | El valor contiene example |
[class~="note"] | Una lista separada por espacios contiene la palabra note |
| `[lang | ="en"]` |
Añade i antes del corchete de cierre para ignorar las mayúsculas y minúsculas, como en a[href$=".pdf" i]. También selecciona un enlace que termina en .PDF. La coincidencia de palabra completa evita que note coincida por accidente con una palabra de clase más larga, como notebook.
Selecciona un estado o una posición
Una pseudoclase usa dos puntos: :hover, :focus, :checked o :disabled. :focus-visible selecciona un elemento con foco cuando el navegador determina que se necesita un indicador visible, normalmente durante la navegación con teclado.
Un enlace puede estar visitado y tener el puntero encima al mismo tiempo. Para reglas que compiten con la misma especificidad, escribe los estados del enlace en este orden: :link, :visited, :focus, :hover, :active. De lo contrario, una regla posterior para el color de visitado prevalecería sobre una regla anterior para el color al pasar el puntero en un enlace visitado. Por privacidad, los navegadores restringen :visited a ciertos cambios de color; establecer su grosor de fuente no funciona y la transparencia no puede revelar el historial de visitas.
Las pseudoclases estructurales cuentan hermanos. :first-child significa el primer elemento hijo de su padre. En <article><h2>News</h2><p>Update</p></article>, p:first-child no coincide con nada. p:first-of-type sí coincide con ese párrafo.
:nth-child(3) selecciona el tercer hijo. odd selecciona las posiciones 1, 3, 5; even selecciona 2, 4, 6. En :nth-child(3n+1), empieza con n = 0, después 1, 2 y 3: las posiciones seleccionadas son 1, 4, 7 y 10. li:not(:last-child) excluye el último elemento, lo que resulta útil para colocar separadores solo entre elementos.
Aplica estilos a una parte o añade una indicación
Un pseudoelemento usa dos pares de dos puntos. ::first-line y ::first-letter aplican estilos a partes del texto; ::marker a marcadores de lista, ::placeholder al texto de ayuda de un campo y ::selection al texto seleccionado. Las formas más antiguas con un solo par de dos puntos para before, after, first-line y first-letter siguen funcionando.
.required::after {
content: " *";
color: crimson;
}
::after crea contenido dentro del elemento seleccionado, después de su contenido existente. ::before lo crea antes. Ambos necesitan un valor de content; incluso content: "" crea una caja decorativa. El texto esencial debe estar en el HTML, donde sigue siendo contenido real del documento. Usa estos pseudoelementos para decoración o pequeñas indicaciones, ya que el texto generado no se puede seleccionar ni copiar de forma fiable como el texto HTML.
Puntos clave
- Los operadores de atributo distinguen entre presencia, valores exactos, fragmentos de texto y palabras completas.
- Una pseudoclase selecciona un estado o una posición; un pseudoelemento aplica estilos a una parte o a contenido generado.
:first-childcuenta todos los elementos hermanos, mientras que:first-of-typecuenta los del mismo tipo de elemento.- Los estados de un enlace pueden coincidir, por lo que las reglas de estado que compiten necesitan un orden deliberado.
::beforey::afternecesitancontent; la información esencial debe estar en el HTML.
2.3 Relaciones en el árbol HTML
Los elementos HTML forman un árbol. Un elemento situado directamente dentro de otro es su hijo; cualquier elemento anidado dentro de él es un descendiente. Los elementos que comparten un padre son hermanos. Un combinador conecta selectores mediante una de estas relaciones.
Sigue la relación hasta el elemento seleccionado
| Combinador | Ejemplo | Elemento seleccionado |
|---|---|---|
| Espacio | nav a | Cualquier enlace en cualquier lugar dentro de un nav |
> | .menu > li | Un li directamente dentro de .menu |
+ | h2 + p | Un párrafo inmediatamente después de un h2, con el mismo padre |
~ | h2 ~ p | Cualquier párrafo posterior que sea hermano de un h2 |
La parte situada más a la derecha nombra el elemento que recibe las declaraciones. h2 + p aplica estilos al párrafo, no al encabezado. Ambos combinadores de hermanos buscan hacia adelante entre los hermanos; ninguno selecciona un padre ni un hermano anterior.
Sigue una lista anidada
<ul class="menu">
<li>Guides</li>
<li>Topics
<ul>
<li>Typography</li>
</ul>
</li>
</ul>
.menu li coincide con los tres elementos de lista porque los tres son descendientes de la lista exterior. .menu > li coincide solo con «Guides» y «Topics»: su padre es la lista con la clase menu. El padre del elemento «Typography» es el ul interior, que no tiene esa clase.
Esta distinción importa cuando los elementos del nivel superior necesitan mucho relleno, pero los elementos anidados necesitan un espaciado compacto. Un selector de descendiente alcanza todas las profundidades salvo que otra condición lo limite.
Sigue los hermanos posteriores
<article>
<h2>Opening hours</h2>
<p>Visit in the morning.</p>
<aside>Closed on holidays.</aside>
<p>Booking is optional.</p>
</article>
h2 + p coincide con el primer párrafo, «Visita por la mañana». No salta el aside para buscar otro párrafo. h2 ~ p coincide con ambos párrafos porque ambos siguen al encabezado y comparten su padre. Si un párrafo estuviera dentro del aside, no sería hermano del encabezado y, por esa razón, no coincidiría con ninguno de los dos selectores.
Combina relaciones sin abarcar demasiado
.sidebar > ul a:hover coincide con enlaces que tienen el puntero encima en cualquier lugar dentro de un ul cuyo padre directo tiene la clase sidebar. Léelo desde la derecha: un enlace con el puntero encima; dentro de una lista; esa lista directamente dentro de la barra lateral. El espacio permite elementos intermedios entre la lista y el enlace.
Los combinadores no añaden especificidad. Las partes del selector correspondientes a elementos, clases, ID y otras condiciones sí la añaden. Por eso, las cadenas largas pueden dificultar el mantenimiento de las reglas aunque los símbolos de relación no sumen puntos: cambiar el anidamiento del HTML puede hacer que dejen de coincidir. Una clase descriptiva en el elemento seleccionado, como .menu-link, suele expresar una función reutilizable con más claridad.
Cuando una regla no coincida, inspecciona el árbol real en lugar de contar los espacios visuales. Dos elementos pueden aparecer uno junto a otro en pantalla mientras tienen padres distintos en el HTML. Los comentarios y los espacios en blanco no cuentan como elementos hermanos para estos combinadores.
Puntos clave
- Un espacio alcanza descendientes a cualquier profundidad;
>alcanza hijos directos. +alcanza el elemento hermano inmediatamente posterior;~alcanza los hermanos posteriores que coinciden.- El selector situado más a la derecha nombra el elemento al que se aplican los estilos.
- Los combinadores no añaden especificidad, pero las cadenas largas de selectores dependen mucho de la estructura HTML.
3Determina qué declaración prevalece
Varias reglas pueden coincidir con un elemento y cada una puede aportar una parte distinta de su aspecto. La cascada elige un valor para cada propiedad mediante una serie de comparaciones. La especificidad solo importa después de que las comparaciones de mayor prioridad empaten. La herencia ayuda a que los estilos de texto se transmitan por la página sin necesidad de una regla para cada elemento. Mantener separadas estas funciones facilita mucho explicar y corregir una declaración tachada.
3.1 La cascada, los estilos en línea y las capas
La cascada elige una declaración que prevalece para cada propiedad de cada elemento. No elige una regla completa y descarta todas las demás. Con p { color: gray; font-size: 18px; } y .lead { color: black; }, un párrafo con la clase lead puede tomar su color de la regla de clase y su tamaño de la regla de tipo.
Compara en el orden correcto
Primero elimina las declaraciones que no se aplican: sus selectores deben coincidir y deben cumplirse las condiciones. Después compara el origen y la importancia, incluida la prioridad de la capa de cascada. Los estilos normales en línea del autor prevalecen sobre las reglas normales de sus hojas de estilo. Cuando las declaraciones sigan empatadas en estas etapas anteriores, compara la especificidad; usa el orden de aparición si persiste el empate.
| Origen de la declaración normal | Prioridad |
|---|---|
| Autor: el CSS del sitio | La más alta de las tres |
| Usuario: estilos personalizados de un lector | Entre el autor y el navegador |
| Agente de usuario: valores predeterminados del navegador | La más baja |
Dos reglas .button de igual prioridad que establecen distintos colores de fondo se resuelven por orden: prevalece la posterior. Las hojas de estilo vinculadas más adelante en el HTML también aparecen más tarde para estos empates. Que un archivo llegue más rápido por la red no hace que aparezca más tarde en la cascada.
Comprende la importancia antes de añadirla
Una declaración en línea como style="color: purple;" prevalece sobre los selectores normales de las hojas de estilo del autor, incluso los que tienen ID. Una declaración de una hoja de estilo del autor con !important puede prevalecer sobre esa declaración normal en línea.
<p class="note" style="color: purple;">Check the time.</p>
p { color: gray !important; }
.note { color: blue; }
El párrafo es gris. La importancia se compara antes que la especificidad del selector o la ventaja normal del estilo en línea. Si el color en línea también tiene !important, esa declaración importante en línea prevalece sobre la regla importante de la hoja de estilo del autor.
Para las declaraciones importantes, la prioridad de los orígenes se invierte: las declaraciones importantes del navegador prevalecen sobre las importantes del usuario, que prevalecen sobre las importantes del autor. Esto protege las reglas que los lectores o navegadores deben imponer. Dentro de un mismo origen, la prioridad del estilo en línea y de la capa sigue estando por delante de la especificidad y el orden en el código fuente.
Usar !important para cada conflicto hace que reemplazar estilos sea cada vez más difícil. Prefiere un selector más sencillo o un orden deliberado. Reemplazar reglas de terceros que no puedes editar puede justificar una declaración importante; debe ser una excepción meditada.
Agrupa reglas en capas de cascada
@layer reset, base, components;
@layer base {
p { margin: 0 0 1rem; }
}
Esto declara el orden de las capas antes de sus reglas. Para las declaraciones normales, las capas posteriores prevalecen sobre las anteriores independientemente de la especificidad del selector. Las reglas normales fuera de cualquier capa prevalecen sobre las reglas normales en capas. Por tanto, una regla de componente de baja especificidad puede reemplazar una regla base de alta especificidad sin añadir ID.
Las declaraciones importantes invierten ese orden de capas: las capas anteriores prevalecen sobre las posteriores y las declaraciones importantes en capas prevalecen sobre las importantes sin capa. Esta inversión conserva las protecciones importantes de las capas fundamentales. Al investigar un conflicto, determina qué grupo de origen, importancia y capa prevalece antes de dedicar tiempo a contar las partes del selector.
Puntos clave
- La cascada selecciona las declaraciones por separado para cada propiedad.
- El origen, la importancia y la prioridad del estilo en línea y de la capa preceden a la especificidad.
- Los estilos normales en línea del autor prevalecen sobre las reglas normales de sus hojas de estilo.
!importantcambia la prioridad; no añade especificidad.- Para las declaraciones normales prevalecen las capas posteriores y las reglas sin capa; para las importantes se invierte la prioridad.
- El orden de aparición solo resuelve las declaraciones después de un empate en las comparaciones anteriores.
3.2 Especificidad sin adivinar
La especificidad mide el peso de selección de un selector. Compárala solo entre las declaraciones que sigan empatadas en las etapas anteriores de la cascada, incluidos el origen, la importancia y la prioridad de la capa y del estilo en línea.
Cuenta tres columnas
Escribe la especificidad como ID-CLASE-TIPO, por ejemplo 0-1-1.
| Columna | Cuenta cada uno de estos |
|---|---|
| ID | Selectores de ID como #menu |
| CLASE | Clases, selectores de atributo y pseudoclases ordinarias |
| TIPO | Selectores de tipo y pseudoelementos |
El selector universal * y los combinadores no suman nada. Para a[href^="https"]:focus, cuenta ningún ID, dos partes de CLASE (el atributo y :focus) y una parte de TIPO (a). El resultado es 0-2-1.
Más ejemplos: .nav a es 0-1-1; ul li a:hover es 0-1-3; #main .card > h2 es 1-1-1; article p::first-line es 0-0-3. Un pseudoelemento cuenta en la columna TIPO aunque su nombre empiece con dos pares de dos puntos.
Compara desde la izquierda
Compara primero los ID. Si empatan, compara CLASE; si estos empatan, compara TIPO. Solo las ternas iguales pasan a compararse por el orden en el código fuente. Son recuentos separados, no cifras de un número decimal: 0-11-0 sigue perdiendo frente a 1-0-0. Las clases adicionales no se trasladan a la columna ID.
<nav id="site-nav">
<a class="active" href="/">Home</a>
</nav>
#site-nav a { color: white; }
nav a.active { color: orange; }
.active { color: yellow; }
Supón que son declaraciones normales de la misma capa del autor. Sus puntuaciones son 1-0-1, 0-1-2 y 0-1-0. La primera prevalece, por lo que el enlace es blanco. Su columna ID resuelve la comparación antes de que importen los recuentos de clases o tipos.
#site-nav .active prevalecería con 1-1-0, pero un diseño basado en clases es más fácil de ampliar: .site-nav a puede proporcionar el estilo base y .site-nav .active cambiar el enlace activo. Esto mantiene la especificidad baja y bastante uniforme.
Conoce las excepciones funcionales
:is(), :not() y :has() no suman peso por la función en sí. Su argumento más específico aporta el peso. Así, li:not(.done) es 0-1-1 y :is(#intro, p) a es 1-0-1. Cuenta el selector más específico de la lista de argumentos, no el que parezca visualmente más cercano al elemento.
:where() y todo lo que contiene siempre aportan cero. Por eso, :where(#main) p tiene una puntuación de 0-0-1. Es útil para valores predeterminados que deben ser fáciles de reemplazar.
La distancia a un antecesor no cuenta. Tanto body h1 como html h1 tienen una puntuación de 0-0-2, por lo que una declaración posterior resuelve su empate. Los estilos en línea se tratan antes de la especificidad de los selectores y !important pertenece a la importancia. Ninguno de los dos es otra parte ordinaria del selector que se deba sumar a la terna.
Puntos clave
- Cuenta los ID, después las clases, atributos y pseudoclases, y después los tipos y pseudoelementos.
- Compara las ternas columna por columna; una columna inferior no puede superar a una superior.
- Los combinadores y
*suman cero. :is(),:not()y:has()toman su argumento más específico;:where()aporta cero.- La distancia al antecesor no afecta a la especificidad.
3.3 Valores heredados y restablecimientos deliberados
La herencia permite que un hijo reciba un valor de su padre cuando esa propiedad se hereda normalmente y ninguna declaración proporciona un valor distinto al hijo. Por eso, una sola regla para el cuerpo puede establecer el color de texto y la fuente de gran parte de una página.
Distingue el texto heredado de la configuración de caja
La mayoría de las propiedades de texto se heredan: color, las propiedades de fuente, line-height, letter-spacing, text-align y text-transform. Los estilos de lista y visibility también se heredan. Las propiedades de caja como margen, relleno, borde, ancho, altura, fondos, visualización y cálculo del tamaño de la caja no se heredan.
body { color: #222222; font-family: Georgia, serif; }
h1, h2 { font-family: Arial, sans-serif; }
footer { color: #666666; }
El texto ordinario del cuerpo usa Georgia en gris oscuro. Los encabezados reciben la familia de fuentes asignada directamente y conservan el color heredado. El texto del pie de página hereda Georgia mientras su color cambia localmente.
El fondo transparente de un hijo deja ver el fondo del padre; eso no significa que el hijo haya heredado el color de fondo. Del mismo modo, los hijos de una caja con borde no reciben automáticamente sus propios bordes.
Las asignaciones directas prevalecen sobre los valores heredados
Con #content { color: red; } y p { color: blue; }, un párrafo dentro del área de contenido es azul. La especificidad del ID no compite con la regla del párrafo porque las declaraciones seleccionan elementos distintos. El párrafo ya tiene un color asignado directamente, por lo que no necesita el rojo heredado.
Los hijos suelen heredar valores calculados. Si una sección tiene font-size: 20px y su hijo tiene font-size: 0.8em, el valor calculado de ese hijo es 16px. Un párrafo dentro de él hereda 16px; no vuelve a multiplicar por 0.8. Una altura de línea sin unidad es útil porque el valor heredado sigue siendo un multiplicador del tamaño de fuente de cada hijo.
Elige qué significa un restablecimiento
| Palabra clave | Efecto |
|---|---|
inherit | Toma el valor calculado del padre |
initial | Usa el valor inicial de la propiedad CSS |
unset | Hereda una propiedad heredada; inicializa una no heredada |
revert | Revierte los estilos del origen actual |
revert-layer | Revierte los estilos de la capa de cascada actual |
En el CSS del autor, revert deja que se apliquen los estilos de origen de usuario o del navegador. La diferencia importa en un div: display: initial da el valor inicial inline de la propiedad, mientras que display: revert restaura su visualización block habitual del navegador. Un valor inicial pertenece a la propiedad CSS; un valor predeterminado del navegador puede depender del elemento HTML.
inherit funciona incluso en una propiedad que normalmente no se hereda, como border: inherit. button, input { font: inherit; } reemplaza las fuentes asignadas directamente a los controles por la fuente de su padre. all: unset restablece casi todas las propiedades a la vez, lo que también elimina un aspecto integrado útil.
Una excepción aparente es el subrayado. text-decoration no se hereda, pero el subrayado de un padre se dibuja a través de sus descendientes en línea. Establecer text-decoration: none en un span anidado no puede borrar la línea del padre. Elimínala del padre y aplícala solo al texto que deba llevarla.
Puntos clave
- La mayoría de las propiedades de texto se heredan; las propiedades de caja generalmente no.
- Un valor asignado directamente al hijo tiene prioridad sobre un valor heredado del padre.
initialsignifica el valor inicial de CSS;revertpuede restaurar los valores predeterminados del navegador para un elemento.unsetelige la herencia o la inicialización según la propiedad.revert-layerelimina la capa actual de la decisión sobre esa propiedad.- El subrayado de un padre se dibuja a través de los descendientes en línea sin heredarse.
4Especifica colores y elige unidades útiles
Los valores de CSS necesitan un significado claro además de una escritura válida. Un color se puede expresar por su nombre, por los valores de sus canales o por su tono, y la transparencia cambia lo que el lector ve al final. Una longitud puede tomar como referencia el texto, un contenedor o la ventana del navegador. Aprende qué referencia usa cada unidad y calcula el valor antes de comprobarlo en el navegador. Estas elecciones ayudan a que los estilos sigan siendo legibles cuando cambian el contenido y la configuración del lector.
4.1 Valores de color, alfa y contraste
color establece el color del texto. Los fondos, bordes, contornos, decoraciones y sombras también aceptan valores de color. Un mismo color puede escribirse de varias formas; elige una notación que facilite comprender el cambio deseado.
Interpreta nombres y canales hexadecimales
CSS tiene unos 150 colores con nombre, entre ellos navy, tomato y rebeccapurple. Los nombres son prácticos para pruebas rápidas, pero su significado cotidiano puede sorprenderte: green es #008000, mientras que el verde puro brillante es lime, o #00ff00. Los valores exactos eliminan esa incertidumbre.
Un color hexadecimal de seis dígitos tiene tres pares de canales: rojo, verde y azul. Cada par va de 00 a ff, equivalente a los valores de 0 a 255. Todos los valores en cero dan negro; todos al máximo dan blanco. Los pares iguales producen un gris, como en #808080.
La notación hexadecimal de tres dígitos duplica cada dígito: #f0a se expande a #ff00aa. No añade ceros. Un color como #1e90ff no puede abreviarse porque no todos los pares repiten su dígito. Las letras hexadecimales mayúsculas y minúsculas representan los mismos valores.
Para convertir un par, multiplica su primer dígito por 16 y suma el segundo. Las letras de la a a la f representan los valores del 10 al 15. Para #1e90ff, 1e da 30, 90 da 144 y ff da 255. La notación RGB equivalente es rgb(30 144 255). El código más antiguo puede usar comas o rgba(); esas formas siguen funcionando.
Describe el tono o la transparencia
hsl() indica el tono, la saturación y la luminosidad. El tono es un ángulo: 0 o 360 es rojo, 120 verde y 240 azul. La saturación va del gris al 0 % al color pleno al 100 %. La luminosidad va del negro al 0 % al blanco al 100 %. Un tono puro tiene una saturación del 100 % y una luminosidad del 50 %, como en hsl(0 100% 50%). Cambiar solo la luminosidad crea versiones oscuras y pálidas relacionadas.
Un valor alfa va después de una barra: rgb(0 0 0 / 0.6) es negro con un 60 % de opacidad. Cero es totalmente transparente y uno totalmente opaco. La notación hexadecimal de ocho dígitos añade un par para el alfa: #00000080 tiene 128 de 255, aproximadamente un 50 % de alfa. transparent es totalmente transparente.
.notice {
color: white;
background-color: rgb(0 0 0 / 0.6);
}
Aquí solo el fondo es parcialmente transparente. opacity: 0.6, en cambio, haría parcialmente transparente todo el elemento, incluidos su texto y sus hijos. La diferencia importa cuando quieres texto opaco y legible sobre una superficie coloreada.
Reutiliza el color y comprueba el resultado
currentColor significa el color de texto del propio elemento. Con color: #0055aa; border: 2px solid currentColor;, el borde sigue el color del texto. Cambiar el color del texto también cambia ese borde sin repetir un valor de color.
El nivel AA de las WCAG 2.2 exige al menos 4,5:1 de contraste para texto normal y 3:1 para texto grande, de unos 24px o unos 18,5px en negrita. #767676 sobre blanco da aproximadamente 4,54:1; #999999 sobre blanco da aproximadamente 2,85:1 y no cumple ninguno de los dos umbrales. Usa un comprobador de contraste o las herramientas de color del navegador con el par real de color de primer plano y fondo, incluido el efecto de la transparencia.
Puntos clave
- Los colores hexadecimales codifican rojo, verde y azul; la notación de tres dígitos repite cada dígito.
rgb()expresa canales, mientras quehsl()expresa tono, saturación y luminosidad.- El alfa de un color de fondo afecta a ese color;
opacityhace parcialmente transparente todo el elemento. currentColorsigue el color de texto del elemento.- El texto normal necesita al menos un contraste de 4,5:1 en WCAG AA; el texto grande necesita 3:1.
4.2 Píxeles y longitudes relativas
Una longitud combina un número con una unidad, como 16px o 1.5rem. No hay espacio entre ellos. Un ancho distinto de cero necesita una unidad: width: 300; no es válido. El cero puede omitir su unidad. Algunas propiedades aceptan deliberadamente números sin unidad, entre ellas line-height: 1.5, opacity: 0.8 y font-weight: 700.
Relaciona la unidad con su referencia
| Unidad | Referencia |
|---|---|
px | Un píxel de referencia CSS |
em en font-size | El tamaño de fuente del padre |
em en espaciado y otras longitudes | El tamaño de fuente del propio elemento |
rem | El tamaño de fuente del elemento raíz |
% | Una referencia determinada por la propiedad |
vw, vh | El ancho o la altura del área de visualización |
ch | El ancho del carácter cero de la fuente |
Un píxel CSS no es necesariamente un punto físico de la pantalla. Las pantallas de alta densidad pueden usar varios píxeles del dispositivo para un píxel CSS. Las relaciones fijas entre unidades incluyen 1in = 96px = 2,54cm y 1pt = 1/72in. Así, 12pt equivalen a 16px y 1cm equivale aproximadamente a 37,8px. Esas conversiones no garantizan una medida física en todas las pantallas.
Calcula valores relativos a la fuente
Supón que un padre tiene una fuente de 16px y su hijo tiene font-size: 1.25em; padding: 2em;. Calcula primero el tamaño de fuente: 1,25 por 16px da 20px. El relleno usa entonces el tamaño del propio hijo, por lo que 2 por 20px da 40px en cada lado.
Los tamaños de fuente en em anidados pueden acumularse. Con li { font-size: 1.25em; }, tres niveles anidados que parten de 16px pasan a ser 20px, 25px y 31,25px. En cambio, 1.25rem da 20px en cada nivel cuando la raíz es de 16px.
Dejar el tamaño raíz en el valor predeterminado del navegador, o establecerlo como porcentaje, permite que el texto relativo responda cuando un lector cambie ese valor predeterminado. Un html { font-size: 16px; } fijo anula esa configuración. Un patrón práctico es usar rem para el tamaño de fuente y em para el relleno de un botón, de modo que su espaciado crezca con su propio texto.
Comprueba los porcentajes y el área de visualización
La propiedad determina la referencia del porcentaje. Un bloque contenedor proporciona una referencia para el tamaño de la caja; en estos ejemplos de flujo normal suele ser el área de contenido del padre. Un hijo con width: 40% en un bloque contenedor de 600px mide 240px de ancho antes de añadir cualquier relleno o borde con el modelo content-box. font-size: 150% usa el tamaño de fuente del padre. Incluso el relleno y los márgenes porcentuales superior e inferior usan el ancho del bloque contenedor, no su altura.
1vw es el 1 % del ancho del área de visualización; 1vh es el 1 % de su altura. En un área de visualización de 1280 por 800 píxeles CSS, 50vw equivale a 640px y 10vh a 80px. 100vw puede incluir el ancho de la barra de desplazamiento y producir desbordamiento horizontal donde el 100% del padre sí cabría.
max-width: 65ch da a una columna de texto un ancho relacionado con la fuente. Es una medida aproximada de longitud de lectura, no una garantía de que cada línea tenga exactamente 65 caracteres.
Combina unidades con un cálculo
width: calc(100% - 40px); resta una cantidad fija de un tamaño relativo. Mantén los espacios alrededor de + y -; calc(100%-40px) no es válido. Los navegadores calculan las longitudes relativas a la fuente en píxeles, mientras que los porcentajes del tamaño del contenedor se resuelven durante el cálculo de la disposición. Las herramientas de desarrollo muestran los tamaños resultantes para que puedas comprobar tanto la referencia como la operación.
Puntos clave
- Une los números directamente a sus unidades; el cero puede ir solo.
emusa el padre para el tamaño de fuente y el propio elemento para otras longitudes.remsigue la raíz y evita la acumulación de tamaños de fuente anidados.- Las referencias de los porcentajes dependen de la propiedad; el relleno porcentual usa el ancho del contenedor.
- Las unidades relativas al área de visualización siguen la ventana;
chsigue la fuente. - Usa espacios alrededor de la suma y la resta dentro de
calc().
5Mide cajas y controla el espaciado
Cada elemento visible ocupa espacio como una caja. El ancho que escribes puede describir solo el contenido o toda la caja hasta el borde, y los márgenes añaden otra capa de espacio por fuera. El tipo de visualización cambia qué propiedades de tamaño y espaciado tienen efecto. Aprende a calcular una caja antes de cambiar sus dimensiones y después explica sorpresas habituales, como una tarjeta de ancho completo que se desborda, un enlace en línea que ignora el ancho o dos márgenes verticales que se combinan.
5.1 Contenido, relleno, borde y margen
De dentro hacia fuera, una caja tiene contenido, relleno, borde y margen. El contenido incluye texto, imágenes o elementos hijos. El relleno crea espacio alrededor de ese contenido. El borde rodea el relleno; el margen separa la caja hasta el borde de sus vecinas.
Un fondo rellena el contenido y el relleno y se extiende por debajo del borde, pero nunca colorea el margen. Usa relleno cuando el espacio deba formar parte de una tarjeta de color. Usa margen para el espacio exterior. Los márgenes pueden ser negativos; el relleno no.
Interpreta las propiedades abreviadas de espaciado
margin, padding y border-width aceptan de uno a cuatro valores:
| Valores | Lados establecidos |
|---|---|
10px | Los cuatro |
10px 20px | Arriba y abajo, después izquierda y derecha |
10px 20px 30px | Arriba, izquierda y derecha, abajo |
10px 20px 30px 40px | Arriba, derecha, abajo, izquierda |
El orden de cuatro valores sigue el sentido de las agujas del reloj desde arriba. Usa propiedades individuales como padding-left para cambiar un solo lado después de la propiedad abreviada. No interpretes el segundo valor de una forma de dos valores como el inferior: establece ambos lados horizontales.
Calcula la caja de contenido predeterminada
.card {
width: 300px;
padding: 20px;
border: 5px solid;
margin: 10px;
}
El valor inicial de box-sizing es content-box. El ancho declarado de 300px cubre solo el contenido. Suma dos veces 20px de relleno y dos veces 5px de borde: la caja hasta el borde mide 350px de ancho. Suma los dos márgenes de 10px para obtener 370px de espacio horizontal.
La altura funciona igual cuando se establece explícitamente, pero el texto suele necesitar una caja que pueda crecer. Dejar height: auto evita encerrar contenido cambiante en una altura fija.
Incluye el relleno y el borde en el ancho
Con box-sizing: border-box, el mismo ancho declarado incluye el relleno y el borde. La caja hasta el borde sigue midiendo 300px; resta 40px de relleno y 10px de borde para obtener un área de contenido de 250px. Los márgenes permanecen fuera y dan un espacio horizontal de 320px.
Un restablecimiento habitual aplica este modelo a los elementos y a sus partes generadas:
*, *::before, *::after { box-sizing: border-box; }
box-sizing no se hereda automáticamente, por lo que la regla selecciona las cajas directamente.
Un hijo de ancho completo permite ver la diferencia con facilidad. En un contenedor de 600px, width: 100%; padding: 0 20px; da una caja hasta el borde de 640px con el cálculo content-box, antes de añadir cualquier borde. Con el cálculo border-box, el mismo ancho declarado de 600px incluye el relleno y cabe en el contenedor.
Deja que el contenido quepa sin problemas
min-height establece un límite inferior y permite que la caja crezca. max-width: 800px permite que un bloque de ancho automático se reduzca en un contenedor estrecho e impide que supere los 800px de ancho.
Si el contenido supera una caja fija, overflow controla el resultado: visible deja que se desborde, hidden lo recorta, scroll solicita barras de desplazamiento y auto permite el desplazamiento cuando es necesario. pre { overflow: auto; } da a una línea larga de código su propia área de desplazamiento. Recortar no es una buena solución para texto que los lectores siguen necesitando; comprueba primero si el tamaño fijo es necesario.
Usa el diagrama de caja del panel de estilos calculados para comparar los valores de contenido, relleno, borde y margen del navegador con tu cálculo.
Puntos clave
- El relleno está dentro del borde; el margen está fuera y permanece transparente.
- El ancho content-box excluye el relleno y el borde.
- El ancho border-box incluye el relleno y el borde, pero nunca el margen.
- Las propiedades abreviadas de espaciado siguen el sentido de las agujas del reloj desde arriba; las formas más cortas comparten valores entre lados.
- Usa alturas flexibles y límites de tamaño para adaptarte al contenido cambiante.
overflowcontrola el contenido que supera la caja.
5.2 Visualización, centrado y colapso de márgenes
El tipo de visualización determina cómo se integra una caja en su entorno. Un bloque normalmente comienza en una línea nueva y ocupa el ancho disponible cuando su ancho es automático. Una caja en línea ordinaria fluye dentro del texto y se dimensiona según su contenido. Una caja de bloque en línea conserva la posición en línea y acepta dimensiones explícitas.
Elige el comportamiento que necesitas
| Visualización | Ancho y altura | Comportamiento del espaciado |
|---|---|---|
block | Se aplican | Los márgenes y el relleno separan las cajas |
inline ordinario | No dimensionan la caja | El espaciado horizontal afecta al texto cercano |
inline-block | Se aplican | El espaciado vertical y horizontal afecta a la disposición circundante |
En elementos en línea ordinarios como span y a, los márgenes superior e inferior no tienen efecto. El relleno y los bordes verticales se dibujan, pero no separan las líneas vecinas, por lo que pueden superponerse a ellas. El relleno, los bordes y los márgenes horizontales sí ocupan espacio a lo largo de la línea.
nav a {
display: inline-block;
padding: 8px 16px;
}
Estos enlaces permanecen en una línea mientras sus cajas con relleno reservan espacio vertical. display: block daría a cada enlace su propia línea. Las imágenes son un caso especial en línea: aceptan ancho y altura. Su alineación predeterminada con la línea base puede dejar un pequeño espacio debajo para los trazos descendentes de las letras; img { display: block; } elimina ese espacio de la línea base.
display: none elimina la caja y su espacio, y hace que los lectores de pantalla no la lean. visibility: hidden la oculta y conserva su espacio.
Centra una caja o centra su contenido
.page {
max-width: 960px;
margin: 0 auto;
}
En un contenedor más ancho, el bloque deja de crecer a los 960px y los dos márgenes horizontales automáticos reparten por igual el espacio restante. Un bloque que ocupa todo el contenedor no tiene espacio horizontal sobrante que repartir. Los márgenes automáticos no centran una caja en línea ordinaria y los márgenes verticales automáticos en el flujo normal de bloques se resuelven en cero.
text-align: center cumple otra función: centra el contenido en línea dentro de un bloque. Una caja de párrafo centrada puede seguir teniendo el texto alineado a la izquierda; un párrafo de ancho completo puede tener el texto centrado sin convertirse en una caja más estrecha y centrada.
Reconoce el colapso de márgenes verticales
En el flujo normal de bloques, los márgenes superior e inferior contiguos pueden colapsar. Dos márgenes positivos se convierten en el mayor de los dos. Un encabezado con un margen inferior de 24px seguido de un párrafo con un margen superior de 16px tiene un espacio de 24px, no de 40px. Los márgenes horizontales no colapsan.
Con márgenes positivos y negativos, combina el mayor positivo con el más negativo: 20px y −8px se convierten en 12px. Si todos son negativos, prevalece el más negativo. Una caja vacía sin contenido, altura, borde ni relleno que los separe puede hacer colapsar sus propios márgenes superior e inferior.
El margen superior de un primer hijo también puede colapsar a través de un padre sin borde, relleno ni contenido anterior que los separe. Entonces el espacio aparece fuera del fondo del padre. Añade relleno o un borde al padre, o elimina el margen superior del hijo. Unas condiciones similares permiten que colapse el margen inferior del último hijo; una altura o altura mínima del padre puede impedir este último caso.
Los márgenes de las cajas de bloque en línea no colapsan, como tampoco lo hacen los de los elementos flex o de cuadrícula ni los de las cajas flotantes o posicionadas de forma absoluta. Un patrón sencillo de espaciado de texto establece los márgenes superiores en cero y usa márgenes inferiores, con relleno para el espacio dentro de los contenedores.
Puntos clave
- Las cajas en línea ordinarias ignoran el ancho y la altura establecidos; las cajas de bloque en línea los aceptan.
- Los márgenes horizontales automáticos centran un bloque más estrecho;
text-aligncentra su contenido en línea. - Los márgenes verticales positivos de bloques adyacentes pueden colapsar en el valor mayor.
- El relleno del padre puede separar el margen de un primer hijo del margen del padre.
display: noneelimina el espacio;visibility: hiddenlo conserva.
6Aplica estilos a texto legible y superficies acabadas
Las fuentes, el interlineado y los estados de los enlaces determinan la comodidad con que un lector puede usar una página. Los fondos, bordes y sombras distinguen sus cajas sin cambiar su significado. Crea estilos de texto con alternativas, mantén el contenido esencial en el HTML y elige una decoración que apoye el contenido. Las mismas reglas de caja y cascada siguen aplicándose: una propiedad abreviada puede restablecer un grosor de fuente, un borde puede añadir ancho y un contorno de foco puede mostrar un estado sin mover nada.
6.1 Listas de fuentes alternativas y fuentes web
Elegir una fuente implica tener un plan alternativo. Los dispositivos tienen distintas fuentes instaladas y una fuente descargada puede llegar después del texto. Una lista de fuentes alternativas mantiene la página legible y conserva un estilo adecuado.
Crea una lista de fuentes
body {
font-family: "Helvetica Neue", Arial, sans-serif;
font-size: 1rem;
}
El navegador prueba los nombres de familia en orden y usa una fuente disponible. Pon comillas a los nombres que contienen espacios. Deja las familias genéricas sin comillas: "sans-serif" solicita una fuente con ese nombre exacto; sans-serif pide al navegador una fuente genérica adecuada.
Las opciones genéricas incluyen serif, sans-serif, monospace, cursive, fantasy y system-ui. La última usa la fuente de interfaz del sistema. Las fuentes que suelen llamarse seguras para la web, como Arial, Georgia y Verdana, son comunes, pero no están garantizadas. Aun así, debe haber una familia genérica como alternativa al final.
font-size acepta longitudes, porcentajes y palabras clave de tamaño. Con una raíz de 16px, 1rem da 16px y 2.5rem da 40px. Los tamaños relativos pueden seguir la configuración del lector.
Establece con cuidado el grosor, el estilo y la propiedad abreviada
font-weight: normal equivale a 400; bold equivale a 700. Valores como 300 y 600 solicitan otros grosores cuando la fuente los proporciona. Si falta el grosor solicitado, el navegador elige uno disponible o puede generar una negrita artificial. Si solo están cargados 400 y 700, solicitar 300 usa 400. bolder y lighter son relativos al padre.
font-style: italic solicita una variante en cursiva; normal elimina ese estilo. La propiedad abreviada font necesita tanto el tamaño como la familia:
blockquote {
font: italic 700 1.125rem/1.6 Georgia, serif;
}
El estilo, la variante y el grosor opcionales van antes del tamaño. Una barra une la altura de línea al tamaño y la familia va al final. Omitir el tamaño o la familia invalida la propiedad abreviada. Las demás configuraciones de fuente omitidas se restablecen: font: 1rem Arial, sans-serif; devuelve un grosor anterior en negrita al valor normal.
Carga un archivo de fuente
@font-face {
font-family: "Inter";
src: url("fonts/inter-regular.woff2") format("woff2");
font-weight: 400;
font-style: normal;
font-display: swap;
}
body { font-family: "Inter", Arial, sans-serif; }
@font-face asigna a un archivo un nombre de familia CSS. Usa ese nombre declarado en la lista, no el nombre del archivo. Las rutas relativas de los archivos parten de la ubicación de la hoja de estilo. WOFF2 es un formato comprimido compatible con los navegadores actuales.
Las fuentes estáticas suelen necesitar archivos y reglas independientes para cada grosor y estilo. Las fuentes variables pueden contener un intervalo de grosores en un solo archivo. Carga los archivos que el diseño realmente use. font-display: swap muestra una fuente alternativa de inmediato y la reemplaza cuando la fuente web está disponible.
Un servicio de fuentes puede proporcionar un enlace HTML y la declaración de familia; alojar la fuente en tu propio servidor evita solicitarla a un servidor de terceros. Comprueba que la licencia permita usarla en sitios web. Si la fuente no tiene el aspecto esperado, inspecciona la fuente renderizada y la solicitud del archivo. Un nombre de familia CSS mal escrito activa una alternativa sin avisar, por lo que el texto legible por sí solo no demuestra que se haya cargado la fuente deseada.
Puntos clave
- Escribe una lista de fuentes que termine con una familia genérica sin comillas.
- El grosor de la fuente depende de las variantes o los intervalos disponibles.
- La propiedad abreviada
fontexige tamaño y familia y restablece las configuraciones omitidas. @font-facedefine un nombre de familia y el archivo que la proporciona.font-display: swapmantiene visible el texto con una fuente alternativa mientras se carga una fuente web.
6.2 Interlineado, listas y estados de los enlaces
Los estilos de texto deben adaptarse a los cambios de tamaño, contenido y método de entrada. Comienza con el interlineado y anchos legibles; después añade detalles a las listas y los enlaces que indiquen a los lectores cómo funciona el contenido.
Deja que la altura de línea siga cada tamaño de fuente
Usa una altura de línea sin unidad, como line-height: 1.5. Con texto principal de 16px crea líneas de 24px. Los hijos heredan el número, por lo que un encabezado de 32px obtiene líneas de 48px. En cambio, un valor de 1.5em o 150% en el padre se calcula allí como 24px, y un hijo puede heredar esa altura de línea fija de 24px aunque su propio texto sea mayor. El valor predeterminado normal depende de la fuente y suele rondar 1,2.
body { font: 1.125rem/1.6 Georgia, serif; color: #222222; }
h1 { font: 700 2.25rem/1.2 Arial, sans-serif; }
p { max-width: 65ch; }
Con una raíz de 16px, el texto principal mide 18px con líneas de 28,8px; el encabezado mide 36px con líneas de 43,2px. El límite del párrafo evita líneas muy largas en una pantalla ancha.
text-align posiciona el contenido en línea dentro de un bloque. Sus valores incluyen left, right, center, justify, start y end; start y end siguen la dirección de escritura. No mueve el bloque en sí. La justificación en columnas estrechas puede crear espacios grandes entre palabras.
Cambia la presentación sin reescribir el texto
text-transform puede mostrar palabras en mayúsculas, minúsculas o con iniciales mayúsculas sin cambiar el texto HTML. letter-spacing, word-spacing y text-indent controlan distintos tipos de espacio. text-shadow: 1px 1px 2px rgb(0 0 0 / 0.5); indica desplazamiento horizontal, desplazamiento vertical, desenfoque y color.
text-decoration añade subrayados, líneas superiores o tachados. También puede establecer el estilo y el color, como en underline wavy crimson. El grosor y la separación del subrayado permiten ajustar la línea. Los lectores esperan que el texto subrayado sea un enlace, así que reserva esa indicación para los enlaces.
Aplica estilos a las listas sin dejar sangría accidental
list-style-type elige marcadores como disc, square, decimal o lower-alpha. list-style-position: outside mantiene los marcadores fuera del bloque de texto; inside los coloca en la primera línea, por lo que las líneas que continúan pueden comenzar debajo del marcador. list-style-image proporciona un marcador de imagen y li::marker puede colorear solo el marcador.
Para una lista de navegación sencilla, usa .menu { list-style: none; margin: 0; padding: 0; }. Eliminar solo los marcadores deja el relleno inicial predeterminado de la lista. list-style: square inside es una propiedad abreviada que combina configuraciones del marcador.
Mantén visibles los enlaces durante su uso
Ordena las reglas de estado de igual especificidad como link, visited, focus, hover, active. Un enlace puede estar visitado y tener el puntero encima a la vez; el orden en el código fuente decide entre sus declaraciones de color. :active significa durante la activación, no la página actual.
Mantén los enlaces reconocibles por algo más que el color, normalmente con un subrayado en el texto corriente. Proporciona un indicador claro del foco del teclado:
a:focus-visible {
outline: 3px solid #f2a900;
outline-offset: 2px;
}
No elimines el contorno de foco salvo que otro estilo de foco visible lo sustituya. Un contorno no ocupa espacio en el modelo de caja, por lo que esta indicación no desplaza el texto circundante.
Puntos clave
- La altura de línea sin unidad transmite un multiplicador que sigue el tamaño de fuente de cada hijo.
text-alignmueve el contenido en línea dentro de un bloque, no el bloque en sí.- La transformación de texto cambia el aspecto sin cambiar las palabras del HTML.
- Eliminar los marcadores de lista no elimina el relleno predeterminado de la lista.
- Los estados de los enlaces pueden coincidir; mantén los enlaces reconocibles y el foco del teclado visible.
- Los contornos muestran el foco sin cambiar las dimensiones de la caja.
6.3 Imágenes de fondo, escalado y capas
Un fondo se sitúa detrás del contenido de una caja. Su color rellena el contenido y el relleno y se extiende por debajo del borde; el margen permanece transparente. Una imagen se dibuja encima del color de fondo, por lo que un color puede proporcionar una superficie fiable mientras se carga la imagen.
Resuelve la ruta desde la hoja de estilo
.hero {
background-color: #1a2b3c;
background-image: url("../images/hero.jpg");
}
Si el CSS está en css/styles.css y la imagen está en la carpeta images del nivel principal del sitio, .. sale de css antes de entrar en images. Una URL de imagen en CSS parte del archivo CSS, a diferencia del enlace a la hoja de estilo, que parte del archivo HTML. Comprueba la solicitud de la imagen si una regla válida solo muestra su color alternativo.
Los fondos son decoración. Un lector de pantalla no los anuncia como imágenes. Coloca una imagen informativa en el HTML con texto alternativo significativo. Un color alternativo cercano al tono principal de la imagen también ayuda a que el texto siga siendo legible si la imagen tarda en cargar o falta.
Controla la repetición, la escala y la posición
Inicialmente, las imágenes se repiten a su tamaño natural. no-repeat usa una copia; repeat-x crea una fila y repeat-y una columna. space distribuye mosaicos completos con espacios entre ellos, mientras que round ajusta los mosaicos para que quepa un número entero.
| Tamaño | Resultado |
|---|---|
cover | Llena toda la caja, conservando las proporciones; puede haber recorte |
contain | Ajusta toda la imagen, conservando las proporciones; pueden quedar espacios |
200px 100px | Establece ambas dimensiones explícitamente |
50% auto | Establece un ancho relativo y conserva la relación de aspecto de la imagen |
Para una caja de 800px por 400px y una imagen cuadrada de 1000px, cover escala la imagen a un cuadrado de 800px, dejando 400px de altura de la imagen fuera de la caja. Contain la escala a un cuadrado de 400px; con no-repeat, quedan 400px del ancho de la caja sin cubrir. Establecer solo contain no desactiva la repetición.
La posición inicial es la parte superior izquierda. background-position: center centra una imagen; right 20px bottom 10px la desplaza desde esos bordes. El valor horizontal va primero. Center junto con cover mantiene visible el centro cuando es necesario recortar.
Genera y superpone imágenes
Un degradado es una imagen, así que colócalo en background-image:
background-image: linear-gradient(to right, #1e90ff, #8a2be2);
El primer color está a la izquierda y el segundo a la derecha. Los ángulos y las paradas con posición ofrecen más control; radial-gradient(circle, white, steelblue) se extiende desde el centro hacia fuera. Un degradado en background-color no es válido.
Separa varias imágenes con comas; la primera queda encima. Un degradado negro translúcido colocado antes de una foto puede oscurecer la imagen sin hacer transparente el texto.
Usa la propiedad abreviada de forma deliberada
background: url("hero.jpg") center / cover no-repeat #1a2b3c; combina una imagen, posición, tamaño, repetición y color. El tamaño sigue a la posición después de una barra. Solo la última capa puede tener un color. Las configuraciones de fondo omitidas se restablecen, por lo que un background: white; posterior elimina una imagen anterior.
background-attachment usa inicialmente scroll, que se mueve con el elemento al desplazarse la página. fixed mantiene el fondo unido al área de visualización. Prueba la caja y el texto reales después de añadir decoración; el escalado y el recorte no deben ocultar información que los lectores necesitan.
Puntos clave
- Las rutas de imágenes en CSS se resuelven desde la ubicación de la hoja de estilo.
coverllena la caja y puede recortar;containajusta toda la imagen y puede dejar espacios.- Las imágenes de fondo se repiten salvo que se cambie la repetición.
- Los degradados son imágenes y la primera imagen de fondo se dibuja encima.
- La propiedad abreviada de fondo usa una barra entre la posición y el tamaño y restablece las configuraciones omitidas.
- Coloca las imágenes informativas en el HTML; los fondos sirven como decoración.
6.4 Bordes, esquinas redondeadas, contornos y sombras
Un borde forma parte del modelo de caja. Un contorno o una sombra se dibuja alrededor de la caja sin reservar espacio adicional. Elegir entre ellos cambia tanto el aspecto como el comportamiento de dimensionamiento de un estilo.
Da un estilo al borde
.note {
border: 1px solid #cccccc;
border-left: 4px solid crimson;
padding-left: 12px;
}
La propiedad abreviada establece ancho, estilo y color; estas partes pueden aparecer en cualquier orden. El estilo de borde inicial es none, por lo que establecer solo el ancho y el color no produce un borde visible. Entre los estilos están solid, dashed, dotted, double, groove, ridge, inset y outset, así como none y hidden.
Si se omite el ancho, se usa medium, que suele ser 3px en los navegadores actuales. Si se omite el color, se usa currentColor, que coincide con el texto del elemento. Las propiedades abreviadas para un lado, como border-top, y las propiedades individuales, como border-left-color, permiten añadir una excepción después de un borde general. Por ejemplo, border-top: none elimina solo el borde superior después de una declaración para los cuatro lados.
Con el cálculo content-box, un borde de 2px en cada lado añade 4px al ancho y a la altura. Por eso, aumentar el ancho del borde al pasar el puntero puede desplazar el contenido cercano. Mantén estable el ancho del borde y cambia su color, o usa un contorno como indicación que no ocupa espacio. Con el cálculo border-box, un borde más grueso ocupa más espacio dentro de la caja declarada.
Redondea las esquinas en un orden predecible
border-radius: 8px redondea todas las esquinas incluso cuando el borde es invisible. Con cuatro valores, el orden es superior izquierda, superior derecha, inferior derecha, inferior izquierda. Dos valores se aplican a pares de esquinas opuestas: el primero a superior izquierda e inferior derecha, y el segundo a superior derecha e inferior izquierda.
border-radius: 50% hace circular una caja cuadrada y elíptica una rectangular. Su propio fondo se recorta hasta ese borde redondeado. El radio por sí solo no recorta el contenido hijo que se desborda; esa es una decisión independiente de desbordamiento. El radio no se suma a las dimensiones medidas de la caja.
Añade una línea de foco o profundidad
.link:focus-visible {
outline: 3px solid navy;
outline-offset: 2px;
}
Un contorno se dibuja fuera del borde y no ocupa espacio en la disposición. Su separación crea un espacio respecto al borde. Es una indicación útil del foco porque puede aparecer sin mover las cajas vecinas.
box-shadow: 0 2px 6px rgb(0 0 0 / 0.2); proporciona un desplazamiento horizontal de cero, un desplazamiento de 2px hacia abajo, un desenfoque de 6px y un color negro translúcido. Un valor opcional de extensión va después del desenfoque. inset dibuja la sombra por dentro; los valores separados por comas añaden varias sombras. Las sombras siguen las esquinas redondeadas y no añaden espacio al modelo de caja.
Comprueba una tarjeta terminada
Una tarjeta con width: 280px; padding: 16px; border: 1px solid #dddddd; mide 314px de ancho con el cálculo content-box. Suma a 280px dos veces 16px y dos veces 1px. Con el cálculo border-box sigue midiendo 280px y deja 246px para el contenido. Un radio de esquina de 12px y una sombra suave no cambian ninguno de los dos cálculos. Cambian el borde dibujado, no las dimensiones usadas para colocar otras cajas.
Puntos clave
- Un borde visible necesita un estilo como
solid. - Los bordes intervienen en el cálculo del tamaño de la caja; los contornos y las sombras no reservan espacio adicional en la disposición.
- Los radios de las esquinas siguen el sentido de las agujas del reloj desde la esquina superior izquierda; las formas más cortas emparejan esquinas.
- Un radio del 50 % hace circular un cuadrado y elíptico un rectángulo.
- Una sombra de caja enumera los desplazamientos horizontal y vertical, después el desenfoque y la extensión opcionales y, por último, el color.
Ejemplos de Hojas de estilo CSS
1Haz que una hoja de estilo funcione e inspecciónala
10 pasos
- 1IntroducciónDel HTML con significado a una página con estilos
Un encabezado y un párrafo ya tienen estilos proporcionados por el navegador. Les darás una fuente y un color elegidos y después seguirás el resultado hasta el CSS.
La primera tarea es establecer una vinculación fiable entre archivos. Después, una regla debe coincidir con el elemento, contener una declaración válida y prevalecer para la propiedad correspondiente. Trátalas como comprobaciones separadas cuando la página no cambie.
- 2EjemploVincula un archivo externo
Supón que
index.htmlestá junto a una carpeta llamadacss, que contienestyles.css. Añade esto dentro delheaddel HTML:<link rel="stylesheet" href="css/styles.css">La ruta parte del archivo HTML y entra en la carpeta CSS. Guardar reglas en ese archivo externo permite que otras páginas se vinculen al mismo diseño. Una ruta mal escrita puede dejar el HTML legible mientras ninguno de estos estilos del autor se carga.
- 3ExplicaciónEscribe e interpreta una regla
Pon esto en la hoja de estilo vinculada:
p { color: navy; font-size: 18px; }pselecciona los párrafos. Las llaves contienen dos declaraciones, cada una de las cuales relaciona una propiedad con un valor. Los puntos y coma separan las declaraciones. Recarga la página: un párrafo que coincida recibe texto azul marino y un tamaño de fuente de 18px, salvo que una declaración de mayor prioridad cambie una de esas propiedades. - 4DesafíoCorrige un valor no válido
Una regla dice
p { font-size: 18 px; color: teal; }. Predice el efecto y corrige la declaración del tamaño.---reveal---
El color verde azulado puede aplicarse, pero la declaración del tamaño no es válida porque el número y la unidad de una longitud deben ir juntos. Cámbiala a
font-size: 18px;. El navegador omite la declaración no válida, no todo el bloque, por lo que un color que funciona no demuestra que se haya aceptado el valor del tamaño. - 5Idea claveObserva qué elimina una propiedad abreviada
Estas declaraciones no conservan la foto:
background-image: url("sky.jpg"); background: lightblue;La propiedad abreviada restablece las propiedades de fondo que omite, incluida la imagen. Escribe primero una propiedad abreviada general y después la excepción individual cuando ambas deban conservarse. Esto explica un cambio que parece válido pero desaparece incluso cuando la ruta y el selector son correctos.
- 6ConexiónConserva los valores predeterminados útiles del navegador
Los encabezados grandes, los espacios entre párrafos y los marcadores de lista ya están presentes gracias a la hoja de estilo del agente de usuario. Tus reglas modifican ese punto de partida.
body { margin: 0; }elimina un espacio predeterminado concreto. Restablecer todos los márgenes y rellenos también elimina el espaciado útil de los párrafos y la sangría de las listas. Elige el nivel de encabezado HTML por su significado y después cambia su tamaño de fuente; elegir un nivel de encabezado menor solo por su aspecto cambia la estructura del documento. - 7ConsejoInspecciona una propiedad antes de adivinar
Haz clic derecho en el párrafo y elige Inspeccionar. Busca su regla en Estilos. Una regla ausente indica un posible problema de coincidencia o de carga; una advertencia indica posible CSS no válido; una declaración tachada ha perdido en la cascada.
El panel de estilos calculados muestra los valores resultantes y el diagrama de caja. Prueba allí un cambio y después guárdalo en tu hoja de estilo. Una edición de inspección por sí sola es temporal y desaparece cuando el navegador recarga los archivos guardados.
- 8DesafíoExplica un espacio que permanece en una lista
Una lista de navegación tiene
list-style: none, pero sus elementos siguen teniendo sangría. La regla es válida y no está tachada. ¿Qué debes inspeccionar y cambiar?---reveal---
Inspecciona el relleno de la lista. Eliminar los marcadores no elimina su relleno inicial predeterminado. Restablece ese relleno, normalmente con
padding: 0, para eliminar la sangría; después añade el espaciado deseado si el diseño lo necesita. La configuración del marcador y el espaciado de la caja son propiedades distintas. - 9DesafíoSigue el cambio que ha fallado
Una página sigue mostrando el estilo predeterminado de los párrafos. El panel Red informa de una solicitud fallida de
styles.css, mientras que el archivo real escss/styles.css. ¿Qué debes corregir primero y cómo debes comprobar el resultado?---reveal---
Corrige el enlace a la hoja de estilo en el HTML para que apunte a
css/styles.css. Recarga, confirma que la solicitud se complete correctamente y después inspecciona el párrafo para encontrar la regla que coincide con él. Aumentar la especificidad del selector no puede ayudar mientras no se cargue la hoja de estilo que lo contiene. - 10RepasoUna ruta fiable de depuración
Comienza con una declaración de tipo de documento HTML válida y una hoja de estilo correctamente vinculada. Una regla necesita después un selector que coincida y valores de propiedad válidos. Las propiedades abreviadas pueden restablecer propiedades individuales anteriores incluso cuando todas las declaraciones son válidas.
Usa Red para comprobar la carga, Estilos para la coincidencia y la prioridad, y el panel de estilos calculados para las dimensiones finales. Guarda los cambios que funcionen en el archivo CSS para que se conserven al recargar. Los valores predeterminados del navegador siguen formando parte de la explicación siempre que tus reglas no modifiquen una propiedad.
2Interpreta selectores en el árbol HTML
12 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónDescribe la coincidencia deseada
- 2EjemploReutiliza una clase en varios elementos
- 3DesafíoUn espacio cambia el elemento seleccionado
- 4ConsejoComparte reglas sin exigir anidamiento
- 5ExplicaciónSelecciona atributos y estados actuales
- 6EjemploCuenta hermanos, no solo párrafos
- 7DesafíoSelecciona un marcador sin reemplazar el texto
- 8ExplicaciónEncuentra hijos directos en una lista anidada
- 9EjemploSigue las dos relaciones entre hermanos
- 10DesafíoTen presente el mismo padre
- 11DesafíoCombina ubicación y estado
- 12RepasoLee el selector como una prueba de coincidencia
3Sigue un conflicto desde la prioridad hasta la herencia
13 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónUn elemento puede tener varias declaraciones que prevalecen
- 2ExplicaciónFiltra antes de comparar
- 3EjemploResuelve un color en línea
- 4Idea claveUsa capas antes que selectores más fuertes
- 5DesafíoNombra la etapa decisiva
- 6EjemploCuenta las partes del selector por columna
- 7ExplicaciónInterpreta los selectores funcionales
- 8DesafíoCompara sin sumar las columnas
- 9ConexiónDeja que el texto se herede y las cajas permanezcan separadas
- 10ExplicaciónElige el restablecimiento deseado
- 11DesafíoDistingue un hijo del selector de su padre
- 12DesafíoSigue la decisión completa
- 13RepasoDa a cada decisión su propia función
4Elige un color y calcula un tamaño relativo
10 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónIdentifica la referencia del valor
- 2EjemploDescodifica tres canales de color
- 3Idea claveMantén el texto opaco sobre un fondo translúcido
- 4DesafíoComprueba el umbral adecuado
- 5EjemploCalcula el tamaño del texto antes que su espaciado
- 6ConexiónEvita el crecimiento repetido en texto anidado
- 7ExplicaciónDa a los porcentajes la referencia correcta
- 8DesafíoAplica dos referencias distintas
- 9DesafíoRelaciona el tamaño de fuente con el contraste
- 10RepasoElige qué debe seguir el valor
5Mide una tarjeta y explica sus espacios
11 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónComienza en el contenido y avanza hacia fuera
- 2ExplicaciónNombra las cuatro capas
- 3EjemploCalcula una tarjeta content-box
- 4EjemploCambia lo que incluye el ancho
- 5DesafíoCorrige un desbordamiento de ancho completo
- 6ConexiónHaz que un enlace acepte dimensiones
- 7EjemploReparte el espacio horizontal restante
- 8Idea claveCombina márgenes verticales
- 9DesafíoPredice un espacio con signos distintos
- 10DesafíoVuelve a calcular la tarjeta centrada
- 11RepasoMide la capa que causa el problema
6Crea texto legible y una tarjeta terminada
15 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónDa una finalidad a cada elección visual
- 2ExplicaciónElige una lista de fuentes fiable
- 3EjemploCarga una variante y mantén visible el texto
- 4DesafíoDetecta un restablecimiento de la propiedad abreviada de fuente
- 5EjemploMantén proporcional el interlineado
- 6ConsejoMantén comprensibles los menús y enlaces
- 7DesafíoDistingue el bloque de su contenido
- 8EjemploSigue una ruta de fondo
- 9EjemploEscala una foto cuadrada en una caja ancha
- 10Idea claveSuperpone un tinte a una foto
- 11DesafíoMantén visible la fotografía completa
- 12ExplicaciónDibuja un borde sin mover sus vecinos
- 13DesafíoRedondea la caja y conserva la medida
- 14DesafíoTermina una tarjeta interactiva estable
- 15RepasoRelaciona la decoración con las reglas subyacentes
Ejercicios de Hojas de estilo CSS
Set 1: Aplica selectores, espaciado y decoración10 Preguntas de Práctica
Pregunta 1 de 10
/site/pages/team.html; la hoja de estilo es /site/css/theme.css. ¿Qué href relativo alcanza la hoja de estilo?Mostrar respuestaOcultar respuesta
pages, por lo que .. sube primero a /site y después css/theme.css entra en la carpeta correcta. Usar solo css/theme.css buscaría una carpeta CSS dentro de pages. El enlace relativo se resuelve desde el archivo HTML, no desde la raíz del sitio de forma predeterminada.Pregunta 2 de 10
section contiene un h3, un p, un aside y después otro p. ¿Qué selecciona h3 ~ p dentro de esa sección?Mostrar respuestaOcultar respuesta
~ alcanza los hermanos posteriores que coinciden y comparten el padre del encabezado, aunque haya otro elemento entre ellos. Ambos párrafos cumplen esa condición. Seleccionar solo el párrafo inmediatamente posterior aplicaría la relación más estricta de +, que no describe el selector de esta pregunta.Pregunta 3 de 10
#article { color: olive; } y su párrafo hijo coincide con p { color: purple; }. ¿Qué color usa el párrafo?Mostrar respuestaOcultar respuesta
Pregunta 4 de 10
style="color: coral;" y coincide con .notice { color: indigo !important; } en el CSS del autor. ¿Qué color se usa?Mostrar respuestaOcultar respuesta
Pregunta 5 de 10
font-size: 1.5em; padding: 0.5em;. ¿Cuánto relleno se establece en cada lado?Mostrar respuestaOcultar respuesta
1.5em usa los 18px del padre. Después, el relleno usa el tamaño de fuente del propio hijo, por lo que la mitad de 27px es 13,5px. Un resultado de 9px seguiría usando el tamaño de fuente del padre para el relleno después de que haya cambiado el tamaño del texto del hijo.Pregunta 6 de 10
width: 180px no afecta a su tamaño. ¿Qué valor de display lo mantiene a nivel de línea y permite ese ancho?Mostrar respuestaOcultar respuesta
inline-block mantiene el enlace en la línea y permite establecer explícitamente el ancho y la altura. El comportamiento en línea ordinario ignora esas dimensiones para un enlace de texto. La visualización de bloque también aceptaría un ancho, pero daría al enlace un comportamiento de nivel de bloque en lugar de conservar la posición en línea solicitada.Pregunta 7 de 10
width: 260px; padding: 18px; border: 2px solid;. ¿Cuánto mide de ancho su área de contenido?Mostrar respuestaOcultar respuesta
Pregunta 8 de 10
background-color: linear-gradient(white, navy);. ¿Por qué no se muestra el degradado?Mostrar respuestaOcultar respuesta
background-image o en la propiedad abreviada background. Una propiedad que solo acepta colores no puede admitirlo y la declaración se ignora. Los colores con nombre son paradas válidas de un degradado; cambiar esos nombres a hexadecimal no corregiría la incompatibilidad con la propiedad.Pregunta 9 de 10
border-width: 4px; border-color: teal; y ninguna otra declaración de borde. ¿Por qué no se ve ningún borde?Mostrar respuestaOcultar respuesta
border-style es none. Establecer border-style: solid proporcionaría la parte que falta. Cambiar el cálculo de la caja afecta a cómo interviene un borde en las dimensiones, pero no convierte un estilo de borde invisible en uno visible.Pregunta 10 de 10
@layer base, widgets;. Base contiene #info { color: teal; }; widgets contiene .card { color: maroon; }. Una regla sin capa p { color: navy; } también coincide con <p id="info" class="card">. ¿Qué color prevalece?Mostrar respuestaOcultar respuesta
Set 2: Interpreta reglas y predice resultados sencillos10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
color: 18px; padding: 12px;. ¿Qué ocurre con estas declaraciones?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
class="panel featured". ¿Qué selector exige ambas palabras de clase en ese mismo elemento?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
h2 y después dos elementos p. ¿Qué selecciona article p:first-child?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
.badge { color: teal; } seguida de .badge { color: maroon; }. ¿Qué color prevalece?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
.panel > a:hover?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
#4bd?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
width: 240px; padding: 12px; border: 3px solid; margin: 8px;. ¿Cuál es el ancho de su caja hasta el borde?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
section tiene font-size: 20px; line-height: 1.4;. Su hijo h2 tiene font-size: 1.5em y ninguna declaración de altura de línea. ¿Cuáles son el tamaño de fuente y la altura de línea del encabezado?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 3: Sigue los valores en estructuras de páginas reales10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
.alert.urgent no coincide con <p class="alert"><span class="urgent">Update</span></p>. ¿Qué selector selecciona el span urgent solo cuando está dentro de un elemento alert?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
href="manual.PDF". ¿Qué selector coincide con una terminación PDF sin distinguir entre mayúsculas y minúsculas?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
div class="tools" contiene un ul directo con el enlace A dentro de un li, además de una section que contiene otro ul con el enlace B. Ambos enlaces tienen el puntero encima. ¿Con qué coincide .tools > ul a:hover?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
#menu a y .menu a.selected. Ambas coinciden con un enlace. ¿Qué selector tiene mayor especificidad?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
div { display: initial; }. ¿Qué valor de display recibe el div de esa declaración?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
background-color: rgb(0 0 0 / 0.5); color: white; sobre una foto. Una persona sustituye el fondo con alfa por negro opaco y añade opacity: 0.5 a la leyenda. ¿Qué cambia?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
padding-top: 10% en su hijo?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
background-size: contain; background-position: center;?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 4: Resuelve estilos que compiten y cajas cambiantes10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
h2, p..lead, blockquote { color: teal; } no cambia ninguno de estos elementos. ¿Qué explica el resultado?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
section contiene <h2>News</h2><aside><p>A</p></aside><p>B</p><p>C</p>. ¿Qué texto seleccionan h2 + p y h2 ~ p, respectivamente?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
@layer foundations, details;. Foundations contiene .flag { color: teal !important; }; details contiene #notice { color: purple !important; }; una regla sin capa contiene p { color: navy !important; }. Todas coinciden con un párrafo. ¿Qué color prevalece?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
width: 100%; padding: 0 15px; en un área de contenido de 480px de ancho, sin bordes ni márgenes. ¿Cuánto mide de ancho su caja hasta el borde?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
width: 320px; padding: 18px; border: 2px solid; con cálculo content-box. Debe seguir midiendo 360px de ancho después de cambiar a border-box y aumentar el relleno a 24px. ¿Qué ancho declarado y ancho de contenido resultan?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
font-weight: 700; font-style: italic; y después font: 1.25rem/1.4 Arial, sans-serif;. ¿Qué grosor y estilo se aplican después de la propiedad abreviada?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
list-style: none;, pero sus elementos siguen teniendo sangría. ¿Qué regla adicional elimina la sangría predeterminada?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 5: Diagnostica y explica combinaciones desconocidas10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
width: 160px es válido y no está tachado, pero el span sigue teniendo solo el ancho de su texto. ¿Qué lo explica?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
li:nth-child(3n+2)?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
<section id="main"> coincide con :where(#main) a { color: teal; }, :is(#spare, section) a { color: purple; } y después .chosen:hover { color: navy; }. Tiene la clase chosen y el puntero está sobre él. ¿Qué color prevalece?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
color: maroon; background-color: beige;. Su hijo tiene color: unset; background-color: unset; y ningún otro estilo pertinente. ¿Cuáles son los valores propios de color y fondo del hijo?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
width: calc(100% - 4rem); padding: 1em; border: 2px solid; font-size: 1.5rem;. ¿Cuál es el ancho del contenido del hijo?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
width: 320px; margin: 0 auto; text-align: center;. ¿Qué márgenes horizontales y alineación de texto resultan?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
@font-face { font-family: "Lumen Sans"; src: url("fonts/lumen-regular.woff2") format("woff2"); }. ¿Qué nombre debe usar una lista de fuentes para solicitar esta variante?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
a:hover { color: teal; } y después a:visited { color: purple; }. Un enlace visitado tiene el puntero encima. ¿Qué cambio hace que su color sea verde azulado al pasar el puntero y conserve el morado de visitado cuando no tiene el puntero encima?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
/site/index.html vincula /site/css/main.css. Ese CSS usa background-image: url("images/banner.jpg");, pero la imagen está en /site/images/banner.jpg. Una regla posterior también establece background: navy;. ¿Qué corrección mantiene el azul marino detrás de la imagen?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
border-radius: 50%. ¿Qué forma redondeada adquiere su fondo?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
¿Te atascas con una pregunta tuya? Ayuda con Tareas
Términos Clave
Á
Área de contenido
A
Alineación del texto
Altura de línea
B
Borde
C
Caja de bloque
Caja de bloque en línea
Caja en línea
width: 200px mientras siga siendo en línea.Cálculo del tamaño de la caja
Canal alfa
Capa de cascada
Capa de fondo
Cascada
Colapso de márgenes
Color actual
currentColor representa el color de texto del propio elemento cuando otra propiedad que acepta color necesita un valor coincidente.currentColor cambia con el color del texto cuando una regla hover actualiza solo color.Color hexadecimal
#3ac se obtiene #33aacc porque cada dígito se convierte en un par repetido para su propio canal.Color HSL
Color RGB
rgb().rgb(30 144 255) da las mismas cantidades de canal que el valor hexadecimal de seis dígitos #1e90ff.Combinador de hermano adyacente
+, selecciona un elemento que coincide inmediatamente después de otro cuando ambos comparten el mismo padre.h2 + p alcanza un párrafo inicial, pero deja de coincidir cuando aparece un aside entre ambos.Combinador de hermanos posteriores
~, selecciona los hermanos posteriores de un elemento que coinciden y permite que haya otros hermanos entre ellos.h2 ~ p puede alcanzar dos párrafos separados por un aside cuando todos comparten el padre del encabezado.Contenido generado
::after necesita un valor de content; las instrucciones esenciales permanecen en el HTML.Contorno
CSS
D
Declaración
color: navy;, la declaración establece el color del texto y el punto y coma la separa de la siguiente configuración.Declaración importante
!important, lo que le da prioridad sobre las declaraciones normales del mismo origen.p.Decoración del texto
Degradado
Desbordamiento
overflow: auto puede desplazar su línea larga sin ensanchar toda la página.Descendiente
nav a alcanza un enlace de navegación incluso cuando hay una lista y un elemento de lista entre él y nav.E
Especificidad
Estado de foco visible
a:focus-visible antes de activarlo.Estado del enlace
F
Familia de fuentes genérica
sans-serif entre comillas lo convierte en un nombre de fuente literal y elimina su función como alternativa genérica de la lista.Fuente variable
Fuente web
Función calc()
calc() combina valores CSS compatibles en una expresión y permite que una longitud mezcle cantidades relativas y absolutas.calc(100% - 40px) resta una cantidad fija de un ancho relativo al contenedor, con espacios alrededor del signo menos.H
Herencia
Hermano
Hijo
.menu > li excluye los elementos cuyo padre es una lista anidada independiente dentro del menú.Hoja de estilo
css/styles.css permite que una página cargue sus estilos desde el archivo de la carpeta vecina.Hoja de estilo del agente de usuario
I
Imagen de fondo
L
Lista de fuentes alternativas
sans-serif sin comillas sigue proporcionando una fuente adecuada en un dispositivo que no tiene las fuentes con nombre.Lista de selectores
h1, h2, h3 puede dar una familia de fuentes a los tres niveles de encabezado sin exigir anidamiento.M
Marcador de lista
::marker.Margen
Margen automático
Modo de estándares
<!DOCTYPE html> al principio evita el comportamiento antiguo que puede afectar a una página en modo de compatibilidad.O
Orden en el código fuente
Origen del estilo
P
Palabra clave inherit
inherit da explícitamente a una propiedad el valor calculado de su padre, incluso cuando esa propiedad normalmente no se hereda.font: inherit en los controles puede reemplazar la fuente asignada por el navegador por la fuente del texto circundante.Palabra clave initial
initial selecciona el valor inicial de una propiedad según la especificación de CSS, independientemente de la regla predeterminada del elemento HTML.display: initial a un div da una visualización en línea aunque el navegador normalmente lo convierte en bloque.Palabra clave revert
revert revierte una propiedad más allá del origen de estilo actual y deja disponible un valor aplicable de un origen inferior.display: revert puede restaurar la visualización de bloque normal asignada por el navegador a un div.Palabra clave revert-layer
revert-layer revierte el valor de una propiedad más allá de la capa de cascada actual para que pueda proporcionarlo una fuente de menor prioridad.Palabra clave unset
unset sigue la herencia normal para una propiedad heredada y usa el valor inicial para una propiedad no heredada.unset en color puede conservar el color de texto de un padre, mientras que usarlo en margin elimina un margen local.Panel Estilos
Píxel CSS
Porcentaje
Posición de la imagen de fondo
Propiedad abreviada
background: white; puede eliminar una foto asignada previamente mediante background-image.Pseudoclase
:checked puede seleccionar una casilla de verificación cuyo estado marcado actual no está representado por una clase.Pseudoclase estructural
p:first-child.Pseudoelemento
li::marker puede colorear las viñetas de la lista y dejar el texto del elemento con su color actual.R
Radio de las esquinas
Regla @font-face
@font-face asigna un nombre de familia CSS y características de variante a un recurso de fuente que se puede usar en una lista de fuentes alternativas.Relación de contraste
Relleno
Restablecimiento de estilos
S
Selector compuesto
p.note alcanza un párrafo con la clase note, mientras que p .note busca un descendiente.Selector de atributo
a[href$=".pdf" i] puede aplicar estilos a enlaces de documentos incluso cuando la terminación del archivo está en mayúsculas.Selector de clase
.notice coincide tanto con una nota sencilla como con un elemento que tiene class="card notice".Selector de especificidad cero
:where() también elimina el peso de sus argumentos.:where(#main) p sigue siendo fácil de reemplazar porque solo el párrafo aporta un punto de tipo.Selector de ID
#site-header puede ser más difícil de reemplazar después que uno que usa una clase reutilizable de encabezado.Selector de tipo
p puede establecer el espaciado de los párrafos en toda la página sin asignar una clase a cada uno.Selector universal
*, coincide con todos los elementos pero aporta especificidad cero, lo que lo hace útil en valores predeterminados generales y restablecimientos.* puede restablecer los márgenes, mientras que un selector de clase puede proporcionar después espaciado con mayor especificidad.Separación del contorno
Sombra de caja
T
Tamaño de la imagen de fondo
Terna ID-CLASE-TIPO
a[href]:hover tiene la terna 0-2-1, con el atributo y hover contados en CLASE.Transformación de mayúsculas y minúsculas
U
Unidad ch
ch es una longitud relativa a la fuente basada en el ancho de avance del carácter cero, que suele usarse para limitar el ancho de las columnas de texto.max-width: 65ch sigue el tamaño de la fuente sin garantizar exactamente 65 letras por línea.Unidad em
em es una longitud relativa a la fuente que usa el tamaño de fuente del padre para font-size y el del propio elemento en otras propiedades.2em pasa a 40px en lugar de volver a seguir al padre.Unidad relativa al área de visualización
vw usa el ancho y vh la altura como referencia.10vh equivale a 80px cuando la altura del área de visualización es de 800 píxeles CSS, incluso dentro de un contenedor más bajo.Unidad rem
rem es una longitud relativa al tamaño de fuente del elemento raíz que proporciona una referencia compartida entre los elementos anidados de la página.1.25rem mantienen el mismo tamaño de texto cuando comparten un tamaño raíz sin cambios.V
Valor calculado
em se convierte en píxeles, mientras que un porcentaje de ancho depende de la disposición.Sobre esta unidad
Crea tus propios Materiales de Estudio
Convierte tus notas, diapositivas y documentos en Guías de Estudio, Preguntas de Práctica, Flashcards y 6 herramientas más.