# Qué es CSS: tutorial introductorio de hojas de estilo en cascada

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 estructura clara y flexible. En este tutorial de CSS descubrirás qué es CSS, aprenderás los conceptos básicos y cómo usarlo para controlar de forma precisa el diseño, los colores y la tipografía de tu página web.

## La separación de contenido y presentación

En combinación con [HTML](https://www.ionos.com/es-us/digitalguide/paginas-web/desarrollo-web/aprende-html-tutorial-para-principiantes/), [CSS](https://www.ionos.com/es-us/digitalguide/paginas-web/diseno-web/que-es-css/) permite separar el contenido de la presentación.

El **lenguaje de marcado de hipertexto (HTML)** se utiliza para enriquecer documentos de texto con información que permite una estructuració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 interpretarse los contenidos (por ejemplo, un encabezado `<h1>` o un párrafo `<p>`).

En sus inicios, HTML también incluía instrucciones básicas de diseño. Sin embargo, estas se consideran obsoletas desde [HTML5](https://www.ionos.com/es-us/digitalguide/paginas-web/desarrollo-web/que-es-html5/) y hoy en día no deberían utilizarse. En su lugar, se recurre al lenguaje de hojas de estilo **CSS (Cascading Style Sheets)** para gestionar de forma independiente los aspectos visuales.

## ¿Qué es CSS?

Al igual que HTML, CSS se escribe en formato de texto. Puede integrarse directamente 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 diseñadores web utilicen archivos CSS independientes 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 instrucciones de diseño redundantes gracias a las referencias a hojas de estilo externas. Cuantas menos repeticiones haya, más limpio y eficiente será el [código fuente](https://www.ionos.com/es-us/digitalguide/paginas-web/desarrollo-web/codigo-fuente-definicion-con-ejemplos/).

Si es necesario realizar cambios en el diseño, basta con modificarlos en los archivos CSS centrales. Así no hace falta revisar y adaptar cada documento HTML por separado, lo que facilita el mantenimiento y hace el código más fácil de actualizar. Como estándar vivo, CSS es desarrollado y actualizado de manera continua por el [World Wide Web Consortium (W3C)](https://www.w3.org/Style/CSS/ "Noticias actuales sobre el desarrollo de CSS en la página web del W3C").

## Estructura 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 subyacentes se les asignan propiedades con determinados valores mediante el lenguaje de hojas de estilo. La **estructura básica de una regla de estilo** sigue el siguiente esquema:

```css
Selector { declaración }
```

El selector indica a qué elementos HTML se aplica la regla. Entre llaves se define un bloque de declaraciones: una o varias declaraciones, 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 encabezado:

```css
h2 { color: red; }
```

Los diseñadores web pueden asignar una sola propiedad a un selector o definir **conjuntos de reglas** más amplios que incluyan instrucciones de diseño detalladas. Para mejorar la legibilidad, se ha establecido una forma de escritura en la que todas las propiedades de un conjunto de reglas se colocan en líneas separadas:

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

En la práctica, un conjunto de propiedades de este tipo podría tener el siguiente aspecto:

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

Además, un conjunto de reglas puede incluir varios selectores. En ese caso, se escriben separados por comas antes de la declaración:

```css
Selector1, Selector2 { declaración }
```

## Selectores CSS

CSS admite diversos [selectores](https://www.w3.org/TR/css3-selectors/#selectors "Resumen de todos los selectores CSS en la página web del W3C"), que permiten asignar reglas de estilo de forma personalizada. Para empezar, basta con familiarizarse con los **selectores de tipo, de clase, de ID y el selector universal**. Ten en cuenta que CSS distingue entre mayúsculas y minúsculas.

<table>
  <thead>
    <tr>
      <th><strong>Tipo de selector</strong></th>
      <th><strong>Sintaxis CSS</strong></th>
      <th><strong>Descripción</strong></th>
      <th><strong>Especificidad</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Selector de tipo</td>
      <td>Elemento HTML (p. ej., `h2`)</td>
      <td>Un selector de tipo corresponde al nombre del elemento al que hace referencia. Los estilos se aplican a todos los elementos HTML del mismo tipo.</td>
      <td>1</td>
    </tr>
    <tr>
      <td>Selector de clase</td>
      <td>`.ejemplo`</td>
      <td>Un selector de clase se aplica a todos los elementos que pertenecen a una clase determinada. Los selectores 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"`).</td>
      <td>10</td>
    </tr>
    <tr>
      <td>Selector de ID</td>
      <td>`#ejemplo`</td>
      <td>Un selector de ID se aplica a un único elemento con un identificador exclusivo. Se integra en el código HTML mediante el atributo `id` (`id="ejemplo"`).</td>
      <td>100</td>
    </tr>
    <tr>
      <td>Selector universal</td>
      <td>`*`</td>
      <td>El selector universal, representado por un asterisco (`*`), se aplica a todos los elementos HTML de un documento.</td>
      <td>0</td>
    </tr>
  </tbody>
</table>

Nota Cuando varias reglas afectan a un mismo elemento, la especificidad del selector determina cuál se aplica. Cada tipo de selector tiene un valor concreto que se utiliza para calcular dicha especificidad.

### Selector de tipo

El uso de los distintos selectores CSS se entiende mejor a través de ejemplos. El siguiente código muestra el selector de tipo `h2` con su declaración:

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

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

### Selector de clase

Como alternativa, el formato CSS puede aplicarse mediante un selector de clase. Esto permite a los diseñadores asignar las mismas reglas de estilo a elementos HTML independientemente de su tipo.

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

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

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

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

### Selector de ID

Si una regla de estilo debe aplicarse únicamente 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 navegación:

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

La asignación del estilo se realiza en el código HTML sin el símbolo de almohadilla:

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

La ventaja de los selectores de ID es que permiten identificar de un vistazo qué partes del código corresponden 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 (`*`):

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

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 vincularse con el código fuente HTML. Para ello, existen tres opciones:

- Integrar directamente las declaraciones CSS en las etiquetas HTML (estilos inline)
- Definir CSS en la cabecera del documento HTML
- Hacer referencia a una hoja de estilos independiente

Esta última opción se considera la más recomendable: en la práctica, las hojas de estilo suelen crearse como archivos de texto externos y enlazarse posteriormente, lo que facilita el mantenimiento y es clave para aprender CSS de forma estructurada.

### Declaración CSS en etiquetas HTML

Si una declaración CSS solo debe dar formato a un punto concreto del código fuente, puede incluirse directamente en la etiqueta de apertura del elemento HTML correspondiente mediante el atributo `style`. En este caso se habla de un **estilo inline**.

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

Esto tiene la ventaja de que **no es necesario crear una hoja de estilos propia**, el selector no es necesario y este tipo de asignació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 redundante.

### Definició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 declaración CSS directamente en la etiqueta HTML resulta ineficiente. En su lugar, es preferible definir las reglas de estilo una sola vez en la cabecera del documento HTML mediante el [elemento `style`](https://www.ionos.com/es-us/digitalguide/paginas-web/desarrollo-web/html-tag-style/):

```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>
[…]
<div class="hash d-none" hidden>hash_fda9aae0a47d43fbcd1a14c520b3130f4655afe7</div><script data-shy-copy-guard>(function(){var C=[0x00AD,0x200B,0x200C,0x200D,0x2060,0xFEFF];var s=function(t){for(var i=0;i<C.length;i++){t=t.split(String.fromCharCode(C[i])).join("");}return t;};document.addEventListener("copy",function(e){var sel=document.getSelection();if(!sel||sel.isCollapsed||!e.clipboardData){return;}e.clipboardData.setData("text/plain",s(sel.toString()));try{var d=document.createElement("div");d.appendChild(sel.getRangeAt(0).cloneContents());e.clipboardData.setData("text/html",s(d.innerHTML));}catch(x){}e.preventDefault();});})();</script></body>
</html>
```

El conjunto de reglas definido dentro del elemento `style` se aplica automáticamente a todos los elementos `h2` posteriores. Si el elemento `h2` debe utilizarse con estas mismas reglas de diseño en otras páginas web del mismo proyecto online, basta con definirlas en un archivo CSS centralizado.

### Referencia a una hoja de estilos independiente

Cuando las reglas de estilo se definen en una hoja de estilos separada, es necesario vincularla al documento HTML correspondiente. Esto se hace mediante el elemento HTML `<link>`:

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

El elemento `link` incluye los atributos obligatorios `rel` y `href`, y puede complementarse opcionalmente con los atributos `type` y `media`.

<table>
  <thead>
    <tr>
      <th><strong>Atributos del elemento `link`</strong></th>
      <th><strong>Descripción</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`rel`</td>
      <td>El atributo `rel` define el tipo de relación del elemento. El valor `stylesheet` indica que se va a enlazar una hoja de estilos.</td>
    </tr>
    <tr>
      <td>`href`</td>
      <td>El atributo `href` hace referencia al archivo que se va a utilizar como hoja de estilos.</td>
    </tr>
    <tr>
      <td>`type`</td>
      <td>El atributo opcional `type` describe el tipo de medio del archivo enlazado; en el caso de CSS, `text/css`.</td>
    </tr>
    <tr>
      <td>`media`</td>
      <td>Con el atributo `media` se puede definir que la hoja de estilos referenciada solo se utilice para un medio de salida concreto. Esto permite ofrecer hojas de estilo distintas según el dispositivo, por ejemplo `screen` o `print`.</td>
    </tr>
  </tbody>
</table>

## Indicaciones de color en CSS

Como ya se ha mencionado en el capítulo introductorio, las **asignaciones de color mediante CSS** pueden definirse utilizando nombres de colores en inglés. Sin embargo, en la práctica este tipo de reglas se emplea con poca frecuencia. Lo más habitual es recurrir al [modelo RGB](https://www.ionos.com/es-us/digitalguide/paginas-web/diseno-web/colores-rgb/), que ofrece muchas más gradaciones y permite a quienes gestionan páginas web realizar ajustes de color mucho más precisos. Los códigos correspondientes 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](https://www.ionos.com/es-us/digitalguide/fileadmin/_processed_/4/b/csm_screenshot-google-color-picker_4a1cfeccc6.webp "Selector de color en el buscador de Google")](https://www.ionos.com/es-us/digitalguide/fileadmin/DigitalGuide/Screenshots_2025/screenshot-google-color-picker.jpg) Con un selector de color puedes visualizar de forma práctica los valores de cada color. En el modelo RGB, las proporciones de color se definen mediante **valores decimales entre 0 y 255**. Mientras que un valor de 0 indica que un color no tiene ninguna contribución de ese color primario, un valor de 255 representa la intensidad máxima.

Desde CSS3, los valores RGB pueden ampliarse con un cuarto valor, el denominado **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:

```css
rgba(valorRojo, valorVerde, valorAzul, opacidad)
```

Así, los siguientes valores RGBA representan, por ejemplo, el color azul con una **transparencia** del 50 %:

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

Nota También puedes definir valores RGB en formato hexadecimal. El esquema básico de un código de color hexadecimal consta de una almohadilla (#) seguida de seis cifras hexadecimales que representan, en pares, cada uno de los colores del espacio RGB (rojo, verde y azul).

## Las propiedades CSS más importantes

CSS pone a tu disposición numerosas propiedades con las que puedes definir reglas de estilo para los elementos HTML. Cada propiedad acepta un conjunto de valores **definidos en la especificación**. Para facilitar la comprensión, las propiedades CSS se agrupan por áreas de aplicación. A continuación, nos centramos en las más importantes.

### Tipografía

La tipografí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 tipográficos de una página HTML**.

#### `font-family`

Si quieres definir una **tipografí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 priorizada de tipografías adecuadas. La estructura es siempre la misma: primero se indica la fuente preferida y, a continuación, varias alternativas de sustitución:

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

En este ejemplo se define una regla de estilo en el archivo CSS. **Georgia** se establece como tipografía prioritaria y **Garamond** como alternativa. De este modo, el navegador mostrará el texto en Garamond si la fuente Georgia no está instalada en el sistema.

Consejo Es recomendable definir una familia tipográfica genérica como mecanismo de respaldo (fallback). Se trata de un nombre genérico que actúa como comodín para un grupo de tipografías similares.

#### `font-style`

La propiedad CSS `font-style` se refiere al estilo tipográfico de un texto y permite definir **instrucciones de formato relacionadas con la inclinación** de los caracteres.

<table>
  <thead>
    <tr>
      <th><strong>Valores para la inclinación del texto</strong></th>
      <th><strong>Descripción</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`normal`</td>
      <td>estilo de letra normal (valor predeterminado)</td>
    </tr>
    <tr>
      <td>`italic`</td>
      <td>letra cursiva</td>
    </tr>
    <tr>
      <td>`oblique`</td>
      <td>letra inclinada (aunque la fuente no tenga variante cursiva)</td>
    </tr>
  </tbody>
</table>

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

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

#### `font-variant`

La propiedad CSS `font-variant` se utiliza para definir **variantes tipográficas**.

<table>
  <thead>
    <tr>
      <th><strong>Valores para las variantes tipográficas</strong></th>
      <th><strong>Descripción</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`normal`</td>
      <td>variante tipográfica normal (valor predeterminado)</td>
    </tr>
    <tr>
      <td>`small-caps`</td>
      <td>versalitas (las minúsculas se muestran como mayúsculas de menor tamaño)</td>
    </tr>
    <tr>
      <td>`all-small-caps`</td>
      <td>versalitas para mayúsculas y minúsculas</td>
    </tr>
  </tbody>
</table>

El siguiente ejemplo define la variante tipográfica `small-caps`:

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

#### `font-size`

Con la propiedad CSS `font-size` se define el **tamaño de visualización** de los elementos de texto. Este puede especificarse mediante valores absolutos o en relación con los elementos que lo rodean. Lo que se indica es la altura de los caracteres, el llamado **tamaño de fuente**. Para ello, los diseñadores web disponen de distintas sintaxis y unidades de medida.

#### Unidades de medida absolutas

Las **unidades de medida absolutas** se basan en longitudes físicas. Sin embargo, en pantalla los navegadores convierten todas estas unidades a píxeles y parten de una resolución de 96 dpi. Por este motivo, salvo `px`, las unidades absolutas apenas se utilizan en diseño web y suelen tener sentido únicamente en contextos de impresión.

<table>
  <thead>
    <tr>
      <th><strong>Unidad</strong></th>
      <th><strong>Sintaxis CSS</strong></th>
      <th><strong>Descripción</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Píxel</td>
      <td>`px`</td>
      <td>La unidad px corresponde al tamaño de un elemento en píxeles. Los píxeles se representan en pantalla en relación con la densidad de puntos (por ejemplo, dots per inch, dpi). Como referencia 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 dispositivo mediante el zoom del navegador.</td>
    </tr>
    <tr>
      <td>Centímetro</td>
      <td>`cm`</td>
      <td>Tamaño en centímetros</td>
    </tr>
    <tr>
      <td>Milímetro</td>
      <td>`mm`</td>
      <td>Tamaño en milímetros</td>
    </tr>
    <tr>
      <td>Pulgada</td>
      <td>`in`</td>
      <td>Tamaño en pulgadas (1 in = 2,54 cm)</td>
    </tr>
    <tr>
      <td>Punto</td>
      <td>`pt`</td>
      <td>Tamaño en puntos (1 pt equivale a 1/72 de pulgada)</td>
    </tr>
    <tr>
      <td>Pica</td>
      <td>`pc`</td>
      <td>Tamaño en picas (1 pica equivale a 12 puntos)</td>
    </tr>
  </tbody>
</table>

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

<table>
  <thead>
    <tr>
      <th><strong>Palabra clave</strong></th>
      <th><strong>Descripción</strong></th>
      <th><strong>Ejemplo</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`xx-small`</td>
      <td>diminuto</td>
      <td>9 px</td>
    </tr>
    <tr>
      <td>`x-small`</td>
      <td>muy pequeño</td>
      <td>10 px</td>
    </tr>
    <tr>
      <td>`small`</td>
      <td>pequeño</td>
      <td>13 px</td>
    </tr>
    <tr>
      <td>`medium`</td>
      <td>medio (tamaño predeterminado del navegador)</td>
      <td>16 px</td>
    </tr>
    <tr>
      <td>`large`</td>
      <td>grande</td>
      <td>19 px</td>
    </tr>
    <tr>
      <td>`x-large`</td>
      <td>muy grande</td>
      <td>24 px</td>
    </tr>
    <tr>
      <td>`xx-large`</td>
      <td>enorme</td>
      <td>32 px</td>
    </tr>
  </tbody>
</table>

#### Unidades de medida relativas

Las **unidades de medida relativas** definen el tamaño de la fuente en función de un valor ya establecido. Los elementos HTML heredan su tamaño de fuente del elemento padre correspondiente. Como referencia para un tamaño de fuente relativo también puede utilizarse un **valor técnico**, como el tamaño de la pantalla del dispositivo o un valor predeterminado del navegador.

<table>
  <thead>
    <tr>
      <th><strong>Unidad</strong></th>
      <th><strong>Sintaxis CSS</strong></th>
      <th><strong>Descripción</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Porcentaje</td>
      <td>`%`</td>
      <td>La unidad `%` indica el tamaño de la fuente como un porcentaje del tamaño heredado.</td>
    </tr>
    <tr>
      <td>em (altura de fuente)</td>
      <td>`em`</td>
      <td>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 dispositivo.</td>
    </tr>
    <tr>
      <td>Altura x</td>
      <td>`ex`</td>
      <td>El valor de referencia de `ex` es la altura de la letra minúscula *x* de la tipografía utilizada. Si la fuente no define altura x, se aplica `1ex = 0.5em`.</td>
    </tr>
    <tr>
      <td>Root-em</td>
      <td>`rem`</td>
      <td>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.</td>
    </tr>
    <tr>
      <td>Anchura del viewport</td>
      <td>`vw`</td>
      <td>La unidad `vw` se basa en la anchura del área visible (viewport) del dispositivo. `1vw` equivale al 1 % de la anchura del viewport.</td>
    </tr>
    <tr>
      <td>Altura del viewport</td>
      <td>`vh`</td>
      <td>La unidad `vh` se basa en la altura del área visible del dispositivo. `1vh` equivale al 1 % de la altura del viewport.</td>
    </tr>
  </tbody>
</table>

El tamaño de la fuente también puede definirse mediante **palabras clave relativas**. En este caso, el valor de referencia es el tamaño de fuente predeterminado del navegador.

<table>
  <thead>
    <tr>
      <th><strong>Relativo</strong></th>
      <th><strong>Descripción</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`smaller`</td>
      <td>El elemento actual se muestra más pequeño que el elemento padre.</td>
    </tr>
    <tr>
      <td>`larger`</td>
      <td>El elemento actual se muestra más grande que el elemento padre.</td>
    </tr>
  </tbody>
</table>

Para garantizar una visualización óptima del texto en distintos dispositivos, se recomienda **utilizar unidades relativas como `em` o `%`**.

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

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

#### `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 porcentajes se calculan en relación con la `font-size` del texto correspondiente. Alternativamente, puedes indicar `line-height` como un valor numérico sin unidad. Otros valores posibles son `normal` (valor predeterminado) 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`.

```css
.contenido {
line-height: 1.5;
}
```

#### `font-weight`

La propiedad CSS `font-weight` define el **grosor del trazo** de un elemento de texto. Los diseñadores la utilizan para mostrar partes del texto en negrita. Los valores pueden especificarse de forma absoluta o en relación con el elemento padre.

<table>
  <thead>
    <tr>
      <th><strong>Valores absolutos de la propiedad `font-weight`</strong></th>
      <th><strong>Descripción</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1–1000</td>
      <td>valores numéricos de 1 (extrafino) a 1000 (extragrueso)</td>
    </tr>
    <tr>
      <td>`normal`</td>
      <td>grosor normal (equivale al valor 400)</td>
    </tr>
    <tr>
      <td>`bold`</td>
      <td>negrita (equivale al valor 700)</td>
    </tr>
  </tbody>
</table>

Los valores numéricos solo son relevantes al trabajar con [fuentes web](https://www.ionos.com/es-us/digitalguide/paginas-web/diseno-web/el-poder-de-las-tipografias-modernas/). Por ello, en la práctica suelen ser suficientes **dos grosores de trazo**: `normal` y `bold`.

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

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.

<table>
  <thead>
    <tr>
      <th><strong>Valores relativos de la propiedad `font-weight`</strong></th>
      <th><strong>Descripción</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`bolder`</td>
      <td>más grueso que en el elemento padre</td>
    </tr>
    <tr>
      <td>`lighter`</td>
      <td>más fino que en el elemento padre</td>
    </tr>
  </tbody>
</table>

### Formato de texto

Además de la tipografía, CSS ofrece diversas **propiedades para el formato del texto**. Estas permiten definir la alineación del texto, el espaciado entre caracteres y palabras, así como aplicar decoraciones a los elementos textuales.

#### `text-align`

La propiedad CSS `text-align` se utiliza para la **alineación de texto y de elementos inline**, es decir, elementos integrados en el flujo del texto, como imágenes o botones. Los valores habituales son:

- `left` (alineado a la izquierda)
- `right` (alineado a la derecha)
- `center` (centrado)
- `justify` (justificado)
- `inherit` (hereda el valor del elemento padre)

El siguiente código centra el texto de ejemplo:

```css
.contenido {
text-align: center;
}
```

Otros valores de la propiedad `text-align` definen la **alineación del texto en relación con la dirección de escritura** (`direction`).

<table>
  <thead>
    <tr>
      <th><strong>Valores para la alineación relativa del texto</strong></th>
      <th><strong>Descripción</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`start`</td>
      <td>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`.</td>
    </tr>
    <tr>
      <td>`end`</td>
      <td>El texto se alinea hacia el lado donde termina.</td>
    </tr>
  </tbody>
</table>

El valor `start` se considera el valor predeterminado.

Todos los navegadores habituales muestran automáticamente **la última línea de un texto justificado** alineada a la izquierda. Si este comportamiento no es deseado, puede modificarse de forma independiente 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 configurar la **separación automática de sílabas**. El lenguaje de hojas de estilo pone a disposición los siguientes valores para la propiedad `hyphens`:

<table>
  <thead>
    <tr>
      <th>Valores de la propiedad `hyphens`</th>
      <th>Descripción</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`manual`</td>
      <td>Separación manual de sílabas: se tienen en cuenta los guiones blandos al dividir palabras (valor predeterminado).</td>
    </tr>
    <tr>
      <td>`none`</td>
      <td>Sin separación de sílabas: los guiones blandos no se consideran y los saltos de línea solo se realizan en los espacios.</td>
    </tr>
    <tr>
      <td>`auto`</td>
      <td>Separación automática de sílabas: la división de palabras se realiza según las reglas del idioma definido mediante el atributo HTML `lang`.</td>
    </tr>
    <tr>
      <td>`inherit`</td>
      <td>La configuración se hereda del elemento padre.</td>
    </tr>
  </tbody>
</table>

#### `word-spacing`

La propiedad CSS `word-spacing` regula el **espacio entre palabras** dentro de un elemento de texto. Las personas responsables de una página web pueden definir la distancia entre palabras mediante **valores de tamaño**. Para ello están disponibles las mismas unidades de medida que en `font-size`, con la excepción del porcentaje. Otros valores posibles para la propiedad `word-spacing` son `normal` (valor predeterminado) 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 predeterminado:

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

#### `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 porcentajes), 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`:

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

#### `text-indent`

La propiedad CSS `text-indent` permite definir **sangrías** que afectan únicamente a la primera línea de un párrafo. Se pueden utilizar valores positivos, negativos o porcentuales en relación con la anchura del **bloque de texto** correspondiente.

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`:

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

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 **decoraciones** a los elementos de texto, como subrayados. Los valores posibles son:

<table>
  <thead>
    <tr>
      <th><strong>Valores de la propiedad `text-decoration`</strong></th>
      <th><strong>Descripción</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`none`</td>
      <td>Sin decoración de texto</td>
    </tr>
    <tr>
      <td>`underline`</td>
      <td>Cada línea del fragmento de texto se muestra subrayada.</td>
    </tr>
    <tr>
      <td>`overline`</td>
      <td>Se muestra una línea sobre cada línea del texto.</td>
    </tr>
    <tr>
      <td>`line-through`</td>
      <td>Cada línea del texto se muestra tachada.</td>
    </tr>
    <tr>
      <td>`inherit`</td>
      <td>La decoración del texto se hereda del elemento padre.</td>
    </tr>
  </tbody>
</table>

El siguiente ejemplo define subrayados para determinados grupos de palabras dentro de un texto:

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

#### `text-transform`

La propiedad `text-transform` permite realizar **transformaciones de texto mediante CSS**. De este modo, los textos pueden mostrarse en mayúsculas o minúsculas sin modificar el contenido original. Esta propiedad admite las siguientes transformaciones:

<table>
  <thead>
    <tr>
      <th><strong>Valores de la propiedad `text-transform`</strong></th>
      <th><strong>Descripción</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`capitalize`</td>
      <td>La primera letra de cada palabra se muestra en mayúscula.</td>
    </tr>
    <tr>
      <td>`uppercase`</td>
      <td>Todo el texto se muestra en mayúsculas.</td>
    </tr>
    <tr>
      <td>`lowercase`</td>
      <td>Todo el texto se muestra en minúsculas.</td>
    </tr>
    <tr>
      <td>`none`</td>
      <td>No se aplica ninguna transformación.</td>
    </tr>
    <tr>
      <td>`inherit`</td>
      <td>La transformación se hereda del elemento padre.</td>
    </tr>
  </tbody>
</table>

Si se desea que las letras iniciales de un fragmento se muestren en mayúsculas independientemente del texto original, puede utilizarse el siguiente formato:

```css
.contenido {
text-transform: capitalize;
}
```

### Colores de texto y de fondo

Al elegir colores de texto y de fondo, los diseñadores web suelen recurrir a los códigos de color ya explicados en formato decimal o hexadecimal. Varias propiedades CSS utilizan estos códigos de color.

#### `color`

La propiedad CSS `color` se utiliza para **definir el color del texto**. Los valores habituales incluyen colores en formato RGB, códigos hexadecimales o valores HSL. Además, los valores `transparent` y `opacity` permiten mostrar elementos de forma invisible. El siguiente ejemplo muestra la definición del color del texto mediante un código hexadecimal:

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

#### `background-color`

La propiedad CSS `background-color` se utiliza cuando se desea asignar un **color de fondo** a un elemento. Los valores disponibles son los mismos que para la propiedad `color`.

El siguiente ejemplo muestra una **combinación de color de texto y color de fondo**:

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

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 alternativa a un color de fondo, puede cargarse una **imagen como fondo** de un elemento. Los diseñadores utilizan para ello la propiedad `background-image`, cuyo valor indica la ruta del archivo gráfico según la siguiente sintaxis:

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

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

Además, CSS permite definir **degradados de color como fondos**:

<table>
  <thead>
    <tr>
      <th><strong>Degradados de color en CSS</strong></th>
      <th><strong>Descripción</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`linear-gradient()`</td>
      <td>La función crea un degradado lineal.</td>
    </tr>
    <tr>
      <td>`radial-gradient()`</td>
      <td>La función crea un degradado radial.</td>
    </tr>
    <tr>
      <td>`repeating-linear-gradient()`</td>
      <td>La función crea un degradado lineal repetido.</td>
    </tr>
    <tr>
      <td>`repeating-radial-gradient()`</td>
      <td>La función crea un degradado radial repetido.</td>
    </tr>
  </tbody>
</table>

En esta introducció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 argumentos**. El formato en el que se definan los colores no es relevante.

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

### Bordes

CSS también permite añadir **bordes** a los elementos HTML. Esto resulta especialmente útil para los llamados **elementos de nivel de bloque** (block-level elements), como encabezados, párrafos, [elementos `div`](https://www.ionos.com/es-us/digitalguide/paginas-web/desarrollo-web/html-div/) o [tablas HTML](https://www.ionos.com/es-us/digitalguide/paginas-web/desarrollo-web/tablas-en-html/), que aparecen dentro del elemento `body`. Sin formato adicional, estos bloques de contenido se extienden a lo ancho de todo el espacio disponible y se colocan uno debajo del otro.

Los elementos de nivel de bloque se diferencian 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 determinada exclusivamente 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`. Alternativamente, es posible definir el **diseño del borde** de cada lado del elemento por separado.

<table>
  <thead>
    <tr>
      <th><strong>Propiedades para bordes</strong></th>
      <th><strong>Descripción</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`border`</td>
      <td>Define las propiedades del borde para todos los lados del elemento.</td>
    </tr>
    <tr>
      <td>`border-top`</td>
      <td>Define las propiedades del borde superior.</td>
    </tr>
    <tr>
      <td>`border-right`</td>
      <td>Define las propiedades del borde derecho.</td>
    </tr>
    <tr>
      <td>`border-bottom`</td>
      <td>Define las propiedades del borde inferior.</td>
    </tr>
    <tr>
      <td>`border-left`</td>
      <td>Define las propiedades del borde izquierdo.</td>
    </tr>
  </tbody>
</table>

Tanto la propiedad `border` como las propiedades de los lados individuales del borde pueden especificarse con mayor detalle. Los valores correspondientes se indican tras la propiedad, separados por espacios, según el siguiente esquema:

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

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

#### Tipo de borde

Al elegir un tipo de borde, defines un **borde decorativo** para el elemento de nivel de bloque o inline correspondiente. Algunos tipos de borde solo se aprecian correctamente cuando se establece un ancho de borde adecuado.

<table>
  <thead>
    <tr>
      <th><strong>Valores posibles para el tipo de borde</strong></th>
      <th><strong>Descripción</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`none`</td>
      <td>Sin borde</td>
    </tr>
    <tr>
      <td>`hidden`</td>
      <td>No muestra ningún borde y también lo suprime en celdas de tabla adyacentes</td>
    </tr>
    <tr>
      <td>`dotted`</td>
      <td>Define un borde punteado</td>
    </tr>
    <tr>
      <td>`dashed`</td>
      <td>Define un borde discontinuo</td>
    </tr>
    <tr>
      <td>`solid`</td>
      <td>Define un borde continuo</td>
    </tr>
    <tr>
      <td>`double`</td>
      <td>Define un borde doble</td>
    </tr>
    <tr>
      <td>`groove`, `ridge`, `inset`, `outset`</td>
      <td>Permiten crear distintos efectos 3D</td>
    </tr>
  </tbody>
</table>

La siguiente imagen compara los **tipos de borde en CSS**:

[![Imagen: Tipos de borde en CSS](https://www.ionos.com/es-us/digitalguide/fileadmin/_processed_/e/d/csm_css-border-types_50ce263eda.webp "Tipos de borde en CSS")](https://www.ionos.com/es-us/digitalguide/fileadmin/DigitalGuide/Screenshots_2025/css-border-types.jpg) Existen distintos tipos de bordes en CSS con apariencias visuales diferentes. La **definición del tipo de borde es obligatoria**. Si no se especifica 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.

<table>
  <thead>
    <tr>
      <th><strong>Valores posibles para el ancho del borde</strong></th>
      <th><strong>Descripción</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Valor de longitud</td>
      <td>El ancho del borde se especifica mediante las unidades de medida descritas en `font-size`. No es posible indicar el ancho del borde en porcentajes.</td>
    </tr>
    <tr>
      <td>`thin`</td>
      <td>fino</td>
    </tr>
    <tr>
      <td>`medium`</td>
      <td>grosor medio</td>
    </tr>
    <tr>
      <td>`thick`</td>
      <td>grueso</td>
    </tr>
  </tbody>
</table>

#### Color del borde

Las opciones de color para la propiedad `border-color` coinciden con las de las propiedades `color` y `background-color`.

<table>
  <thead>
    <tr>
      <th><strong>Valores posibles para el color del borde</strong></th>
      <th><strong>Descripción</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Valores de color</td>
      <td>El color del borde puede definirse mediante palabras clave, valores HEX o valores RGB o HSL.</td>
    </tr>
    <tr>
      <td>`transparent`</td>
      <td>Define el borde como invisible.</td>
    </tr>
  </tbody>
</table>

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

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

#### `border-radius`

La propiedad `border-radius` permite **redondear las esquinas de un borde** con formas circulares o elípticas. El fondo existente se recorta siguiendo la curva definida, lo que funciona incluso si el elemento no tiene borde. Usada correctamente, `border-radius` también permite crear formas geométricas sencillas.

Los valores posibles para la propiedad `border-radius` son hasta cuatro medidas, cada una correspondiente a una esquina del borde. La asignación puede hacerse con uno, dos, tres o cuatro valores.

<table>
  <thead>
    <tr>
      <th><strong>Valores de la propiedad `border-radius`</strong></th>
      <th><strong>Descripción</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Un valor</td>
      <td>El valor se aplica a las cuatro esquinas.</td>
    </tr>
    <tr>
      <td>Dos valores</td>
      <td>El primer valor define las esquinas superior izquierda e inferior derecha. El segundo valor define las esquinas superior derecha e inferior izquierda.</td>
    </tr>
    <tr>
      <td>Tres valores</td>
      <td>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.</td>
    </tr>
    <tr>
      <td>Cuatro valores</td>
      <td>Cada esquina se define con un valor propio, siguiendo el sentido de las agujas del reloj: superior izquierda, superior derecha, inferior derecha, inferior izquierda.</td>
    </tr>
  </tbody>
</table>

Los valores del **radio del borde** se escriben separados por espacios a continuación de la propiedad `border-radius`. El esquema general de la declaración es el siguiente (los valores numéricos son solo un ejemplo):

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

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`:

```css
.borde {
height: 100px;
width: 600px;
border: solid 10px #d82451;
border-radius: 2em;
}
```

[![Imagen: Borde con esquinas redondeadas](https://www.ionos.com/es-us/digitalguide/fileadmin/_processed_/6/4/csm_css-rounded-corners_d1e1f17f8c.webp "Borde con esquinas redondeadas")](https://www.ionos.com/es-us/digitalguide/fileadmin/DigitalGuide/Screenshots_2025/css-rounded-corners.jpg) Un valor de 2em da lugar a esquinas redondeadas de forma uniforme. De forma alternativa, es posible definir **valores distintos para cada una de las cuatro esquinas**:

```css
.borde {
height: 100px;
width: 600px;
border: solid 10px #d82451;
border-radius: 2em 1em 3em 4em;
}
```

[![Imagen: Borde con esquinas redondeadas: se ha definido un valor distinto para cada esquina](https://www.ionos.com/es-us/digitalguide/fileadmin/_processed_/e/5/csm_css-various-rounded-corners_a18bfed27a.webp "Borde con esquinas redondeadas: se ha definido un valor distinto para cada esquina")](https://www.ionos.com/es-us/digitalguide/fileadmin/DigitalGuide/Screenshots_2025/css-various-rounded-corners.jpg) Para cada esquina puede establecerse 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 declaración de un borde con esquinas elípticas puede incluir hasta ocho valores:

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

Los valores situados antes de la barra (`/`) definen el radio en el eje horizontal de la elipse, mientras que los valores situados después de la barra determinan el radio en el eje vertical.

```css
.borde {
height: 100px;
width: 600px;
border: solid 10px #d82451;
border-radius: 1em 4em / 4em 1em;
}
```

[![Imagen: Borde con esquinas redondeadas de forma elíptica](https://www.ionos.com/es-us/digitalguide/fileadmin/_processed_/2/f/csm_css-elliptically-rounded-edges_e0d03d1182.webp "Borde con esquinas redondeadas de forma elíptica")](https://www.ionos.com/es-us/digitalguide/fileadmin/DigitalGuide/Screenshots_2025/css-elliptically-rounded-edges.jpg) Las esquinas también pueden redondearse de forma elíptica. Un fondo existente se recorta automáticamente siguiendo la curva definida.

```css
.borde {
height: 100px;
width: 600px;
border: solid 10px #d82451;
border-radius: 2em;
background-color: #24d8ab;
}
```

[![Imagen: Borde con esquinas redondeadas y fondo ajustado](https://www.ionos.com/es-us/digitalguide/fileadmin/_processed_/7/3/csm_css-rounded-corners-background_927c19dc84.webp "Borde con esquinas redondeadas y fondo ajustado")](https://www.ionos.com/es-us/digitalguide/fileadmin/DigitalGuide/Screenshots_2025/css-rounded-corners-background.jpg) El fondo se adapta automáticamente 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](https://www.ionos.com/es-us/digitalguide/fileadmin/_processed_/0/7/csm_css-rounded-corners-text_6b0678c2dd.webp "Los elementos de texto no se adaptan automáticamente a los bordes redondeados")](https://www.ionos.com/es-us/digitalguide/fileadmin/DigitalGuide/Screenshots_2025/css-rounded-corners-text.jpg) Los elementos de texto deben alinearse por separado. ### Posicionamiento

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, independientemente de si forman parte del flujo del documento o también están posicionadas, no influyen en la posición de una caja formateada de este modo.

La propiedad `position` admite distintos valores, que pueden especificarse con mayor detalle mediante las propiedades `left`, `right`, `top` y `bottom`, junto con sus correspondientes valores de medida:

<table>
  <thead>
    <tr>
      <th><strong>Valores de la propiedad `position`</strong></th>
      <th><strong>Descripción</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`absolute`</td>
      <td>Posiciona la caja en relación con el elemento contenedor más cercano que tenga definida una `position`.</td>
    </tr>
    <tr>
      <td>`relative`</td>
      <td>Posiciona la caja en relación con su posición normal dentro del flujo del documento.</td>
    </tr>
    <tr>
      <td>`fixed`</td>
      <td>Posiciona la caja en relación con la ventana del navegador y permanece fija al hacer scroll.</td>
    </tr>
    <tr>
      <td>`static`</td>
      <td>Posición natural de la caja dentro del flujo del texto. Con `position: static`, los valores de posicionamiento no tienen efecto. Es el valor predeterminado.</td>
    </tr>
    <tr>
      <td>`sticky`</td>
      <td>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 considerarse una combinación de `relative` y `fixed`.</td>
    </tr>
  </tbody>
</table>

#### Posicionamiento absoluto

Con `position: absolute`, la caja se saca del flujo del documento y se **posiciona en el lugar definido por las propiedades indicadas a continuación**. Estas referencias 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 referencia el elemento raíz `<html>`. Las cajas con `position: absolute` no influyen en la posición de otros elementos y pueden superponerse a ellos o quedar cubiertas por estos.

Los siguientes conjuntos de reglas muestran el posicionamiento absoluto de las cajas CSS `.rojo`, `.azul` y `.verde` dentro del elemento contenedor `.fondo`:

```css
.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;
}
```

Las cajas de contenido `.rojo`, `.azul` y `.verde` se han formateado como superficies semitransparentes con unas dimensiones de 150 px × 150 px. La caja de contenido `.fondo`, con unas dimensiones de 500 px × 500 px, está rodeada por un borde gris.

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

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

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 semitransparentes ilustra claramente la posibilidad de superposición al utilizar posicionamiento absoluto.

[![Imagen: Posicionamiento absoluto de cajas CSS](https://www.ionos.com/es-us/digitalguide/fileadmin/_processed_/b/2/csm_css-position-absolute_9d1ed0e3c7.webp "Posicionamiento absoluto de cajas CSS")](https://www.ionos.com/es-us/digitalguide/fileadmin/DigitalGuide/Screenshots_2025/css-position-absolute.jpg) Tres cajas CSS transparentes con distinto posicionamiento absoluto. #### Posicionamiento relativo

Con el posicionamiento relativo, la caja **permanece integrada en el flujo normal del documento**, pero puede desplazarse mediante valores de posicionamiento 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 desplazado.

Para desplazar una caja a partir de su posición dentro del flujo del documento, el conjunto de reglas correspondiente se amplía con la declaración `position: relative` y con los valores de posicionamiento deseados.

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

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

La regla `position: relative` junto con la indicació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](https://www.ionos.com/es-us/digitalguide/fileadmin/_processed_/6/8/csm_css-position-relative_9c6bf62d8b.webp "Posicionamiento relativo a partir del flujo natural del documento")](https://www.ionos.com/es-us/digitalguide/fileadmin/DigitalGuide/Screenshots_2025/css-position-relative.jpg) Mediante el posicionamiento relativo, la caja azul se desplaza. El posicionamiento relativo también puede aplicarse a elementos flotados.

#### Cajas CSS fijadas

La alineación de las cajas fijadas funciona de forma similar al posicionamiento absoluto, es decir, fuera del flujo del documento. Todas las indicaciones 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 navegació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 navegadores representan y posicionan los elementos HTML como superficies rectangulares (“cajas”). En esencia, toda página web se compone de la interacción de estas cajas, cuya disposición viene determinada 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 visualizarse en las siguientes ilustraciones:

[![Imagen: Tres cajas de bloque en el flujo de elementos CSS](https://www.ionos.com/es-us/digitalguide/fileadmin/_processed_/3/e/csm_css-three-blocks_07c38c340f.webp "Tres cajas de bloque en el flujo de elementos CSS")](https://www.ionos.com/es-us/digitalguide/fileadmin/DigitalGuide/Screenshots_2025/css-three-blocks.jpg) Flujo de elementos CSS: las cajas de bloque se muestran cada una en una fila nueva. Las **cajas de bloque** estructuran el diseño de la página, mientras que las **cajas inline** se encargan del texto y de los elementos integrados en él. Los contenedores vacíos como `<div>` suelen utilizarse únicamente para la agrupación y el formateo mediante CSS.

<table>
  <thead>
    <tr>
      <th><strong>Niveles del modelo de cajas</strong></th>
      <th><strong>Descripción</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Área de contenido (content box)</td>
      <td>Superficie cuyo tamaño viene determinado por la cantidad de texto o por las dimensiones de una imagen. En los elementos de nivel de bloque, la altura y la anchura pueden definirse mediante las propiedades `height` y `width`. En los elementos inline, este tipo de formateo no está disponible.</td>
    </tr>
    <tr>
      <td>Relleno (padding box)</td>
      <td>La *padding box* (padding = relleno) define la distancia entre la content box y la border box.</td>
    </tr>
    <tr>
      <td>Borde (border box)</td>
      <td>La *border box* define el borde del elemento.</td>
    </tr>
    <tr>
      <td>Margen (margin box)</td>
      <td>La *margin box* define la distancia entre el elemento actual y su elemento padre o los elementos adyacentes. La propiedad `margin` también puede aceptar valores negativos.</td>
    </tr>
  </tbody>
</table>

Si se desea dar formato a los cuatro lados de una caja al mismo tiempo, se utilizan las propiedades `padding`, `border` y `margin`:

<table>
  <thead>
    <tr>
      <th></th>
      <th><strong>Relleno</strong></th>
      <th><strong>Borde</strong></th>
      <th><strong>Margen</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>arriba</td>
      <td>`padding-top`</td>
      <td>`border-top`</td>
      <td>`margin-top`</td>
    </tr>
    <tr>
      <td>abajo</td>
      <td>`padding-bottom`</td>
      <td>`border-bottom`</td>
      <td>`margin-bottom`</td>
    </tr>
    <tr>
      <td>izquierda</td>
      <td>`padding-left`</td>
      <td>`border-left`</td>
      <td>`margin-left`</td>
    </tr>
    <tr>
      <td>derecha</td>
      <td>`padding-right`</td>
      <td>`border-right`</td>
      <td>`margin-right`</td>
    </tr>
  </tbody>
</table>

Los valores posibles para las propiedades indicadas son valores de tamaño, así como `inherit` (heredado del elemento padre). Además, los márgenes exteriores pueden definirse también mediante el valor `auto`.

La siguiente imagen muestra la estructura esquemática del **modelo de cajas en CSS**:

[![Imagen: Modelo de cajas en CSS](https://www.ionos.com/es-us/digitalguide/fileadmin/_processed_/5/3/csm_css-box-model_dc7a85cd37.webp "Modelo de cajas en CSS")](https://www.ionos.com/es-us/digitalguide/fileadmin/DigitalGuide/Screenshots_2025/css-box-model.jpg) Representación esquemática del modelo de cajas CSS. ### El modelo de cajas en CSS en la práctica

El modelo de cajas en CSS puede entenderse fácilmente 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**:

```html
<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>
```

El siguiente conjunto de reglas define para la **caja de contenido** unas dimensiones de 150 px × 150 px. Además, se establecen letras negras sobre fondo gris y se alinea el texto en justificado:

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

Aplicadas al fragmento de texto, estas reglas de estilo dan lugar a la siguiente representación en el navegador web:

[![Imagen: Caja de contenido sin relleno, borde ni margen](https://www.ionos.com/es-us/digitalguide/fileadmin/_processed_/1/f/csm_css-box-model-standard_edb38fb300.webp "Caja de contenido sin relleno, borde ni margen")](https://www.ionos.com/es-us/digitalguide/fileadmin/DigitalGuide/Screenshots_2025/css-box-model-standard.jpg) 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 disponible. El fondo queda directamente 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 diseñadores** definir un relleno para separar los elementos de texto de los elementos de diseño circundantes.

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

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

[![Imagen: Caja de contenido con relleno](https://www.ionos.com/es-us/digitalguide/fileadmin/_processed_/f/2/csm_css-box-model-padding_b788425ee7.webp "Caja de contenido con relleno")](https://www.ionos.com/es-us/digitalguide/fileadmin/DigitalGuide/Screenshots_2025/css-box-model-padding.jpg) 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.

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

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](https://www.ionos.com/es-us/digitalguide/fileadmin/_processed_/4/4/csm_css-box-model-border_d3bfe42d12.webp "Caja de contenido con relleno y borde")](https://www.ionos.com/es-us/digitalguide/fileadmin/DigitalGuide/Screenshots_2025/css-box-model-border.jpg) 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 formateada de esta manera se sitúa sin separació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 declaración correspondiente al conjunto de reglas existente:

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

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

[![Imagen: Caja de contenido con relleno, borde y margen](https://www.ionos.com/es-us/digitalguide/fileadmin/_processed_/d/8/csm_css-box-model-margin_793102d75a.webp "Caja de contenido con relleno, borde y margen")](https://www.ionos.com/es-us/digitalguide/fileadmin/DigitalGuide/Screenshots_2025/css-box-model-margin.jpg) La propiedad `margin` impone un margen exterior entre el borde y el elemento padre. Como alternativa a una medida concreta, la propiedad `margin` puede definirse con el **valor `auto`**. En este caso, la caja se centra automáticamente **en horizontal** 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 calcularse sumando los valores de todos los componentes relevantes de la caja.

### Formato de cajas con `float`

Cuando la caja que se va a formatear es una **caja de bloque**, las cajas siguientes pasan automáticamente a la línea siguiente según el flujo normal de los elementos.

En la práctica, este salto de línea automático 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.

<table>
  <thead>
    <tr>
      <th>Valores de la propiedad `float`</th>
      <th>Descripción</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`none`</td>
      <td>No se produce ningún desplazamiento del elemento. `float: none;` es el valor predeterminado de una caja CSS.</td>
    </tr>
    <tr>
      <td>`left`</td>
      <td>La caja de bloque se desplaza hasta el borde interior izquierdo del elemento padre.</td>
    </tr>
    <tr>
      <td>`right`</td>
      <td>La caja de bloque se desplaza hasta el borde interior derecho del elemento padre.</td>
    </tr>
    <tr>
      <td>`inherit`</td>
      <td>El valor de `float` se hereda del elemento padre.</td>
    </tr>
  </tbody>
</table>

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`:

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

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:

```html
<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>
```

[![Imagen: Dos cajas de bloque alineadas a la izquierda mediante elementos flotados](https://www.ionos.com/es-us/digitalguide/fileadmin/_processed_/6/6/csm_css-boxmodell-float_7645e5270d.webp "Dos cajas de bloque alineadas a la izquierda mediante elementos flotados")](https://www.ionos.com/es-us/digitalguide/fileadmin/DigitalGuide/Screenshots_2025/css-boxmodell-float.jpg) Con la propiedad `float` es posible mostrar cajas de bloque una junto a otra sin salto de línea. El gran espacio intermedio se produce porque los márgenes exteriores de ambas cajas se suman. Sin los elementos flotados, los márgenes exteriores de los elementos adyacentes pueden colapsar.

## Diseño web adaptativo con CSS

Para crear [diseño web adaptativo](https://www.ionos.com/es-us/digitalguide/paginas-web/diseno-web/que-es-el-diseno-responsivo/) con CSS, el lenguaje de hojas de estilo ofrece dos técnicas modernas de maquetación: [Flexbox](https://www.ionos.com/es-us/digitalguide/paginas-web/creacion-de-paginas-web/css-flexbox/) y [Grid](https://www.ionos.com/es-us/digitalguide/paginas-web/creacion-de-paginas-web/css-grid-layout/). Ambos sistemas adaptan los contenidos de forma dinámica a distintos tamaños de pantalla. En combinación con las [media queries de CSS](https://www.ionos.com/es-us/digitalguide/paginas-web/diseno-web/css-media-queries/), los diseños pueden ajustarse de manera precisa a diferentes dispositivos y anchuras de pantalla.

### Flexbox

Con CSS Flexbox (Flexible Box Layout) es posible crear **diseños unidimensionales de forma especialmente sencilla**. Flexbox alinea los contenidos en horizontal o en vertical, por lo que resulta ideal para menús de navegación, galerías o áreas de contenido modulares.

Un contenedor flex se define mediante la propiedad `display: flex;`. Todos los elementos hijos directos se convierten automáticamente en elementos flexibles (flex items), cuya posición, orden y tamaño pueden controlarse de forma flexible.

<table>
  <thead>
    <tr>
      <th><strong>Propiedad</strong></th>
      <th><strong>Descripción</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`flex-direction`</td>
      <td>Determina la dirección principal de los elementos flexibles. El valor `row` se utiliza para una disposición horizontal y `column` para una vertical. `row-reverse` y `column-reverse` invierten la dirección.</td>
    </tr>
    <tr>
      <td>`justify-content`</td>
      <td>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 distribución del espacio entre los elementos (sin espacio en los extremos, espacio alrededor de cada elemento y espacio uniforme entre todos).</td>
    </tr>
    <tr>
      <td>`align-items`</td>
      <td>Alinea los elementos flexibles a lo largo del eje transversal. 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 contenedor.</td>
    </tr>
    <tr>
      <td>`flex-wrap`</td>
      <td>Define si los elementos flexibles pueden pasar a una nueva línea. Con `nowrap` (valor predeterminado) todos permanecen en una sola línea. Con `wrap` y `wrap-reverse` se permiten saltos de línea (opcionalmente en sentido inverso).</td>
    </tr>
    <tr>
      <td>`gap`</td>
      <td>Define el espacio entre los elementos flexibles.</td>
    </tr>
  </tbody>
</table>

El siguiente ejemplo muestra una disposición horizontal de elementos con un espacio uniforme entre ellos:

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

Estas reglas se aplican al siguiente HTML:

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

Además, el comportamiento de cada elemento flexible puede controlarse de forma individual. 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 duplicación:

```css
.elemento1 { flex: 2; }
```

### Maquetación con CSS Grid

Con CSS Grid, los contenidos de una página web pueden organizarse en un **sistema bidimensional de filas y columnas**. Este sistema permite un control preciso de la estructura, lo que facilita la creación de maquetaciones complejas de forma flexible. Para crear una cuadrícula, se asigna la propiedad `display: grid;` al elemento padre. Todos sus elementos hijos directos pasan a ser **elementos de cuadrícula**. A partir de ahí, el sistema se ajusta mediante distintas propiedades.

<table>
  <thead>
    <tr>
      <th><strong>Propiedad</strong></th>
      <th><strong>Descripción</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`grid-template-columns`</td>
      <td>Define la estructura de columnas de la cuadrícula. La unidad más importante es `fr`, que indica qué proporción del espacio disponible se utiliza. Con `auto`, la distribución se realiza automáticamente.</td>
    </tr>
    <tr>
      <td>`grid-template-rows`</td>
      <td>Define la estructura de filas de la cuadrícula. Los valores disponibles son los mismos que en `grid-template-columns`.</td>
    </tr>
    <tr>
      <td>`gap`</td>
      <td>Determina el espacio entre los elementos de cuadrícula.</td>
    </tr>
    <tr>
      <td>`justify-items`</td>
      <td>Define la alineación horizontal de los elementos de cuadrícula. `start` alinea a la izquierda, `end` a la derecha y `center` centra los elementos. El valor predeterminado `stretch` hace que ocupen toda la celda.</td>
    </tr>
    <tr>
      <td>`align-items`</td>
      <td>Define la alineación vertical de los elementos de cuadrícula. Utiliza los mismos valores que `justify-items`.</td>
    </tr>
  </tbody>
</table>

El siguiente ejemplo muestra la creación de una cuadrícula con tres columnas de igual anchura y dos filas, utilizando valores `fr` uniformes:

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

Además, cada elemento de cuadrícula puede **posicionarse de forma específica**, por ejemplo para ocupar varias columnas o filas. Para ello se utilizan las propiedades `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:

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

### Media queries

Las media queries permiten aplicar **reglas CSS en función de las características del dispositivo**. De este modo, el diseño puede adaptarse a smartphones, tablets o pantallas de escritorio sin necesidad de crear varios archivos HTML. Con una media query es posible activar o sobrescribir estilos cuando se cumplen determinadas condiciones. El caso más habitual es la adaptación a distintas anchuras del viewport, para lo que se utilizan las siguientes directivas:

<table>
  <thead>
    <tr>
      <th><strong>Propiedad / sintaxis</strong></th>
      <th><strong>Descripción</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`@media`</td>
      <td>Inicia una media query.</td>
    </tr>
    <tr>
      <td>`screen`, `print`, `all`</td>
      <td>Define el tipo de medio al que se aplican las reglas.</td>
    </tr>
    <tr>
      <td>`min-width`</td>
      <td>Activa reglas CSS a partir de una anchura mínima.</td>
    </tr>
    <tr>
      <td>`max-width`</td>
      <td>Activa reglas CSS hasta una anchura máxima.</td>
    </tr>
  </tbody>
</table>

El siguiente ejemplo muestra cómo utilizar una media query para modificar la maquetación por debajo de una anchura determinada:

```css
/ *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;
}
}
```

También es posible combinar varias condiciones, por ejemplo para aplicar estilos solo en tablets en orientación vertical:

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

## Variables CSS

Las variables CSS (también llamadas *custom properties*) permiten **almacenar valores de forma centralizada y reutilizarlos varias veces** dentro de la hoja de estilos. De este modo, colores, espaciados o tamaños de fuente pueden modificarse 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()`.

<table>
  <thead>
    <tr>
      <th><strong>Sintaxis</strong></th>
      <th><strong>Descripción</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>`--nombre-variable`</td>
      <td>Define una variable personalizada.</td>
    </tr>
    <tr>
      <td>`var(--nombre-variable)`</td>
      <td>Recupera el valor de una variable definida.</td>
    </tr>
    <tr>
      <td>`:root`</td>
      <td>Ámbito global (corresponde al elemento HTML raíz).</td>
    </tr>
  </tbody>
</table>

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

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

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 automáticamente a partir de las variables definidas**.


This is a markdown version of: [https://www.ionos.com/es-us/digitalguide/paginas-web/diseno-web/que-es-css-un-tutorial-con-lo-que-necesitas-saber/](https://www.ionos.com/es-us/digitalguide/paginas-web/diseno-web/que-es-css-un-tutorial-con-lo-que-necesitas-saber/) for AI/LLM consumption.