CSS sirve para definir el aspecto y el diseño de las páginas web. Con las hojas de estilo en cascada separas el diseño del contenido y consigues una es­tru­c­tu­ra clara y flexible. En este tutorial de CSS de­s­cu­bri­rás qué es CSS, apre­n­de­rás los conceptos básicos y cómo usarlo para controlar de forma precisa el diseño, los colores y la ti­po­gra­fía de tu página web.

La se­pa­ra­ción de contenido y pre­se­n­ta­ción

En co­m­bi­na­ción con HTML, CSS permite separar el contenido de la pre­se­n­ta­ción.

El lenguaje de marcado de hi­pe­r­te­x­to (HTML) se utiliza para en­ri­que­cer do­cu­me­n­tos de texto con in­fo­r­ma­ción que permite una es­tru­c­tu­ra­ción semántica de los elementos. De este modo, el lenguaje de marcado crea la base de cualquier página web: el código HTML. Este define de qué elementos HTML se compone un documento (por ejemplo, <body>, <header>, <footer>) y cómo deben in­te­r­pre­tar­se los co­n­te­ni­dos (por ejemplo, un en­ca­be­za­do <h1> o un párrafo <p>).

En sus inicios, HTML también incluía in­s­tru­c­cio­nes básicas de diseño. Sin embargo, estas se co­n­si­de­ran obsoletas desde HTML5 y hoy en día no deberían uti­li­zar­se. En su lugar, se recurre al lenguaje de hojas de estilo CSS (Cascading Style Sheets) para gestionar de forma in­de­pe­n­die­n­te los aspectos visuales.

Crear una página web
Estás de suerte, tu página web ahora con IA
  • Creador de páginas web rápido e intuitivo
  • Imágenes y textos in­s­ta­n­tá­neos con SEO op­ti­mi­za­do por IA
  • Dominio, SSL y buzón de correo ele­c­tró­ni­co incluidos

¿Qué es CSS?

Al igual que HTML, CSS se escribe en formato de texto. Puede in­te­grar­se di­re­c­ta­me­n­te en el documento HTML, ya sea en línea (inline) para cada elemento o de manera global en la cabecera del archivo. No obstante, lo habitual es que los di­se­ña­do­res web utilicen archivos CSS in­de­pe­n­die­n­tes para dar formato a las páginas web. De este modo se obtiene un código fuente claro y ordenado, en el que se evitan in­s­tru­c­cio­nes de diseño re­du­n­da­n­tes gracias a las re­fe­re­n­cias a hojas de estilo externas. Cuantas menos re­pe­ti­cio­nes haya, más limpio y eficiente será el código fuente.

Si es necesario realizar cambios en el diseño, basta con mo­di­fi­car­los en los archivos CSS centrales. Así no hace falta revisar y adaptar cada documento HTML por separado, lo que facilita el ma­n­te­ni­mie­n­to y hace el código más fácil de ac­tua­li­zar. Como estándar vivo, CSS es de­sa­rro­lla­do y ac­tua­li­za­do de manera continua por el World Wide Web Co­n­so­r­tium (W3C).

Es­tru­c­tu­ra básica: la sintaxis de CSS

La función principal de CSS es definir el diseño de una página web. Para ello, a los elementos HTML su­b­ya­ce­n­tes se les asignan pro­pie­da­des con de­te­r­mi­na­dos valores mediante el lenguaje de hojas de estilo. La es­tru­c­tu­ra básica de una regla de estilo sigue el siguiente esquema:

Selector { declaración }
css

El selector indica a qué elementos HTML se aplica la regla. Entre llaves se define un bloque de de­cla­ra­cio­nes: una o varias de­cla­ra­cio­nes, cada una formada por una propiedad y un valor, y terminada con punto y coma. Siguiendo este esquema, por ejemplo, se puede asignar un color de texto como el rojo a un en­ca­be­za­do:

h2 { color: red; }
css

Los di­se­ña­do­res web pueden asignar una sola propiedad a un selector o definir conjuntos de reglas más amplios que incluyan in­s­tru­c­cio­nes de diseño de­ta­lla­das. Para mejorar la le­gi­bi­li­dad, se ha es­ta­ble­ci­do una forma de escritura en la que todas las pro­pie­da­des de un conjunto de reglas se colocan en líneas separadas:

Selector {
propiedad1: valor;
propiedad2: valor;
propiedad3: valor;
}
css

En la práctica, un conjunto de pro­pie­da­des de este tipo podría tener el siguiente aspecto:

h2 {
color: #ff0000;
font-family: Helvetica, sans-serif;
font-size: 19px;
font-weight: bold;
text-align: center;
}
css

Además, un conjunto de reglas puede incluir varios se­le­c­to­res. En ese caso, se escriben separados por comas antes de la de­cla­ra­ción:

Selector1, Selector2 { declaración }
css

Se­le­c­to­res CSS

CSS admite diversos se­le­c­to­res, que permiten asignar reglas de estilo de forma pe­r­so­na­li­za­da. Para empezar, basta con fa­mi­lia­ri­zar­se con los se­le­c­to­res de tipo, de clase, de ID y el selector universal. Ten en cuenta que CSS distingue entre ma­yú­s­cu­las y mi­nú­s­cu­las.

Tipo de selector Sintaxis CSS De­s­cri­p­ción Es­pe­ci­fi­ci­dad
Selector de tipo Elemento HTML (p. ej., h2) Un selector de tipo co­rre­s­po­n­de al nombre del elemento al que hace re­fe­re­n­cia. Los estilos se aplican a todos los elementos HTML del mismo tipo. 1
Selector de clase .ejemplo Un selector de clase se aplica a todos los elementos que pe­r­te­ne­cen a una clase de­te­r­mi­na­da. Los se­le­c­to­res de clase se definen con un punto (.) seguido del nombre de la clase: .ejemplo. Las clases se asignan a los elementos HTML mediante el atributo class (class="ejemplo"). 10
Selector de ID #ejemplo Un selector de ID se aplica a un único elemento con un ide­n­ti­fi­ca­dor exclusivo. Se integra en el código HTML mediante el atributo id (id="ejemplo"). 100
Selector universal * El selector universal, re­pre­se­n­ta­do por un asterisco (*), se aplica a todos los elementos HTML de un documento. 0
Nota

Cuando varias reglas afectan a un mismo elemento, la es­pe­ci­fi­ci­dad del selector determina cuál se aplica. Cada tipo de selector tiene un valor concreto que se utiliza para calcular dicha es­pe­ci­fi­ci­dad.

Selector de tipo

El uso de los distintos se­le­c­to­res CSS se entiende mejor a través de ejemplos. El siguiente código muestra el selector de tipo h2 con su de­cla­ra­ción:

h2 {
color: #305796;
font-family: Helvetica, sans-serif;
}
css

El formato se aplica a todos los elementos HTML del tipo h2.

Selector de clase

Como al­te­r­na­ti­va, el formato CSS puede aplicarse mediante un selector de clase. Esto permite a los di­se­ña­do­res asignar las mismas reglas de estilo a elementos HTML in­de­pe­n­die­n­te­me­n­te de su tipo.

.contenido {
color: #ff0000;
font-family: Helvetica, sans-serif;
}
css

El formato se aplica a todos los elementos HTML a los que se les haya asignado la clase .contenido. Esta asi­g­na­ción se realiza en el código HTML según el siguiente esquema:

<p class="contenido">Texto de ejemplo</p>
html
Nota

En HTML, los nombres de las clases se escriben sin el punto.

Selector de ID

Si una regla de estilo debe aplicarse úni­ca­me­n­te a un solo elemento dentro del código fuente HTML, se utiliza un selector de ID. El siguiente ejemplo muestra el formato de un área de na­ve­ga­ción:

#navegacion {
font-family: Helvetica, sans-serif;
background-color: #8ad8d4;
border: 2px solid #448278;
}
css

La asi­g­na­ción del estilo se realiza en el código HTML sin el símbolo de al­moha­di­lla:

