Перейти к основному содержимому
Tooletto

Форматировщик HTML

Форматируйте неаккуратный или минифицированный HTML с правильными отступами с помощью настоящего HTML-парсера, который также корректно форматирует встроенные CSS и JavaScript. Синтаксические ошибки сообщаются с указанием номера строки.

  • Файлы никогда не покидают ваше устройство
  • Бесплатно, без регистрации
  • Без водяных знаков
  • Работает офлайн после загрузки
Loading tool…

Как пользоваться: форматировщик html

  1. 1

    Вставьте свой HTML

    Минифицированный, с плохими отступами или написанный вручную — подойдёт любой.

  2. 2

    Выберите отступы

    2 пробела, 4 пробела или табуляция.

  3. 3

    Скопируйте результат

    Или скачайте его как файл .html.

Почему HTML строже к пробелам, чем кажется

Большая часть HTML спокойно допускает, чтобы форматировщик свободно перестраивал пробелы, — лишние отступы между блочными элементами вроде `<div>` и `<p>` никак не сказываются на отображении, потому что браузеры схлопывают последовательности пробелов между такими элементами при рендеринге. Три конкретных случая полностью нарушают это допущение: содержимое внутри `<pre>` отображает каждый пробел и перенос строки буквально, ровно как написано; `<textarea>` относится к своему содержимому так же, поскольку призван точно воспроизводить редактируемый пользователем текст; а любой элемент с `white-space: pre` в CSS наследует такое же буквальное отображение. Форматировщик, перестраивающий пробелы внутри любого из этих блоков, меняет то, что страница реально показывает, а не только то, как выглядит исходный код, — поэтому этот форматировщик оставляет их полностью нетронутыми, вместо того чтобы применять обычные правила расстановки отступов.

Инлайновые элементы, стоящие прямо рядом с текстом, — более тонкий случай: пробел между двумя инлайновыми элементами иногда визуально значим, например промежуток между двумя словами, разнесёнными по отдельным тегам `<span>`, — поэтому форматировщик намеренно осторожен с инлайновым содержимым, предпочитая оставлять неоднозначные пробелы как есть, а не рисковать схлопнуть пробел, который выполнял реальную визуальную роль.

Форматирование всей страницы за один проход, а не только тегов

Страница, собранная как единый HTML-файл, часто встраивает собственный CSS внутрь блока `<style>` и собственный JavaScript внутрь блока `<script>`, и форматировщик, понимающий только HTML-теги, либо оставил бы этот встроенный код неотформатированным сплошным блоком, либо, что хуже, испортил бы его, трактуя фигурные скобки и точки с запятой как HTML-синтаксис. Передача содержимого этих блоков настоящему парсеру CSS и настоящему парсеру JavaScript соответственно означает, что весь файл — разметка, стили и поведение вместе — возвращается последовательно отформатированным, а не только внешняя HTML-структура.

Почему браузеры принимают сломанный HTML, а форматировщик — нет

Браузеры построены на модели восстановления после ошибок, специально спроектированной так, чтобы отрендерить что-то разумное даже из сильно повреждённой разметки — незакрытый тег, отсутствующая кавычка, элементы, вложенные в неверном порядке, — потому что в вебе десятилетиями накапливался несовершенный HTML в продакшене, который всё равно нужно отображать. Форматировщик не может позволить себе такую же снисходительность: чтобы переформатировать документ, ему нужно построить точное структурное понимание того, что во что вложено, а у документа с действительно несбалансированными тегами нет единственно верной структуры, которую можно было бы восстановить. Именно поэтому страница, которая совершенно нормально отображается в браузере, всё же может быть отклонена этим форматировщиком: браузер незаметно устранил неоднозначность по-своему, а инструменту, пытающемуся корректно переформатировать код, приходится сообщать о неоднозначности, а не догадываться.

Синтаксис шаблонизатора — частая ложная тревога

Файл, который не удаётся отформатировать, очень часто оказывается вовсе не сломанным HTML, а шаблоном — Handlebars, Jinja, Blade, EJS или похожим, — который смешивает директивы шаблонизатора с разметкой, создавая документ, не являющийся сам по себе валидным самостоятельным HTML, да и не обязанный им быть. Шаблон становится настоящим, корректно сформированным HTML только после того, как его движок обработает его и подставит реальные данные. Форматирование уже отрендеренного результата, полученного после обработки шаблонизатором — например, через «Просмотр кода страницы» в браузере, — полностью решает эту проблему, поскольку такой результат представляет собой настоящий HTML без каких-либо остатков синтаксиса шаблонизатора.

Часто задаваемые вопросы

Форматирует ли инструмент CSS и JavaScript внутри страницы?

Да. Содержимое внутри `<style>` и `<script>` передаётся парсерам CSS и JavaScript, поэтому вся страница в одном файле форматируется корректно целиком, а не оставляет эти блоки нетронутыми.

Изменит ли форматирование то, как отображается страница?

Почти никогда, но не совсем никогда: HTML считает пробелы значимыми внутри `<pre>`, `<textarea>` и элементов с `white-space: pre`. Они остаются в точности как есть. Инлайновые элементы в редких случаях могут сместиться на один пробел, поэтому форматировщик действует вокруг них осторожно.

Почему инструмент отклоняет мой HTML?

Обычно причина — действительно несбалансированные теги или синтаксис шаблонизатора вроде Handlebars, Jinja или Blade, который не является валидным HTML. Браузеры незаметно исправляют сломанную разметку; форматировщику же нужно понимать структуру, поэтому он так делать не может.

Моя разметка куда-то загружается?

Нет. Парсер работает прямо в браузере, поэтому неопубликованные страницы и работа для клиентов остаются на вашем компьютере.

Частые задачи: форматировщик html