W3docs

Etiqueta HTML <pre>

Usa la etiqueta <pre> para definir texto preformateado, que se presenta exactamente como está escrito en el archivo HTML.

La etiqueta HTML <pre> define texto preformateado — texto que se renderiza exactamente como está escrito en el código fuente, con todos los espacios y saltos de línea conservados. Los navegadores muestran el contenido de un elemento <pre> con una fuente de ancho fijo (monoespaciada). Se usa con mayor frecuencia para mostrar código fuente (generalmente junto con la etiqueta <code>) o cualquier texto donde el autor controla el diseño exacto de las líneas, como un poema o arte ASCII.

Por qué <pre> conserva los espacios en blanco

Por defecto, los navegadores colapsan los espacios en blanco: una secuencia de espacios, tabulaciones y saltos de línea se renderiza como un único espacio, y los saltos de línea en el HTML no tienen efecto visual. Por eso escribir varios espacios o presionar Enter dentro de un párrafo normal no cambia cómo se ve el texto.

El elemento <pre> omite ese comportamiento. Dentro de él, cada espacio, tabulación y salto de línea es significativo y se muestra literalmente — no es necesario usar &nbsp; ni <br> para controlar el espaciado. Internamente, esto equivale a aplicar la declaración CSS white-space: pre, que es el estilo por defecto que los navegadores asignan a <pre>.

Consejo

Usa <pre> siempre que el orden exacto de los caracteres importe: listados de código, salida de línea de comandos, texto sin formato en forma de tabla o arte creado con caracteres.

Sintaxis

La etiqueta <pre> va en pares. El contenido se escribe entre las etiquetas de apertura (<pre>) y de cierre (</pre>). Ten en cuenta que el texto generalmente comienza en la línea siguiente a la etiqueta de apertura, y cualquier sangría que agregues dentro del código fuente aparecerá en la salida.

Los elementos en línea se colocan típicamente dentro de la etiqueta <pre>. Aunque los elementos de bloque están permitidos en HTML5, pueden introducir espacios en blanco o sangría inesperados, por lo que generalmente se prefieren los elementos en línea.

Ejemplo de la etiqueta HTML <pre>

<!DOCTYPE html>
<html>
  <head>
    <title>The title of the document</title>
  </head>
  <body>
    <pre>Spaces
               and line breaks
               within this element 
        are shown as typed.           
    </pre>
  </body>
</html>

Resultado

pre tag example

El patrón <pre><code> para bloques de código

La forma canónica y accesible de mostrar un bloque de código fuente es anidar un elemento <code> dentro de un elemento <pre>:

  • <pre> proporciona el diseño en bloque y conserva los espacios en blanco y los saltos de línea.
  • <code> añade la semántica: marca el contenido como código de computadora en lugar de texto ordinario.

Juntos le indican a los motores de búsqueda y a las tecnologías de asistencia exactamente qué es el contenido. Los lectores de pantalla pueden anunciarlo como una región de código, y las bibliotecas de resaltado de sintaxis (Prism, highlight.js, etc.) apuntan al selector pre > code para colorear el marcado. Usar <pre> solo mantendría el formato pero perdería ese significado, por lo que la combinación es el patrón recomendado.

Ejemplo de la etiqueta HTML <pre> con el elemento <code>

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <pre><code>body {
  color: orange;
}</code></pre>
  </body>
</html>
Advertencia

El espacio en blanco dentro de <pre> es literal, así que coloca la etiqueta de cierre </pre> justo pegada al código (como se muestra arriba). Los saltos de línea iniciales y la sangría entre <pre> y <code> se renderizan, por eso el código fuente muy sangrado puede mostrar líneas en blanco no deseadas y espacios iniciales.

Escapar <, > y & dentro de <pre>

<pre> conserva los espacios en blanco, pero no desactiva el análisis HTML. El navegador sigue leyendo su contenido como marcado. Por lo tanto, si deseas mostrar HTML literal o cualquier contenido que contenga los caracteres <, > o &, debes escaparlos con entidades HTML — de lo contrario, el navegador intentará interpretarlos como etiquetas:

CarácterEntidad
<&lt;
>&gt;
&&amp;

Por ejemplo, para mostrar el texto <p>Hello & welcome</p> debes escribir:

<pre><code>&lt;p&gt;Hello &amp; welcome&lt;/p&gt;</code></pre>

La página entonces muestra los corchetes angulares en lugar de renderizar un párrafo. Consulta la referencia Unicode de HTML para obtener la lista completa de entidades con nombre.

Estilizar <pre> y la propiedad white-space

Los navegadores estilizan <pre> con white-space: pre por defecto. Puedes cambiar cómo el texto preformateado hace saltos de línea usando la propiedad CSS white-space:

ValorSaltos de líneaEspacios / tabulacionesAjuste de línea
preconservadosconservadosnunca ajusta (valor por defecto de <pre>)
pre-wrapconservadosconservadosajusta cuando la línea es muy larga
pre-lineconservadoscolapsadosajusta cuando la línea es muy larga

Dado que pre nunca ajusta el texto, una línea larga de código desbordará su contenedor. La solución habitual es agregar una barra de desplazamiento horizontal con overflow-x: auto, lo que mantiene el formato original y permite al lector desplazarse horizontalmente:

pre {
  background-color: #f4f4f4;
  padding: 10px;
  overflow-x: auto;     /* horizontal scroll for long lines */
}

Si prefieres que el texto pase a la siguiente línea en lugar de desplazarse, usa white-space: pre-wrap en su lugar.

Atributos

El elemento <pre> no tiene atributos obligatorios. Los atributos width, cols y wrap están obsoletos y fueron eliminados en HTML5 — usa CSS en su lugar:

Atributo obsoletoQué hacíaUsa en su lugar
widthsugería el ancho en caracteresCSS max-width
colssugería el número de columnasCSS width / max-width
wrapcontrolaba el ajuste de líneaCSS white-space: pre-wrap

La etiqueta <pre> admite los Atributos Globales y los Atributos de Evento.

Etiquetas relacionadas

Práctica

Práctica
¿Qué es cierto sobre la etiqueta HTML 'pre'?
¿Qué es cierto sobre la etiqueta HTML 'pre'?
Was this page helpful?