<div id="navegacion">
<ul>
<li><a href="index.htm">Inicio</a></li>
<li><a href="impressum.htm">Aviso legal</a></li>
</ul>
</div>
html

La ventaja de los se­le­c­to­res de ID es que permiten ide­n­ti­fi­car de un vistazo qué partes del código co­rre­s­po­n­den a secciones únicas dentro de la página web.

Selector universal

Si una regla de estilo debe aplicarse a todos los elementos de un documento HTML, se utiliza el asterisco (*):

* {
font-family: Helvetica, sans-serif;
}
css

Todos los elementos de texto se muestran en el navegador web con la fuente Helvetica.

Integrar CSS en HTML

Para que un navegador tenga en cuenta los estilos CSS, las reglas de diseño deben vi­n­cu­lar­se con el código fuente HTML. Para ello, existen tres opciones:

  • Integrar di­re­c­ta­me­n­te las de­cla­ra­cio­nes CSS en las etiquetas HTML (estilos inline)
  • Definir CSS en la cabecera del documento HTML
  • Hacer re­fe­re­n­cia a una hoja de estilos in­de­pe­n­die­n­te

Esta última opción se considera la más re­co­me­n­da­ble: en la práctica, las hojas de estilo suelen crearse como archivos de texto externos y enlazarse po­s­te­rio­r­me­n­te, lo que facilita el ma­n­te­ni­mie­n­to y es clave para aprender CSS de forma es­tru­c­tu­ra­da.

De­cla­ra­ción CSS en etiquetas HTML

Si una de­cla­ra­ción CSS solo debe dar formato a un punto concreto del código fuente, puede incluirse di­re­c­ta­me­n­te en la etiqueta de apertura del elemento HTML co­rre­s­po­n­die­n­te mediante el atributo style. En este caso se habla de un estilo inline.

<h2 style="color: red;">Subtítulo</h2>
html

Esto tiene la ventaja de que no es necesario crear una hoja de estilos propia, el selector no es necesario y este tipo de asi­g­na­ción tiene una prioridad muy alta (valor 1000). No obstante, en cuanto se utiliza un conjunto de reglas más amplio, esta forma de formateo se vuelve poco clara y re­du­n­da­n­te.

De­fi­ni­ción de CSS en la cabecera HTML

Si una misma regla de estilo debe aplicarse varias veces dentro de un documento HTML al mismo elemento (por ejemplo, a todos los h2 de la página web), definir la de­cla­ra­ción CSS di­re­c­ta­me­n­te en la etiqueta HTML resulta in­e­fi­cie­n­te. En su lugar, es pre­fe­ri­ble definir las reglas de estilo una sola vez en la cabecera del documento HTML mediante el elemento style:

<!DOCTYPE html>
<html lang="es">
<head>
<style>
h2 {
color: #ff0000;
font-family: 'Helvetica Neue', sans-serif;
font-size: 19px;
font-weight: bold;
text-align: center;
}
</style>
</head>
<body>
<h2>Subtítulo 1</h2>
[…]
<h2>Subtítulo 2</h2>
[…]
</body>
</html>
html

El conjunto de reglas definido dentro del elemento style se aplica au­to­má­ti­ca­me­n­te a todos los elementos h2 po­s­te­rio­res. Si el elemento h2 debe uti­li­zar­se con estas mismas reglas de diseño en otras páginas web del mismo proyecto online, basta con de­fi­ni­r­las en un archivo CSS ce­n­tra­li­za­do.

Re­fe­re­n­cia a una hoja de estilos in­de­pe­n­die­n­te

Cuando las reglas de estilo se definen en una hoja de estilos separada, es necesario vi­n­cu­lar­la al documento HTML co­rre­s­po­n­die­n­te. Esto se hace mediante el elemento HTML <link>:

<link rel="stylesheet" href="ejemplo.css">
html

El elemento link incluye los atributos obli­ga­to­rios rel y href, y puede co­m­ple­me­n­tar­se op­cio­na­l­me­n­te con los atributos type y media.

Atributos del elemento link De­s­cri­p­ción
rel El atributo rel define el tipo de relación del elemento. El valor stylesheet indica que se va a enlazar una hoja de estilos.
href El atributo href hace re­fe­re­n­cia al archivo que se va a utilizar como hoja de estilos.
type El atributo opcional type describe el tipo de medio del archivo enlazado; en el caso de CSS, text/css.
media Con el atributo media se puede definir que la hoja de estilos re­fe­re­n­cia­da solo se utilice para un medio de salida concreto. Esto permite ofrecer hojas de estilo distintas según el di­s­po­si­ti­vo, por ejemplo screen o print.

In­di­ca­cio­nes de color en CSS

Como ya se ha me­n­cio­na­do en el capítulo in­tro­du­c­to­rio, las asi­g­na­cio­nes de color mediante CSS pueden definirse uti­li­za­n­do nombres de colores en inglés. Sin embargo, en la práctica este tipo de reglas se emplea con poca fre­cue­n­cia. Lo más habitual es recurrir al modelo RGB, que ofrece muchas más gra­da­cio­nes y permite a quienes gestionan páginas web realizar ajustes de color mucho más precisos. Los códigos co­rre­s­po­n­die­n­tes pueden obtenerse mediante un selector de color, como el que Google ofrece, por ejemplo, en forma de respuesta rápida.

Imagen: Selector de color en el buscador de Google
Con un selector de color puedes vi­sua­li­zar de forma práctica los valores de cada color.

En el modelo RGB, las pro­po­r­cio­nes de color se definen mediante valores decimales entre 0 y 255. Mientras que un valor de 0 indica que un color no tiene ninguna co­n­tri­bu­ción de ese color primario, un valor de 255 re­pre­se­n­ta la in­te­n­si­dad máxima.

Desde CSS3, los valores RGB pueden ampliarse con un cuarto valor, el de­no­mi­na­do canal alfa (a). Este indica la opacidad del color y se expresa con valores entre 0 y 1 (por ejemplo, 0.8). De este modo, los colores RGB se definen en CSS de la siguiente forma:

rgba(valorRojo, valorVerde, valorAzul, opacidad)
css

Así, los si­guie­n­tes valores RGBA re­pre­se­n­tan, por ejemplo, el color azul con una tra­n­s­pa­re­n­cia del 50 %:

rgba(0, 0, 255, 0.5)
css
Nota

