Юрий Матюхин

Вопросы и ответы на собеседовании разработчика интерфейсов #1

 

Это первый пост из серии ответов на вопросы, которые спрашивают у разработчиков интерфейсов на собеседованиях. Я разберу интересную задачку, которая мне встретилась только один раз и сильно меня впечатлила. Если вы собеседуете разработчиков, можете так-же задавать этот вопрос во время собеседований.

Исходные данные

Пустая html страница, открытая в последней версии хрома, в которой мы написали следующий код:

 

Вопросы

Дальше будут ответы, не прокручивайте если не хотите их узнать раньше времени.







Ответ на первый вопрос

Скриншот результата
 

Удивлены?
Чтобы понять почему произошло именно так, нужно посмотреть в DOM получившееся дерево. Мне смотря на код было понятно, что все надписи будут на новой строке. Но откуда взялся отступ после первой строки?

Ответ на второй вопрос

DOM дерево страницы
 

Многие слышали, что внутри тега p не должно быть блочных элементов, но не все видели это на практике. Любопытно что Text3 остался вообще без тегов, а после него стоит пустой <p></p>.

Спасибо за комментарий SelenIT, который объясняет сложившуюся ситуацию:

Тут прикол в двух особенностях элемента <p>: мало того, что: 1) в нем не может быть ничего блочного, так еще и 2) закрывающий тег для него необязателен. Поэтому браузер, увидев где-то после <p> открывающий <div> (либо ul, pre, table, h1…), со спокойной совестью и в полном соответствии со стандартом на автомате поставит закрывающий </p> прямо перед ним. Поэтому в DOM-дереве div оказывается соседом абзаца. Следующим соседом оказывается ничем не обернутая текстовая нода, а потом парсер натыкается на закрывающий </p> без открывающего. Это с точки зрения парсера уже ошибка, но у алгоритма HTML5 на этот случай четкое предписание — вставить недостающий открывающий тег сразу перед «лишним» закрывающим, чтобы «баланс тегов сошелся». Отсюда и пустой абзац в конце.
Кстати, валидатор на такую разметку выдает ошибку «закрывающий тег без открывающего», которая часто ставит в тупик новичков — ведь на первый взгляд у всех тегов есть пара, «всё ведь закрыто». Но оказывается, что соблюдать правильную вложенность в HTML важнее, чем механически «закрывать теги».

Демо

Вот такие интересные вопросы, встречаются на собеседованиях у front end разработчиков. А какие интересные вопросы знаете вы?

Read more!