Embellecedor HTML
El embellecedor HTML convierte marcado comprimido, minificado o escrito en una sola línea en un documento legible cuya sangría sigue la jerarquía de elementos.
Ejecutar — gratis
Pegue una página completa, un fragmento de plantilla o marcado copiado de una respuesta generada y obtenga una sangría estable de dos espacios, sin acceso a la red ni procesamiento no determinista. El formateador reconoce comentarios, declaraciones, atributos entre comillas, contenido sin analizar de script y style, sintaxis autocerrada y elementos vacíos estándar de HTML. También rechaza etiquetas ordinarias inesperadas, incompatibles o sin cerrar.
Haga visible la jerarquía oculta en HTML minificado
La minificación resulta útil para entregar una página al navegador, pero elimina la estructura visual que permite comprender el marcado. Una barra de navegación, una lista anidada, una cuadrícula de tarjetas o un formulario pueden convertirse en una línea continua donde cuesta emparejar las etiquetas. Este formateador recupera esa estructura al recorrer el documento en orden y asignar la sangría según la jerarquía activa. Cada elemento de apertura ordinario aumenta el nivel y su cierre correspondiente devuelve la salida al nivel anterior. El texto se coloca a la profundidad de su contenedor, mientras que los comentarios y las declaraciones conservan la posición adecuada. El resultado emplea dos espacios de forma estable para facilitar inspecciones, documentación, revisiones y comparaciones. No inventa elementos, no reordena atributos ni rediseña el marcado: muestra con claridad la jerarquía que ya existe.
Respete las construcciones HTML que no necesitan cierre
No todo elemento entre signos angulares debe modificar la profundidad. Los elementos vacíos estándar, como img, input, meta, link, br y hr, están completos sin una etiqueta final, por lo que se emiten sin añadirlos a la pila. La sintaxis autocerrada explícita recibe el mismo tratamiento. Los comentarios, declaraciones de tipo de documento, secciones CDATA e instrucciones de procesamiento se conservan como unidades completas. El análisis reconoce comillas simples y dobles en atributos, de modo que un signo mayor que dentro de un valor no termina la etiqueta. Los contenidos de script, style y textarea se preservan hasta el cierre correspondiente. Así se evitan falsos elementos secundarios y se obtiene un resultado determinista, sin red, reloj, azar ni reparaciones automáticas del DOM.
Detecte estructuras incompletas antes de reutilizarlas
A menudo se formatea marcado copiado de un registro, una plantilla de correo, una respuesta del servidor, un campo editorial o un artefacto de compilación. Esas fuentes pueden estar truncadas aunque el fragmento parezca válido. El formateador mantiene una pila de elementos abiertos y exige que los cierres sigan el orden inverso. Una etiqueta final inesperada falla de inmediato; una etiqueta incompatible indica qué cierre debía aparecer primero. Si termina la entrada y queda abierto un elemento ordinario, se devuelve un error de entrada no válida que lo identifica. Los elementos vacíos estándar y las etiquetas autocerradas son las excepciones previstas. Esta comprobación es estructural, no una validación completa de la norma HTML. Úsela para descubrir emparejamientos incompletos antes de revisar, guardar o procesar el marcado. El uso local en el navegador está disponible y cada solicitud automatizada a la API cuesta $0.002.
Qué puede hacer con ella
Inspeccionar una página de producción minificada
Expanda marcado de una sola línea antes de rastrear un componente, enlace, formulario o sección incrustada.
Preparar plantillas para revisión
Aplique una sangría estable para comparar la estructura sin emparejar manualmente etiquetas anidadas.
Comprobar un fragmento HTML copiado
Detecte cierres ausentes o incompatibles después de copiar marcado de una respuesta, un editor, un mensaje o un registro.
Preguntas frecuentes
¿Qué modifica el embellecedor HTML?
Añade saltos de línea y sangría de dos espacios según el anidamiento, y normaliza el espacio entre fragmentos de texto ordinario.
¿Qué etiquetas pueden quedar sin cerrar?
Los elementos vacíos estándar, incluidos img, input, meta, link, br y hr, no necesitan cierre. También se acepta la sintaxis autocerrada explícita.
¿Conserva los atributos y el código incrustado?
Sí. Mantiene los atributos, respeta valores entre comillas y trata el contenido de script, style y textarea como texto sin analizar hasta su cierre.
¿Es un validador completo del estándar HTML?
No. Comprueba el emparejamiento de etiquetas y varios límites léxicos, pero no todas las reglas documentales, de accesibilidad o de atributos.
¿Cuánto cuesta una solicitud a la API?
Cada solicitud utiliza el precio base publicado de $0.002. La versión para navegador puede ejecutarse localmente sin solicitar la API.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/dev2/beautify-html \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"html":"<!doctype html><html><body><main><h1>Hello</h1><p>Readable HTML.</p></main></body></html>"}'const res = await fetch("https://api.kit.forhosting.com/dev2/beautify-html", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"html": "<!doctype html><html><body><main><h1>Hello</h1><p>Readable HTML.</p></main></body></html>"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/beautify-html",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"html": "<!doctype html><html><body><main><h1>Hello</h1><p>Readable HTML.</p></main></body></html>"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/beautify-html", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"html":"<!doctype html><html><body><main><h1>Hello</h1><p>Readable HTML.</p></main></body></html>"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"html":"<!doctype html><html><body><main><h1>Hello</h1><p>Readable HTML.</p></main></body></html>"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/beautify-html", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"html": "<!doctype html><html><body><main><h1>Hello</h1><p>Readable HTML.</p></main></body></html>"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.beautify_html",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |