Elements и стили
Что это такое
Панель Elements показывает живое дерево документа — уже после того, как отработали скрипты и браузер исправил некорректную разметку. Рядом панель Styles перечисляет все правила, применимые к выбранному элементу, в том порядке, в котором их разрешил каскад. На вопрос «почему этот элемент выглядит именно так» лучше всего отвечает сам браузер.
Почему это важно
Рассуждать о CSS в абстракции трудно, потому что каскад зависит от всего документа и области просмотра. Панель Styles убирает догадки: она перечисляет каждое объявление с указанием исходного файла, зачёркивает проигравшие и показывает вычисленное значение, которое применяется на самом деле. Второй класс догадок убирает дерево: DOM, который создал скрипт, часто не тот DOM, который вы ожидали, — обёртка, вставленная фреймворком, элемент, перемещённый парсером, узел, который так и не создался, потому что ветка, обязанная его создать, не выполнилась.
Ключевые идеи
Изучайте разрешённый каскад, а не таблицу стилей
Выберите элемент и читайте панель Styles сверху вниз. Каждое правило указано со ссылкой на строку в исходнике; зачёркнутые объявления были перекрыты чем-то более специфичным или более поздним. Итоговое значение каждого свойства, включая унаследованные, показывает вкладка «computed» — именно там обычно всплывают сюрпризы со значениями в em и процентах.
.card { padding: 1rem; } ← применено
.card.small { padding: .5rem; } ← зачёркнуто (ниже специфичность)
Поиск свойства по имени в панели быстрее, чем рассуждение о том, какой файл мог его задать.
Редактируйте живое дерево, чтобы проверить гипотезу
Изменения в панели Styles применяются сразу, не касаясь файловой системы, поэтому исправление можно проверить ещё до того, как оно написано, а если отступ исчезает при снятии галочки, значит, это он и создавал проблему: эксперимент на пять секунд, который иначе стоил бы коммита и перезагрузки.
/* набрано в панели Styles для проверки, затем перенесено в исходник */
display: grid;
grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
Правки не сохраняются: перезагрузите — и они исчезнут, а это ровно то, что нужно от черновика.
Дерево — это DOM после выполнения скриптов
Если элемент отсутствует, вопрос в том, не было его в разметке или скрипт не смог его создать. Правый клик по узлу и просмотр его обработчиков событий отвечает на связанный вопрос, почему обработчик не сработал: обработчика нет, он навешен на другой элемент или был удалён.
Размеры блока видны в модели
Диаграмма блочной модели показывает содержимое, padding, border и margin как четыре концентрических значения — самый быстрый способ закрыть спор о том, откуда взялся размер элемента, а переключение box-sizing в панели показывает разницу между двумя трактовками на реальной вёрстке.
Дерево доступности — второй взгляд на тот же DOM
Инспектор доступности показывает, что объявила бы вспомогательная технология: роль, имя, состояние и ориентиры вокруг, — а убедиться, что метка действительно дошла до элемента управления, а не скрыта родителем, можно только здесь.
Практика
Найдите правило-победителя и правило-проигравшего
Выберите элемент, найдите свойство, заданное двумя правилами, и выпишите специфичность каждого и то, почему победило именно оно.
Готово, когда: вы можете назвать строку исходника проигравшего правила и назвать единственное изменение, которое заставило бы его победить.
Отладьте отсутствующий элемент с помощью живого дерева
Введите условие, которое мешает созданию узла, затем с помощью панели Elements и консоли выясните, узел отсутствует или просто невидим.
Готово, когда: вы отличаете «нет в DOM», «есть в DOM, но скрыт» и «есть в DOM, но за пределами области просмотра», не добавляя строку логирования.
Частые ошибки
- Чтение исходника вместо панели — загруженная таблица стилей может отличаться от файла после шага сборки; исправить: проверьте разрешённое правило в панели Styles.
- Предположение, что DOM совпадает с разметкой — и скрипты, и парсер его меняют; исправить: инспектируйте дерево, которое у браузера есть на самом деле.
- Правка стилей в панели с ожиданием, что они сохранятся — панель работает как черновик; исправить: перенесите рабочее значение в исходник и перезагрузите для подтверждения.
- Отладка вёрстки снаружи — причина обычно в отступах или режиме отображения родителя; исправить: поднимитесь по дереву, проверяя блочную модель на каждом уровне.
- Игнорирование дерева доступности — элемент управления может выглядеть правильно и не объявлять ничего; исправить: проверяйте, что объявляется, а не только что отрисовано.
Что читать дальше
- JavaScript (02-frontend/06-javascript) — консоль и отладчик: там скрипты действительно становятся понятны.
- Network и производительность (02-frontend/27-browser-devtools/02-network-and-performance) — две другие панели, которые отвечают на большинство продовых вопросов.
- Каскадные таблицы стилей (CSS) (02-frontend/05-css) — правила каскада, которые отображает панель Styles.