También puedes definir valores RGB en formato he­xa­de­ci­mal. El esquema básico de un código de color he­xa­de­ci­mal consta de una al­moha­di­lla (#) seguida de seis cifras he­xa­de­ci­ma­les que re­pre­se­n­tan, en pares, cada uno de los colores del espacio RGB (rojo, verde y azul).

Las pro­pie­da­des CSS más im­po­r­ta­n­tes

CSS pone a tu di­s­po­si­ción numerosas pro­pie­da­des con las que puedes definir reglas de estilo para los elementos HTML. Cada propiedad acepta un conjunto de valores definidos en la es­pe­ci­fi­ca­ción. Para facilitar la co­m­pre­n­sión, las pro­pie­da­des CSS se agrupan por áreas de apli­ca­ción. A co­n­ti­nua­ción, nos centramos en las más im­po­r­ta­n­tes.

Ti­po­gra­fía

La ti­po­gra­fía es uno de los elementos clave del diseño de una página web. CSS ofrece múltiples opciones para dar formato a los elementos ti­po­grá­fi­cos de una página HTML.

font-family

Si quieres definir una ti­po­gra­fía (font) concreta para los textos de una página web, se utiliza la propiedad CSS font-family. Esta te permite crear una llamada pila de fuentes (font stack), es decir, una lista prio­ri­za­da de ti­po­gra­fías adecuadas. La es­tru­c­tu­ra es siempre la misma: primero se indica la fuente preferida y, a co­n­ti­nua­ción, varias al­te­r­na­ti­vas de su­s­ti­tu­ción:

.contenido {
font-family: Georgia, Garamond, serif;
}
css

En este ejemplo se define una regla de estilo en el archivo CSS. Georgia se establece como ti­po­gra­fía prio­ri­ta­ria y Garamond como al­te­r­na­ti­va. De este modo, el navegador mostrará el texto en Garamond si la fuente Georgia no está instalada en el sistema.

Consejo

Es re­co­me­n­da­ble definir una familia ti­po­grá­fi­ca genérica como mecanismo de respaldo (fallback). Se trata de un nombre genérico que actúa como comodín para un grupo de ti­po­gra­fías similares.

font-style

La propiedad CSS font-style se refiere al estilo ti­po­grá­fi­co de un texto y permite definir in­s­tru­c­cio­nes de formato re­la­cio­na­das con la in­cli­na­ción de los ca­ra­c­te­res.

Valores para la in­cli­na­ción del texto De­s­cri­p­ción
normal estilo de letra normal (valor pre­de­te­r­mi­na­do)
italic letra cursiva
oblique letra inclinada (aunque la fuente no tenga variante cursiva)

El siguiente ejemplo muestra una regla de estilo para aplicar el estilo cursiva:

.contenido-especial {
font-family: Arial;
font-style: italic;
}
css

font-variant

La propiedad CSS font-variant se utiliza para definir variantes ti­po­grá­fi­cas.

Valores para las variantes ti­po­grá­fi­cas De­s­cri­p­ción
normal variante ti­po­grá­fi­ca normal (valor pre­de­te­r­mi­na­do)
small-caps ve­r­sa­li­tas (las mi­nú­s­cu­las se muestran como ma­yú­s­cu­las de menor tamaño)
all-small-caps ve­r­sa­li­tas para ma­yú­s­cu­las y mi­nú­s­cu­las

El siguiente ejemplo define la variante ti­po­grá­fi­ca small-caps:

.contenido {
font-family: Arial;
font-variant: small-caps;
}
css

font-size

Con la propiedad CSS font-size se define el tamaño de vi­sua­li­za­ción de los elementos de texto. Este puede es­pe­ci­fi­car­se mediante valores absolutos o en relación con los elementos que lo rodean. Lo que se indica es la altura de los ca­ra­c­te­res, el llamado tamaño de fuente. Para ello, los di­se­ña­do­res web disponen de distintas sintaxis y unidades de medida.

Unidades de medida absolutas

Las unidades de medida absolutas se basan en lo­n­gi­tu­des físicas. Sin embargo, en pantalla los na­ve­ga­do­res co­n­vie­r­ten todas estas unidades a píxeles y parten de una re­so­lu­ción de 96 dpi. Por este motivo, salvo px, las unidades absolutas apenas se utilizan en diseño web y suelen tener sentido úni­ca­me­n­te en contextos de impresión.

Unidad Sintaxis CSS De­s­cri­p­ción
Píxel px La unidad px co­rre­s­po­n­de al tamaño de un elemento en píxeles. Los píxeles se re­pre­se­n­tan en pantalla en relación con la densidad de puntos (por ejemplo, dots per inch, dpi). Como re­fe­re­n­cia de escalado se aplica: 1 píxel CSS equivale a 1/96 de pulgada. El usuario puede modificar la relación entre píxeles CSS y píxeles del di­s­po­si­ti­vo mediante el zoom del navegador.
Ce­n­tí­me­tro cm Tamaño en ce­n­tí­me­tros
Milímetro mm Tamaño en mi­lí­me­tros
Pulgada in Tamaño en pulgadas (1 in = 2,54 cm)
Punto pt Tamaño en puntos (1 pt equivale a 1/72 de pulgada)
Pica pc Tamaño en picas (1 pica equivale a 12 puntos)

Además, el tamaño de fuente puede definirse mediante palabras clave absolutas:

Palabra clave De­s­cri­p­ción Ejemplo
xx-small diminuto 9 px
x-small muy pequeño 10 px
small pequeño 13 px
medium medio (tamaño pre­de­te­r­mi­na­do del navegador) 16 px
large grande 19 px
x-large muy grande 24 px
xx-large enorme 32 px

Unidades de medida relativas

Las unidades de medida relativas definen el tamaño de la fuente en función de un valor ya es­ta­ble­ci­do. Los elementos HTML heredan su tamaño de fuente del elemento padre co­rre­s­po­n­die­n­te. Como re­fe­re­n­cia para un tamaño de fuente relativo también puede uti­li­zar­se un valor técnico, como el tamaño de la pantalla del di­s­po­si­ti­vo o un valor pre­de­te­r­mi­na­do del navegador.

Unidad Sintaxis CSS De­s­cri­p­ción
Po­r­ce­n­ta­je % La unidad % indica el tamaño de la fuente como un po­r­ce­n­ta­je del tamaño heredado.
em (altura de fuente) em La unidad em también se define en relación con el elemento padre. 1em equivale al 100 % del tamaño de fuente heredado. Si no se ha definido un tamaño en el elemento padre, se utiliza el tamaño estándar del di­s­po­si­ti­vo.
Altura x ex El valor de re­fe­re­n­cia de ex es la altura de la letra minúscula x de la ti­po­gra­fía utilizada. Si la fuente no define altura x, se aplica 1ex = 0.5em.
Root-em rem La unidad rem se basa en el elemento raíz del documento (por ejemplo, el elemento HTML). 1rem equivale al 100 % del tamaño de fuente definido para dicho elemento.
Anchura del viewport vw La unidad vw se basa en la anchura del área visible (viewport) del di­s­po­si­ti­vo. 1vw equivale al 1 % de la anchura del viewport.
Altura del viewport vh La unidad vh se basa en la altura del área visible del di­s­po­si­ti­vo. 1vh equivale al 1 % de la altura del viewport.

El tamaño de la fuente también puede definirse mediante palabras clave relativas. En este caso, el valor de re­fe­re­n­cia es el tamaño de fuente pre­de­te­r­mi­na­do del navegador.

Relativo De­s­cri­p­ción
smaller El elemento actual se muestra más pequeño que el elemento padre.
larger El elemento actual se muestra más grande que el elemento padre.

Para ga­ra­n­ti­zar una vi­sua­li­za­ción óptima del texto en distintos di­s­po­si­ti­vos, se re­co­mie­n­da utilizar unidades relativas como em o %.

El esquema básico para definir el tamaño de la fuente con CSS es el siguiente:

.contenido {
font-size: 1.9em;
}
css

line-height

La propiedad CSS line-height se utiliza para definir la altura de línea de un párrafo de texto. Se aplican las mismas unidades de medida que en font-size, y los po­r­ce­n­ta­jes se calculan en relación con la font-size del texto co­rre­s­po­n­die­n­te. Al­te­r­na­ti­va­me­n­te, puedes indicar line-height como un valor numérico sin unidad. Otros valores posibles son normal (valor pre­de­te­r­mi­na­do) e inherit (heredado del elemento padre).

Por ejemplo, una line-height de 1.5 equivale a una altura de línea del 150 % del tamaño de la fuente, es decir, 1.5em.

.contenido {
line-height: 1.5;
}
css

font-weight

La propiedad CSS font-weight define el grosor del trazo de un elemento de texto. Los di­se­ña­do­res la utilizan para mostrar partes del texto en negrita. Los valores pueden es­pe­ci­fi­car­se de forma absoluta o en relación con el elemento padre.

Valores absolutos de la propiedad font-weight De­s­cri­p­ción
1–1000 valores numéricos de 1 (extrafino) a 1000 (ex­tra­grue­so)
normal grosor normal (equivale al valor 400)
bold negrita (equivale al valor 700)

Los valores numéricos solo son re­le­va­n­tes al trabajar con fuentes web. Por ello, en la práctica suelen ser su­fi­cie­n­tes dos grosores de trazo: normal y bold.

.contenido {
font-weight: normal;
}
.contenido {
font-weight: bold;
}
css

Los valores relativos de la propiedad CSS font-weight definen el grosor del trazo de un texto en relación con el grosor heredado del elemento padre.

Valores relativos de la propiedad font-weight De­s­cri­p­ción
bolder más grueso que en el elemento padre
lighter más fino que en el elemento padre
Servicio de diseño web
Deja en nuestras manos el diseño de tu página web
  • La forma más fácil y rápida de tener tu página web online
  • Construye tu marca con un nombre de dominio propio y un e-mail pro­fe­sio­nal
  • Tu página web siempre ac­tua­li­za­da con nuestro servicio de ma­n­te­ni­mie­n­to

Formato de texto

Además de la ti­po­gra­fía, CSS ofrece diversas pro­pie­da­des para el formato del texto. Estas permiten definir la ali­nea­ción del texto, el espaciado entre ca­ra­c­te­res y palabras, así como aplicar de­co­ra­cio­nes a los elementos textuales.

text-align

La propiedad CSS text-align se utiliza para la ali­nea­ción de texto y de elementos inline, es decir, elementos in­te­gra­dos en el flujo del texto, como imágenes o botones. Los valores ha­bi­tua­les son:

  • left (alineado a la izquierda)
  • right (alineado a la derecha)
  • center (centrado)
  • justify (ju­s­ti­fi­ca­do)
  • inherit (hereda el valor del elemento padre)

El siguiente código centra el texto de ejemplo:

.contenido {
text-align: center;
}
css

Otros valores de la propiedad text-align definen la ali­nea­ción del texto en relación con la dirección de escritura (direction).

Valores para la ali­nea­ción relativa del texto De­s­cri­p­ción
start El texto se alinea hacia el lado donde comienza. Con dirección de izquierda a derecha ({ direction: ltr; }) equivale a left. Con dirección de derecha a izquierda ({ direction: rtl; }) equivale a right.
end El texto se alinea hacia el lado donde termina.

El valor start se considera el valor pre­de­te­r­mi­na­do.

Todos los na­ve­ga­do­res ha­bi­tua­les muestran au­to­má­ti­ca­me­n­te la última línea de un texto ju­s­ti­fi­ca­do alineada a la izquierda. Si este co­m­po­r­ta­mie­n­to no es deseado, puede mo­di­fi­car­se de forma in­de­pe­n­die­n­te mediante la propiedad CSS text-align-last, cuyos valores posibles coinciden con los de text-align.

hyphens

Además, CSS ofrece la propiedad hyphens para co­n­fi­gu­rar la se­pa­ra­ción au­to­má­ti­ca de sílabas. El lenguaje de hojas de estilo pone a di­s­po­si­ción los si­guie­n­tes valores para la propiedad hyphens:

Valores de la propiedad hyphens De­s­cri­p­ción
manual Se­pa­ra­ción manual de sílabas: se tienen en cuenta los guiones blandos al dividir palabras (valor pre­de­te­r­mi­na­do).
none Sin se­pa­ra­ción de sílabas: los guiones blandos no se co­n­si­de­ran y los saltos de línea solo se realizan en los espacios.
auto Se­pa­ra­ción au­to­má­ti­ca de sílabas: la división de palabras se realiza según las reglas del idioma definido mediante el atributo HTML lang.
inherit La co­n­fi­gu­ra­ción se hereda del elemento padre.

word-spacing

La propiedad CSS word-spacing regula el espacio entre palabras dentro de un elemento de texto. Las personas re­s­po­n­sa­bles de una página web pueden definir la distancia entre palabras mediante valores de tamaño. Para ello están di­s­po­ni­bles las mismas unidades de medida que en font-size, con la excepción del po­r­ce­n­ta­je. Otros valores posibles para la propiedad word-spacing son normal (valor pre­de­te­r­mi­na­do) e inherit (heredado del elemento padre).

El siguiente ejemplo de código define un espacio entre palabras de 2em, que se añade al espaciado pre­de­te­r­mi­na­do:

.contenido {
word-spacing: 2em;
}
css

letter-spacing

Si no se desea modificar la distancia entre palabras, sino el espaciado entre letras, se utiliza la propiedad CSS letter-spacing. Al igual que en el caso anterior, pueden emplearse valores de tamaño (excepto po­r­ce­n­ta­jes), así como los valores normal e inherit.

El siguiente ejemplo de código muestra un fragmento de texto en el que una palabra se resalta mediante un espaciado adicional entre letras de 1em:

.contenido-especial {
letter-spacing: 1em;
}
css

text-indent

La propiedad CSS text-indent permite definir sangrías que afectan úni­ca­me­n­te a la primera línea de un párrafo. Se pueden utilizar valores positivos, negativos o po­r­ce­n­tua­les en relación con la anchura del bloque de texto co­rre­s­po­n­die­n­te.

El siguiente ejemplo define una sangría del 5 % en la primera línea. La clase se asigna en el código HTML mediante elementos span:

.contenido {
text-indent: 5%;
}
css

Para crear párrafos con sangría francesa, la propiedad text-indent se utiliza con un valor negativo.

text-decoration

La propiedad CSS text-decoration permite añadir de­co­ra­cio­nes a los elementos de texto, como sub­ra­ya­dos. Los valores posibles son:

Valores de la propiedad text-decoration De­s­cri­p­ción
none Sin de­co­ra­ción de texto
underline Cada línea del fragmento de texto se muestra subrayada.
overline Se muestra una línea sobre cada línea del texto.
line-through Cada línea del texto se muestra tachada.
inherit La de­co­ra­ción del texto se hereda del elemento padre.

El siguiente ejemplo define sub­ra­ya­dos para de­te­r­mi­na­dos grupos de palabras dentro de un texto:

.contenido-subrayado {
text-decoration: underline;
}
css

text-transform

La propiedad text-transform permite realizar tra­n­s­fo­r­ma­cio­nes de texto mediante CSS. De este modo, los textos pueden mostrarse en ma­yú­s­cu­las o mi­nú­s­cu­las sin modificar el contenido original. Esta propiedad admite las si­guie­n­tes tra­n­s­fo­r­ma­cio­nes:

Valores de la propiedad text-transform De­s­cri­p­ción
capitalize La primera letra de cada palabra se muestra en mayúscula.
uppercase Todo el texto se muestra en ma­yú­s­cu­las.
lowercase Todo el texto se muestra en mi­nú­s­cu­las.
none No se aplica ninguna tra­n­s­fo­r­ma­ción.
inherit La tra­n­s­fo­r­ma­ción se hereda del elemento padre.

Si se desea que las letras iniciales de un fragmento se muestren en ma­yú­s­cu­las in­de­pe­n­die­n­te­me­n­te del texto original, puede uti­li­zar­se el siguiente formato:

.contenido {
text-transform: capitalize;
}
css

Colores de texto y de fondo

Al elegir colores de texto y de fondo, los di­se­ña­do­res web suelen recurrir a los códigos de color ya ex­pli­ca­dos en formato decimal o he­xa­de­ci­mal. Varias pro­pie­da­des CSS utilizan estos códigos de color.

color

La propiedad CSS color se utiliza para definir el color del texto. Los valores ha­bi­tua­les incluyen colores en formato RGB, códigos he­xa­de­ci­ma­les o valores HSL. Además, los valores transparent y opacity permiten mostrar elementos de forma invisible. El siguiente ejemplo muestra la de­fi­ni­ción del color del texto mediante un código he­xa­de­ci­mal:

.contenido {
font-family: Arial;
font-size: 5em;
color: #d82451;
}
css

background-color

La propiedad CSS background-color se utiliza cuando se desea asignar un color de fondo a un elemento. Los valores di­s­po­ni­bles son los mismos que para la propiedad color.

El siguiente ejemplo muestra una co­m­bi­na­ción de color de texto y color de fondo:

.contenido {
font-family: Arial;
font-size: 5em;
color: #d82451;
background-color: #24d8ab;
}
css

Esta regla indica al navegador que todos los elementos de texto con la clase contenido se muestren en color burdeos (#d82451) sobre un fondo verde turquesa (#24d8ab).

background-image

Como al­te­r­na­ti­va a un color de fondo, puede cargarse una imagen como fondo de un elemento. Los di­se­ña­do­res utilizan para ello la propiedad background-image, cuyo valor indica la ruta del archivo gráfico según la siguiente sintaxis:

.contenido {
background-image:
url(ruta/a/la/imagen);
}
css

En lugar de background-image o background-color, también puedes usar la forma abreviada background.

Además, CSS permite definir de­gra­da­dos de color como fondos:

De­gra­da­dos de color en CSS De­s­cri­p­ción
linear-gradient() La función crea un degradado lineal.
radial-gradient() La función crea un degradado radial.
repeating-linear-gradient() La función crea un degradado lineal repetido.
repeating-radial-gradient() La función crea un degradado radial repetido.

En esta in­tro­du­c­ción a CSS nos limitamos, a modo de ejemplo, a la función linear-gradient(). Para aplicar un degradado lineal como fondo de un elemento, se utiliza linear-gradient() como valor de la propiedad background. Esta función requiere al menos dos valores de color como ar­gu­me­n­tos. El formato en el que se definan los colores no es relevante.

.contenido {
width: 400px;
height: 400px;
background: linear-gradient(green, yellow);
}
css

Bordes

CSS también permite añadir bordes a los elementos HTML. Esto resulta es­pe­cia­l­me­n­te útil para los llamados elementos de nivel de bloque (block-level elements), como en­ca­be­za­dos, párrafos, elementos div o tablas HTML, que aparecen dentro del elemento body. Sin formato adicional, estos bloques de contenido se extienden a lo ancho de todo el espacio di­s­po­ni­ble y se colocan uno debajo del otro.

Los elementos de nivel de bloque se di­fe­re­n­cian de los llamados elementos inline, como <b>, <i>, <a> o <span>. Los elementos inline solo aparecen dentro de elementos de nivel de bloque y su anchura viene de­te­r­mi­na­da ex­clu­si­va­me­n­te por su propio contenido.

Si se desea que un borde rodee por completo un elemento de nivel de bloque o un elemento inline, se utiliza la propiedad border. Al­te­r­na­ti­va­me­n­te, es posible definir el diseño del borde de cada lado del elemento por separado.

Pro­pie­da­des para bordes De­s­cri­p­ción
border Define las pro­pie­da­des del borde para todos los lados del elemento.
border-top Define las pro­pie­da­des del borde superior.
border-right Define las pro­pie­da­des del borde derecho.
border-bottom Define las pro­pie­da­des del borde inferior.
border-left Define las pro­pie­da­des del borde izquierdo.

Tanto la propiedad border como las pro­pie­da­des de los lados in­di­vi­dua­les del borde pueden es­pe­ci­fi­car­se con mayor detalle. Los valores co­rre­s­po­n­die­n­tes se indican tras la propiedad, separados por espacios, según el siguiente esquema:

.contenido {
border: style width color;
}
.contenido {
border: solid 4px #ff0000;
}
css

Además, la propiedad border-radius permite redondear las esquinas del borde.

Tipo de borde

Al elegir un tipo de borde, defines un borde de­co­ra­ti­vo para el elemento de nivel de bloque o inline co­rre­s­po­n­die­n­te. Algunos tipos de borde solo se aprecian co­rre­c­ta­me­n­te cuando se establece un ancho de borde adecuado.

Valores posibles para el tipo de borde De­s­cri­p­ción
none Sin borde
hidden No muestra ningún borde y también lo suprime en celdas de tabla ad­ya­ce­n­tes
dotted Define un borde punteado
dashed Define un borde di­s­co­n­ti­nuo
solid Define un borde continuo
double Define un borde doble
groove, ridge, inset, outset Permiten crear distintos efectos 3D

La siguiente imagen compara los tipos de borde en CSS:

Imagen: Tipos de borde en CSS
Existen distintos tipos de bordes en CSS con apa­rie­n­cias visuales di­fe­re­n­tes.

La de­fi­ni­ción del tipo de borde es obli­ga­to­ria. Si no se es­pe­ci­fi­ca un tipo de borde, el navegador no mostrará el borde, aunque se hayan definido valores para el ancho o el color del mismo.

Ancho del borde

El ancho del borde define el grosor de la línea del borde.

Valores posibles para el ancho del borde De­s­cri­p­ción
Valor de longitud El ancho del borde se es­pe­ci­fi­ca mediante las unidades de medida descritas en font-size. No es posible indicar el ancho del borde en po­r­ce­n­ta­jes.
thin fino
medium grosor medio
thick grueso

Color del borde

Las opciones de color para la propiedad border-color coinciden con las de las pro­pie­da­des color y background-color.

Valores posibles para el color del borde De­s­cri­p­ción
Valores de color El color del borde puede definirse mediante palabras clave, valores HEX o valores RGB o HSL.
transparent Define el borde como invisible.

El siguiente ejemplo de código combina la propiedad border con la de­fi­ni­ción de color de texto y de fondo. El conjunto de reglas se define en el archivo CSS para la clase borde:

.borde {
font-family: Arial;
font-size: 5em;
color: #d82451;
background-color: #24d8ab;
border: 10px ridge #d82451;
}
css

border-radius

La propiedad border-radius permite redondear las esquinas de un borde con formas ci­r­cu­la­res o elípticas. El fondo existente se recorta siguiendo la curva definida, lo que funciona incluso si el elemento no tiene borde. Usada co­rre­c­ta­me­n­te, border-radius también permite crear formas geo­mé­tri­cas sencillas.

Los valores posibles para la propiedad border-radius son hasta cuatro medidas, cada una co­rre­s­po­n­die­n­te a una esquina del borde. La asi­g­na­ción puede hacerse con uno, dos, tres o cuatro valores.

Valores de la propiedad border-radius De­s­cri­p­ción
Un valor El valor se aplica a las cuatro esquinas.
Dos valores El primer valor define las esquinas superior izquierda e inferior derecha. El segundo valor define las esquinas superior derecha e inferior izquierda.
Tres valores El primer valor define la esquina superior izquierda. El segundo valor define las esquinas superior derecha e inferior izquierda. El tercer valor define la esquina inferior derecha.
Cuatro valores Cada esquina se define con un valor propio, siguiendo el sentido de las agujas del reloj: superior izquierda, superior derecha, inferior derecha, inferior izquierda.

Los valores del radio del borde se escriben separados por espacios a co­n­ti­nua­ción de la propiedad border-radius. El esquema general de la de­cla­ra­ción es el siguiente (los valores numéricos son solo un ejemplo):

border-radius: 4em 2em 3em 1em;
css

La propiedad border-radius puede definirse en el mismo conjunto de reglas que la propiedad border o en clases separadas.

El siguiente conjunto de reglas define un borde con un border-radius de 2em:

.borde {
height: 100px;
width: 600px;
border: solid 10px #d82451;
border-radius: 2em;
}
css
Imagen: Borde con esquinas redondeadas
Un valor de 2em da lugar a esquinas re­do­n­dea­das de forma uniforme.

De forma al­te­r­na­ti­va, es posible definir valores distintos para cada una de las cuatro esquinas:

.borde {
height: 100px;
width: 600px;
border: solid 10px #d82451;
border-radius: 2em 1em 3em 4em;
}
css
Imagen: Borde con esquinas redondeadas: se ha definido un valor distinto para cada esquina
Para cada esquina puede es­ta­ble­ce­r­se un valor diferente.

En ambos casos, las esquinas del borde se redondean de forma circular. Si se desea un redondeo elíptico, es necesario definir dos valores por esquina. De este modo, la de­cla­ra­ción de un borde con esquinas elípticas puede incluir hasta ocho valores:

border-radius: 1em 4em 1em 4em / 4em 1em 4em 1em;
css

Los valores situados antes de la barra (/) definen el radio en el eje ho­ri­zo­n­tal de la elipse, mientras que los valores situados después de la barra de­te­r­mi­nan el radio en el eje vertical.

.borde {
height: 100px;
width: 600px;
border: solid 10px #d82451;
border-radius: 1em 4em / 4em 1em;
}
css
Imagen: Borde con esquinas redondeadas de forma elíptica
Las esquinas también pueden re­do­n­dear­se de forma elíptica.

Un fondo existente se recorta au­to­má­ti­ca­me­n­te siguiendo la curva definida.

.borde {
height: 100px;
width: 600px;
border: solid 10px #d82451;
border-radius: 2em;
background-color: #24d8ab;
}
css
Imagen: Borde con esquinas redondeadas y fondo ajustado
El fondo se adapta au­to­má­ti­ca­me­n­te a la forma del borde.

Esto se aplica tanto a los colores de fondo como a las imágenes de fondo, pero no a los elementos de texto.

Imagen: Los elementos de texto no se adaptan automáticamente a los bordes redondeados
Los elementos de texto deben alinearse por separado.

Po­si­cio­na­mie­n­to

La propiedad CSS position se utiliza para sacar una caja del flujo normal de los elementos y colocarla en cualquier punto de la página web. Otras cajas, in­de­pe­n­die­n­te­me­n­te de si forman parte del flujo del documento o también están po­si­cio­na­das, no influyen en la posición de una caja fo­r­ma­tea­da de este modo.

La propiedad position admite distintos valores, que pueden es­pe­ci­fi­car­se con mayor detalle mediante las pro­pie­da­des left, right, top y bottom, junto con sus co­rre­s­po­n­die­n­tes valores de medida:

Valores de la propiedad position De­s­cri­p­ción
absolute Posiciona la caja en relación con el elemento co­n­te­ne­dor más cercano que tenga definida una position.
relative Posiciona la caja en relación con su posición normal dentro del flujo del documento.
fixed Posiciona la caja en relación con la ventana del navegador y permanece fija al hacer scroll.
static Posición natural de la caja dentro del flujo del texto. Con position: static, los valores de po­si­cio­na­mie­n­to no tienen efecto. Es el valor pre­de­te­r­mi­na­do.
sticky Posiciona la caja como un elemento con position: relative mientras se encuentra dentro del viewport. Cuando está a punto de salir del área visible, se saca del flujo del documento y queda “fijada” al hacer scroll. Puede co­n­si­de­rar­se una co­m­bi­na­ción de relative y fixed.

Po­si­cio­na­mie­n­to absoluto

Con position: absolute, la caja se saca del flujo del documento y se posiciona en el lugar definido por las pro­pie­da­des indicadas a co­n­ti­nua­ción. Estas re­fe­re­n­cias se calculan en relación con el elemento ancestro más cercano que también tenga definida la propiedad position. Si no existe ningún elemento de este tipo, se toma como re­fe­re­n­cia el elemento raíz <html>. Las cajas con position: absolute no influyen en la posición de otros elementos y pueden su­pe­r­po­ne­r­se a ellos o quedar cubiertas por estos.

Los si­guie­n­tes conjuntos de reglas muestran el po­si­cio­na­mie­n­to absoluto de las cajas CSS .rojo, .azul y .verde dentro del elemento co­n­te­ne­dor .fondo:

.fondo {
height: 500px;
width: 500px;
border: solid grey;
}
.rojo {
height: 150px;
width: 150px;
background-color: rgba(255,0,0,0.5);
position: absolute;
top: 100px;
left: 100px;
}
.azul {
height: 150px;
width: 150px;
background-color: rgba(0,0,255,0.5);
position: absolute;
top: 150px;
left: 150px;
}
.verde {
height: 150px;
width: 150px;
background-color: rgba(0,255,0,0.5);
position: absolute;
top: 200px;
left: 200px;
}
css

Las cajas de contenido .rojo, .azul y .verde se han fo­r­ma­tea­do como su­pe­r­fi­cies se­mi­tra­n­s­pa­re­n­tes con unas di­me­n­sio­nes de 150 px × 150 px. La caja de contenido .fondo, con unas di­me­n­sio­nes de 500 px × 500 px, está rodeada por un borde gris.

Las reglas de estilo se integran en el código HTML mediante clases:

<div class="fondo">
<p class="rojo"> </p>
<p class="azul"> </p>
<p class="verde"> </p>
</div>
html

La vista en el navegador muestra la distinta posición de las cajas dentro del elemento <div>. Cada elemento se desplaza 50 px hacia la derecha y hacia abajo respecto al anterior. El uso de colores se­mi­tra­n­s­pa­re­n­tes ilustra cla­ra­me­n­te la po­si­bi­li­dad de su­pe­r­po­si­ción al utilizar po­si­cio­na­mie­n­to absoluto.

Imagen: Posicionamiento absoluto de cajas CSS
Tres cajas CSS tra­n­s­pa­re­n­tes con distinto po­si­cio­na­mie­n­to absoluto.

Po­si­cio­na­mie­n­to relativo

Con el po­si­cio­na­mie­n­to relativo, la caja permanece integrada en el flujo normal del documento, pero puede de­s­pla­zar­se mediante valores de po­si­cio­na­mie­n­to relativos a esa posición original. Es decir, la caja se ajusta con respecto a sí misma. Los elementos que la preceden o la siguen en el flujo se comportan como si la caja no se hubiera de­s­pla­za­do.

Para desplazar una caja a partir de su posición dentro del flujo del documento, el conjunto de reglas co­rre­s­po­n­die­n­te se amplía con la de­cla­ra­ción position: relative y con los valores de po­si­cio­na­mie­n­to deseados.

El siguiente bloque de código lo ilustra con el ejemplo de la caja azul:

.azul {
height: 150px;
width: 150px;
background-color: rgba(0,0,255,0.5);
position: relative;
left: 50px;
}
css

La regla position: relative junto con la in­di­ca­ción left: 50px provoca que, en la vista del navegador, la caja azul se desplace 50 px hacia la izquierda.

Imagen: Posicionamiento relativo a partir del flujo natural del documento
Mediante el po­si­cio­na­mie­n­to relativo, la caja azul se desplaza.

El po­si­cio­na­mie­n­to relativo también puede aplicarse a elementos flotados.

Cajas CSS fijadas

La ali­nea­ción de las cajas fijadas funciona de forma similar al po­si­cio­na­mie­n­to absoluto, es decir, fuera del flujo del documento. Todas las in­di­ca­cio­nes de posición se definen en relación con el viewport. Una caja fijada de este modo aparece siempre en el mismo lugar de la pantalla, incluso cuando el usuario se desplaza por la página web. Así pueden fijarse elementos de na­ve­ga­ción, como menús o botones de acción (por ejemplo, “Volver al inicio”), dentro del área visible.

El modelo de cajas en CSS

El modelo de cajas CSS describe cómo los na­ve­ga­do­res re­pre­se­n­tan y po­si­cio­nan los elementos HTML como su­pe­r­fi­cies re­c­ta­n­gu­la­res (“cajas”). En esencia, toda página web se compone de la in­ter­ac­ción de estas cajas, cuya di­s­po­si­ción viene de­te­r­mi­na­da por el llamado flujo de elementos: por defecto, los elementos se colocan de izquierda a derecha y de arriba abajo.

CSS distingue entre dos tipos de cajas:

  • Cajas de bloque (div, p): ocupan por defecto todo el ancho de su elemento padre y siempre comienzan en una nueva línea.
  • Cajas inline (span, b, i): se muestran dentro del flujo del texto y se ajustan a su contenido.

El flujo de elementos de las cajas de bloque e inline puede vi­sua­li­zar­se en las si­guie­n­tes ilu­s­tra­cio­nes:

Imagen: Tres cajas de bloque en el flujo de elementos CSS
Flujo de elementos CSS: las cajas de bloque se muestran cada una en una fila nueva.

Las cajas de bloque es­tru­c­tu­ran el diseño de la página, mientras que las cajas inline se encargan del texto y de los elementos in­te­gra­dos en él. Los co­n­te­ne­do­res vacíos como <div> suelen uti­li­zar­se úni­ca­me­n­te para la agru­pa­ción y el formateo mediante CSS.

Niveles del modelo de cajas De­s­cri­p­ción
Área de contenido (content box) Su­pe­r­fi­cie cuyo tamaño viene de­te­r­mi­na­do por la cantidad de texto o por las di­me­n­sio­nes de una imagen. En los elementos de nivel de bloque, la altura y la anchura pueden definirse mediante las pro­pie­da­des height y width. En los elementos inline, este tipo de formateo no está di­s­po­ni­ble.
Relleno (padding box) La padding box (padding = relleno) define la distancia entre la content box y la border box.
Borde (border box) La border box define el borde del elemento.
Margen (margin box) La margin box define la distancia entre el elemento actual y su elemento padre o los elementos ad­ya­ce­n­tes. La propiedad margin también puede aceptar valores negativos.

Si se desea dar formato a los cuatro lados de una caja al mismo tiempo, se utilizan las pro­pie­da­des padding, border y margin:

Relleno Borde Margen
arriba padding-top border-top margin-top
abajo padding-bottom border-bottom margin-bottom
izquierda padding-left border-left margin-left
derecha padding-right border-right margin-right

Los valores posibles para las pro­pie­da­des indicadas son valores de tamaño, así como inherit (heredado del elemento padre). Además, los márgenes ex­te­rio­res pueden definirse también mediante el valor auto.

La siguiente imagen muestra la es­tru­c­tu­ra es­que­má­ti­ca del modelo de cajas en CSS:

Imagen: Modelo de cajas en CSS
Re­pre­se­n­ta­ción es­que­má­ti­ca del modelo de cajas CSS.

El modelo de cajas en CSS en la práctica

El modelo de cajas en CSS puede en­te­n­de­r­se fá­ci­l­me­n­te añadiendo paso a paso cada uno de sus niveles a una caja de contenido. El punto de partida es un breve fragmento de texto que, en este ejemplo, se formatea mediante un selector de clase:

<p class="contenido">At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctusest Lorem ipsum dolor sit amet.</p>
html

El siguiente conjunto de reglas define para la caja de contenido unas di­me­n­sio­nes de 150 px × 150 px. Además, se es­ta­ble­cen letras negras sobre fondo gris y se alinea el texto en ju­s­ti­fi­ca­do:

.contenido {
height: 150px;
width: 150px;
color: #000000;
text-align: justify;
background-color: #808080;
}
css

Aplicadas al fragmento de texto, estas reglas de estilo dan lugar a la siguiente re­pre­se­n­ta­ción en el navegador web:

Imagen: Caja de contenido sin relleno, borde ni margen
Si se define una caja de contenido sin relleno, borde ni margen, aparece situada en la esquina superior izquierda de la ventana del navegador.

El fragmento de texto aparece, según el flujo de los elementos, en la esquina superior izquierda de su elemento padre. El texto y el color de fondo comienzan sin ningún margen en el lado izquierdo de la ventana del navegador y ocupan todo el espacio di­s­po­ni­ble. El fondo queda di­re­c­ta­me­n­te ajustado al cuerpo del texto.

Un diseño de este tipo resulta poco estético y dificulta la lectura. Por ello, la propiedad padding permite a los di­se­ña­do­res definir un relleno para separar los elementos de texto de los elementos de diseño ci­r­cu­n­da­n­tes.

.contenido {
height: 150px;
width: 150px;
color: #000000;
background-color: #808080;
text-align: justify;
padding: 10px;
}
css

Al añadirse al conjunto de reglas, la de­cla­ra­ción padding: 10px; produce el siguiente cambio en la vista del frontend:

Imagen: Caja de contenido con relleno
El relleno define el espacio interior.

El navegador añade un relleno de 10 px en los cuatro lados de la caja de contenido. Como elemento de diseño adicional, puede añadirse un borde.

.contenido {
height: 150px;
width: 150px;
color: #000000;
background-color: #808080;
text-align: justify;
padding: 10px;
border: 5px solid #d82451;
}
css

En este ejemplo se utiliza la propiedad border para añadir al elemento un borde continuo de color burdeos.

Imagen: Caja de contenido con relleno y borde
El borde rodea la caja de contenido y la caja de relleno.

De este modo, el borde queda separado del contenido gracias al valor de relleno.

Según el flujo natural de los elementos, la caja fo­r­ma­tea­da de esta manera se sitúa sin se­pa­ra­ción en la esquina superior izquierda de su elemento padre. La propiedad margin permite suavizar el diseño de una página web mediante un margen exterior. Para ello, basta con añadir la de­cla­ra­ción co­rre­s­po­n­die­n­te al conjunto de reglas existente:

.contenido {
height: 150px;
width: 150px;
color: #000000;
background-color: #808080;
text-align: justify;
padding: 10px;
border: 5px solid #d82451;
margin: 40px;
}
css

En el navegador, un margen exterior de 40 px se aplica de la siguiente manera:

Imagen: Caja de contenido con relleno, borde y margen
La propiedad `margin` impone un margen exterior entre el borde y el elemento padre.

Como al­te­r­na­ti­va a una medida concreta, la propiedad margin puede definirse con el valor auto. En este caso, la caja se centra au­to­má­ti­ca­me­n­te en ho­ri­zo­n­tal dentro del elemento padre. En cambio, en sentido vertical el valor auto no tiene efecto.

Nota

El espacio que ocupa una caja en CSS puede ca­l­cu­lar­se sumando los valores de todos los co­m­po­ne­n­tes re­le­va­n­tes de la caja.

Formato de cajas con float

Cuando la caja que se va a formatear es una caja de bloque, las cajas si­guie­n­tes pasan au­to­má­ti­ca­me­n­te a la línea siguiente según el flujo normal de los elementos.

En la práctica, este salto de línea au­to­má­ti­co después de una caja de bloque no siempre es deseado y puede evitarse mediante la propiedad float. Esta propiedad saca las cajas de bloque del flujo normal del documento y las coloca en la posición deseada.

Valores de la propiedad float De­s­cri­p­ción
none No se produce ningún de­s­pla­za­mie­n­to del elemento. float: none; es el valor pre­de­te­r­mi­na­do de una caja CSS.
left La caja de bloque se desplaza hasta el borde interior izquierdo del elemento padre.
right La caja de bloque se desplaza hasta el borde interior derecho del elemento padre.
inherit El valor de float se hereda del elemento padre.

Una caja a la que se aplica un formato con float se denomina elemento flotado.

Cuando coinciden varios elementos flotados, estos se colocan en el orden en que aparecen en el código HTML, de izquierda a derecha (float: left) o de derecha a izquierda (float: right).

El siguiente ejemplo de código muestra un conjunto de reglas que incluye la propiedad float:

.contenido {
height: 150px;
width: 150px;
color: #000000;
background-color: #808080;
text-align: justify;
padding: 20px;
border: 5px solid #d82451;
margin: 40px;
float: left;
}
css

Si este conjunto de reglas se aplica a dos elementos HTML, ambos se extraen del flujo del documento y se alinean uno junto a otro a la izquierda:

<p class="contenido">At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctusest Lorem ipsum dolor sit amet.</p>
<p class="contenido">Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus.</p>
html
Imagen: Dos cajas de bloque alineadas a la izquierda mediante elementos flotados
Con la propiedad `float` es posible mostrar cajas de bloque una junto a otra sin salto de línea.

El gran espacio in­te­r­me­dio se produce porque los márgenes ex­te­rio­res de ambas cajas se suman. Sin los elementos flotados, los márgenes ex­te­rio­res de los elementos ad­ya­ce­n­tes pueden colapsar.

Diseño web ada­p­ta­ti­vo con CSS

Para crear diseño web ada­p­ta­ti­vo con CSS, el lenguaje de hojas de estilo ofrece dos técnicas modernas de ma­que­ta­ción: Flexbox y Grid. Ambos sistemas adaptan los co­n­te­ni­dos de forma dinámica a distintos tamaños de pantalla. En co­m­bi­na­ción con las media queries de CSS, los diseños pueden ajustarse de manera precisa a di­fe­re­n­tes di­s­po­si­ti­vos y anchuras de pantalla.

Flexbox

Con CSS Flexbox (Flexible Box Layout) es posible crear diseños uni­di­me­n­sio­na­les de forma es­pe­cia­l­me­n­te sencilla. Flexbox alinea los co­n­te­ni­dos en ho­ri­zo­n­tal o en vertical, por lo que resulta ideal para menús de na­ve­ga­ción, galerías o áreas de contenido modulares.

Un co­n­te­ne­dor flex se define mediante la propiedad display: flex;. Todos los elementos hijos directos se co­n­vie­r­ten au­to­má­ti­ca­me­n­te en elementos flexibles (flex items), cuya posición, orden y tamaño pueden co­n­tro­lar­se de forma flexible.

Propiedad De­s­cri­p­ción
flex-direction Determina la dirección principal de los elementos flexibles. El valor row se utiliza para una di­s­po­si­ción ho­ri­zo­n­tal y column para una vertical. row-reverse y column-reverse invierten la dirección.
justify-content Alinea los elementos flexibles a lo largo del eje principal. Con flex-start se alinean al inicio, con flex-end al final y con center se centran. Los valores space-between, space-around y space-evenly definen la di­s­tri­bu­ción del espacio entre los elementos (sin espacio en los extremos, espacio alrededor de cada elemento y espacio uniforme entre todos).
align-items Alinea los elementos flexibles a lo largo del eje tra­n­s­ve­r­sal. Los valores flex-start, flex-end y center funcionan de forma similar a justify-content. Además, baseline alinea por la línea base y stretch estira los elementos para ocupar el co­n­te­ne­dor.
flex-wrap Define si los elementos flexibles pueden pasar a una nueva línea. Con nowrap (valor pre­de­te­r­mi­na­do) todos pe­r­ma­ne­cen en una sola línea. Con wrap y wrap-reverse se permiten saltos de línea (op­cio­na­l­me­n­te en sentido inverso).
gap Define el espacio entre los elementos flexibles.

El siguiente ejemplo muestra una di­s­po­si­ción ho­ri­zo­n­tal de elementos con un espacio uniforme entre ellos:

.contenedor {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
gap: 10px;
}
css

Estas reglas se aplican al siguiente HTML:

<div class="contenedor">
<div class="elemento">Elemento 1</div>
<div class="elemento">Elemento 2</div>
<div class="elemento">Elemento 3</div>
</div>
html

Además, el co­m­po­r­ta­mie­n­to de cada elemento flexible puede co­n­tro­lar­se de forma in­di­vi­dual. Con la propiedad flex, por ejemplo, puedes definir en qué medida un elemento puede crecer o reducirse en relación con los demás. Un valor de 2 indica una du­pli­ca­ción:

.elemento1 { flex: 2; }
css

Ma­que­ta­ción con CSS Grid

Con CSS Grid, los co­n­te­ni­dos de una página web pueden or­ga­ni­zar­se en un sistema bi­di­me­n­sio­nal de filas y columnas. Este sistema permite un control preciso de la es­tru­c­tu­ra, lo que facilita la creación de ma­que­ta­cio­nes complejas de forma flexible. Para crear una cua­drí­cu­la, se asigna la propiedad display: grid; al elemento padre. Todos sus elementos hijos directos pasan a ser elementos de cua­drí­cu­la. A partir de ahí, el sistema se ajusta mediante distintas pro­pie­da­des.

Propiedad De­s­cri­p­ción
grid-template-columns Define la es­tru­c­tu­ra de columnas de la cua­drí­cu­la. La unidad más im­po­r­ta­n­te es fr, que indica qué pro­po­r­ción del espacio di­s­po­ni­ble se utiliza. Con auto, la di­s­tri­bu­ción se realiza au­to­má­ti­ca­me­n­te.
grid-template-rows Define la es­tru­c­tu­ra de filas de la cua­drí­cu­la. Los valores di­s­po­ni­bles son los mismos que en grid-template-columns.
gap Determina el espacio entre los elementos de cua­drí­cu­la.
justify-items Define la ali­nea­ción ho­ri­zo­n­tal de los elementos de cua­drí­cu­la. start alinea a la izquierda, end a la derecha y center centra los elementos. El valor pre­de­te­r­mi­na­do stretch hace que ocupen toda la celda.
align-items Define la ali­nea­ción vertical de los elementos de cua­drí­cu­la. Utiliza los mismos valores que justify-items.

El siguiente ejemplo muestra la creación de una cua­drí­cu­la con tres columnas de igual anchura y dos filas, uti­li­za­n­do valores fr uniformes:

.contenedor {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: auto auto;
gap: 10px;
}
css

Además, cada elemento de cua­drí­cu­la puede po­si­cio­nar­se de forma es­pe­cí­fi­ca, por ejemplo para ocupar varias columnas o filas. Para ello se utilizan las pro­pie­da­des grid-column y grid-row. En estas se indican la línea de inicio (incluida) y la línea de fin (excluida), separadas por una barra (/). En el siguiente ejemplo, el elemento ocupa dos columnas y una fila:

.elemento1 {
grid-column: 1 / 3;
grid-row: 1;
}
css

Media queries

Las media queries permiten aplicar reglas CSS en función de las ca­ra­c­te­rí­s­ti­cas del di­s­po­si­ti­vo. De este modo, el diseño puede adaptarse a sma­r­t­pho­nes, tablets o pantallas de es­cri­to­rio sin necesidad de crear varios archivos HTML. Con una media query es posible activar o so­bre­s­cri­bir estilos cuando se cumplen de­te­r­mi­na­das co­n­di­cio­nes. El caso más habitual es la ada­p­ta­ción a distintas anchuras del viewport, para lo que se utilizan las si­guie­n­tes di­re­c­ti­vas:

Propiedad / sintaxis De­s­cri­p­ción
@media Inicia una media query.
screen, print, all Define el tipo de medio al que se aplican las reglas.
min-width Activa reglas CSS a partir de una anchura mínima.
max-width Activa reglas CSS hasta una anchura máxima.

El siguiente ejemplo muestra cómo utilizar una media query para modificar la ma­que­ta­ción por debajo de una anchura de­te­r­mi­na­da:

/ *Diseño estándar para pantallas grandes* /
.contenedor {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
}
/ *Adaptación para pantallas más pequeñas* /
@media (max-width: 768px) {
.contenedor {
grid-template-columns: 1fr;
}
}
css

También es posible combinar varias co­n­di­cio­nes, por ejemplo para aplicar estilos solo en tablets en orie­n­ta­ción vertical:

@media screen and (min-width: 600px) and (max-width: 900px) and (orientation: portrait) {
body {
font-size: 1.1em;
}
}
css

Variables CSS

Las variables CSS (también llamadas custom pro­pe­r­ties) permiten almacenar valores de forma ce­n­tra­li­za­da y re­uti­li­zar­los varias veces dentro de la hoja de estilos. De este modo, colores, es­pa­cia­dos o tamaños de fuente pueden mo­di­fi­car­se en un único lugar sin tener que ajustar todo el CSS. Esto hace que el código sea más claro, fácil de mantener y coherente.

Las variables CSS se definen con un doble guion (--) y se utilizan mediante la función var().

Sintaxis De­s­cri­p­ción
--nombre-variable Define una variable pe­r­so­na­li­za­da.
var(--nombre-variable) Recupera el valor de una variable definida.
:root Ámbito global (co­rre­s­po­n­de al elemento HTML raíz).

El siguiente ejemplo muestra cómo definir y utilizar variables CSS:

:root {
--color-principal: #ff4081;
--color-texto: #333;
--relleno: 10px;
}
button {
background-color: var(--color-principal);
color: var(--color-texto);
padding: var(--relleno);
}
css

En este caso, las variables --color-principal, --color-texto y --relleno se definen en :root, es decir, de forma global para toda la página. El botón utiliza estos valores mediante var(), de modo que el color de fondo, el color del texto y el relleno se aplican au­to­má­ti­ca­me­n­te a partir de las variables definidas.

Ir al menú principal