ToolDeck

HTML Formatter

Форматирование и приведение HTML в порядок с правильными отступами

Попробовать пример

Входной HTML

Отформатированный HTML

Работает локально · Безопасно вставлять секреты
Отформатированный HTML появится здесь…

Что такое форматирование HTML?

HTML Formatter — это инструмент, выполняющий форматирование HTML (также называемое «украшением» или «pretty-printing»): он добавляет единообразные отступы, переносы строк и пробелы к HTML-разметке, делая структуру вложенности визуально очевидной. Браузеры игнорируют пробельные символы при отрисовке HTML, поэтому документ, записанный в одну строку, даёт тот же результат, что и аккуратно выровненный. Разница целиком в пользу человека: отформатированный HTML проще читать, отлаживать и сопровождать.

Спецификация HTML (поддерживаемая WHATWG как HTML Living Standard) определяет более 110 элементов, каждый со своей контентной моделью. Блочные элементы — <div>, <section>, <article> — обычно начинаются с новой строки и создают отступы для своих дочерних элементов. Пустые элементы — <br>, <img>, <input> — не имеют закрывающего тега и дочерних узлов. Хороший форматтер понимает эти различия и применяет правила отступов осознанно, а не просто добавляет пробелы после каждого тега.

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

Зачем использовать этот HTML Formatter?

Вставьте любой HTML и мгновенно получите корректно выровненный результат. Никаких плагинов, конфигурационных файлов и регистрации аккаунта.

Мгновенное форматирование
Результат обновляется по мере ввода. Вставьте минифицированный HTML из любого источника и сразу увидите выровненный вывод — без сборки и CLI-команд.
🔒
Обработка без передачи данных
Всё форматирование выполняется в браузере на JavaScript. Ваш HTML никогда не покидает устройство, поэтому можно безопасно вставлять разметку, содержащую API-ключи, токены или внутренние URL.
🎯
Настраиваемые отступы
Переключайтесь между отступами в 2 и 4 пробела одним кликом. Форматтер применяет выбранный вариант единообразно на каждом уровне вложенности.
📋
Копирование одним кликом
Скопируйте отформатированный результат в буфер обмена одной кнопкой. Вставьте прямо в редактор, при ревью pull request или в документацию.

Сценарии использования HTML Formatter

Фронтенд-разработка
Форматируйте HTML-шаблоны перед коммитом в систему контроля версий. Единообразные отступы уменьшают шум в диффах pull request и ускоряют ревью кода.
Отладка серверных шаблонов
HTML, отрендеренный фреймворками — Django, Rails или PHP — часто выдаётся без отступов. Вставьте отрендеренный вывод сюда, чтобы проверить вложенность и найти незакрытые теги.
DevOps и CI-пайплайны
Убедитесь, что инструменты сборки генерируют корректно структурированный HTML. Форматируйте вывод генераторов статических сайтов или конструкторов HTML-писем перед визуальной проверкой.
QA и тестирование
Сравнивайте отформатированные снимки HTML-вывода между тестовыми прогонами. Правильные отступы делают структурные различия очевидными при сравнении двух версий страницы.
Инженерия данных
Пайплайны веб-скрапинга производят сырой HTML, требующий изучения. Форматируйте собранные страницы, чтобы понять DOM-структуру перед написанием селекторов для извлечения данных.
Обучение HTML
Студенты могут вставить исходный код любого сайта и увидеть, как элементы вложены друг в друга. Форматированное дерево наглядно показывает отношения родитель-потомок между тегами.

Правила отступов в HTML

Обращение форматтера с каждым типом элемента зависит от его контентной модели. В таблице ниже показаны распространённые элементы и их вид при отступах в 2 и 4 пробела. Оба варианта дают идентичный рендеринг в браузере; разница только в читаемости.

ТегТип элементаОтступ 2 пробелаОтступ 4 пробела
<div>Block elementNew line, indent childrenNew line, indent children
<span>Inline elementNew line, indent childrenInline with parent text
<br>Void elementNew line, same levelNew line, same level
<img>Void elementNew line, same levelNew line, same level
<!-- -->CommentNew line, same levelNew line, same level
<!DOCTYPE>Document typeFirst line, no indentFirst line, no indent
<script>Script blockNew line, preserve innerNew line, preserve inner
<pre>PreformattedNew line, preserve innerNew line, preserve inner

Форматтер vs. Минификатор vs. Линтер

Эти три инструмента работают с HTML, но решают разные задачи. Форматирование и минификация — противоположные преобразования; линтер проверяет наличие ошибок, не меняя пробелы.

Форматтер (этот инструмент)
Добавляет отступы и переносы строк, делая HTML читаемым. Не изменяет DOM-структуру и не удаляет контент. Вывод рендерится в браузере идентично исходному вводу.
Минификатор
Удаляет пробельные символы, комментарии и необязательные закрывающие теги, уменьшая размер файла. Противоположность форматирования. Используйте для продакшн-сборок, а не для чтения или редактирования.
Линтер (HTMLHint / W3C)
Проверяет HTML на ошибки: отсутствующие атрибуты alt, дублирующиеся ID или устаревшие теги. Сообщает о проблемах, но не изменяет отступы или форматирование.

