Подтвердить что ты не робот

Внутренний вход теневого корня

Сегодня я видел что-то странное. Посмотрите на фотографии, связанные с сообщением (ниже). Я сделал ввод [type = "text" ]. Его "1" на экране. Это css выглядит примерно так:

table tbody input {
    width: 40px;
    border: none;
    height: 16px;
}

Просто обычный ввод, кроме этого у него нет границы.

Затем я посмотрел на dev-tools, и я увидел то, чего раньше не видел. "# Shadow-root" и div внутри входа.

Я знаю, что dev-tools добавляет что-то само собой, чтобы отображать подсказки на исходной веб-странице. Тем не менее, мне очень интересно, почему он добавляет div внутри ввода, и как это вообще возможно сделать что-то подобное на движке webkit.

В последнее время Chrome-инструменты как-то странные, у меня были некоторые проблемы с ним. Например, он удвоил файл style.css и забыл загрузить еще один, что стало причиной ужасного вида jquery-календаря (только при загрузке в моем браузере).

Вероятно, это не ошибка, а функция, но мне бы хотелось узнать больше об этом

Input visible in browser (it's not straight, adhoc screen)

This input visible from the dev-tools side

4b9b3361

Ответ 2

Как отметил Габи Петриоли, это Теневой ДОМ. Он создается браузером для обеспечения интерфейса инкапсуляции в HTML, для сторонних библиотек и т.д.

Инкапсуляция представляет собой концепцию ООП, в которой объекты могут ограничивать доступ к своим собственным данным, чтобы сторонний код не мог произвольно стереть его.

В HTML отсутствуют возможности инкапсуляции, что особенно важно для сторонних библиотек (jQuery, кнопки Twitter и т.д.). Shadow DOM был изобретен для обеспечения функциональной инкапсуляции для различных поддеревьев DOM. Это достигается за счет сохранения функциональных поддеревьев отдельно от дерева документов (и друг друга). Это разделение теневых поддеревьев DOM называется границей тени. Правила CSS и запросы DOM не пересекают границу тени и, таким образом, обеспечивают инкапсуляцию. (1)

Как выразился Доминик Куни: Вот основная проблема, которая делает виджеты, построенные из HTML и JavaScript, сложными в использовании: Дерево DOM внутри виджета не инкапсулировано из остальной части страницы. Отсутствие инкапсуляции означает, что ваша таблица стилей документов может случайно применяться к частям внутри виджета; ваш JavaScript может случайно изменить части внутри виджета; ваши идентификаторы могут пересекаться с идентификаторами внутри виджета; и т.д. (2)

Дальнейшее чтение:

Основное вводное описание Dadow DOM

(1) Более полное техническое описание - вторая часть этой статьи объясняет, как использовать теневой DOM самостоятельно

(2) Dominic Cooney: Shadow DOM 101

Теневой DOM - W3C Рабочий проект 17 июня 2014 года