Примеры кода

Как форматировать HTML программно в популярных языках и инструментах:

JavaScript (js-beautify)
import { html as beautify } from 'js-beautify'

const ugly = '<div><p>Hello</p><ul><li>One</li><li>Two</li></ul></div>'

const formatted = beautify(ugly, {
  indent_size: 2,
  indent_char: ' ',
  wrap_line_length: 80,
  preserve_newlines: false,
})
// → <div>
// →   <p>Hello</p>
// →   <ul>
// →     <li>One</li>
// →     <li>Two</li>
// →   </ul>
// → </div>
Python (BeautifulSoup)
from bs4 import BeautifulSoup

ugly = '<div><p>Hello</p><ul><li>One</li><li>Two</li></ul></div>'

soup = BeautifulSoup(ugly, 'html.parser')
print(soup.prettify(formatter='minimal'))
# → <div>
# →  <p>
# →   Hello
# →  </p>
# →  <ul>
# →   <li>One</li>
# →   <li>Two</li>
# →  </ul>
# → </div>
Go (goquery + x/net/html)
package main

import (
    "bytes"
    "fmt"
    "golang.org/x/net/html"
    "strings"
)

func main() {
    ugly := "<div><p>Hello</p></div>"
    doc, _ := html.Parse(strings.NewReader(ugly))

    var buf bytes.Buffer
    html.Render(&buf, doc)
    fmt.Println(buf.String())
    // renders normalized HTML — pair with indent logic for pretty output
}
CLI (Prettier)
# Format a single file in place
npx prettier --write index.html

# Format and print to stdout (pipe-friendly)
npx prettier --parser html index.html

# Format with 4-space indentation
npx prettier --tab-width 4 --parser html index.html

# Format HTML from stdin
echo '<div><p>Hello</p></div>' | npx prettier --parser html

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

В чём разница между форматированием и валидацией HTML?
Форматирование добавляет отступы и переносы строк, делая разметку читаемой. Валидация проверяет соответствие разметки спецификации HTML, сообщая об ошибках — отсутствующих обязательных атрибутах или некорректно вложенных элементах. Форматтер не исправляет ошибки; валидатор не меняет пробельные символы.
Меняет ли форматирование отрисовку страницы?
В большинстве случаев нет. Браузеры сворачивают последовательности пробелов в один пробел при рендеринге. Исключения — элементы с CSS-правилом white-space: pre или аналогичными, а также элементы <pre> и <textarea>, где пробелы значимы. Хорошо реализованный форматтер сохраняет содержимое таких элементов без изменений.
Сколько пробелов использовать для отступов в HTML?
Оба варианта — 2 и 4 пробела — широко распространены. Google HTML/CSS Style Guide рекомендует 2 пробела. Форматтер Prettier по умолчанию использует 2 пробела. Четыре пробела соответствуют соглашению PEP 8 для Python и предпочтительны в некоторых командах ради единообразия между языками. Выберите один вариант и закрепите его форматтером или настройкой редактора.
Можно ли форматировать HTML со встроенным JavaScript или CSS?
Этот инструмент форматирует HTML-структуру (теги и атрибуты). Встроенные блоки <script> и <style> сохраняются как есть. Для форматирования встроенного JavaScript и CSS используйте специализированный форматтер — например, Prettier, который умеет разбирать и форматировать все три языка за один проход.
Табы против пробелов — ещё актуальная дискуссия для HTML?
Большинство руководств по стилю HTML и форматтеры по умолчанию используют пробелы. По данным опроса Stack Overflow Developer Survey 2023, около 55% респондентов применяют пробелы в веб-разработке. Табуляции имеют преимущество доступности: каждый разработчик может задать собственную визуальную ширину. Оба варианта работают; единообразие внутри проекта важнее самого выбора.
Почему мой HTML выглядит иначе после форматирования?
Форматтер добавляет пробельные символы (пробелы и переносы строк), которых не было в исходной разметке. Это меняет внешний вид исходного кода, но не отрендеренный вывод. Если вы видите визуальное отличие в браузере, скорее всего, причина в строчных элементах: добавленные пробелы создают лишний символ между тегами. Это решается через CSS (font-size: 0 у родителя или flexbox-разметка).
Как обеспечить единообразное форматирование HTML в команде?
Используйте автоматический форматтер в CI-пайплайне. Prettier поддерживает HTML и может запускаться как pre-commit хук через Husky или lint-staged. Добавьте файл .prettierrc в репозиторий, указав tabWidth, printWidth и htmlWhitespaceSensitivity. После этого каждый коммит будет следовать одним и тем же правилам форматирования, независимо от настроек редактора каждого разработчика.
В чём разница между HTML Formatter и HTML Beautifier?
Это одна и та же операция. «Formatter» и «beautifier» оба означают добавление отступов и переносов строк к HTML-разметке. Одни инструменты используют термин «beautify» (js-beautify), другие — «format» (Prettier). Результат одинаков: корректно выровненный, удобочитаемый HTML. «Pretty-print» — ещё один синоним, часто встречающийся в документации и поисковых запросах.