Статьи

Разметка Musings # 1: Как вы должны разметить диалог?

Семантическая разметка. Почти каждый разработчик, который понимает эту концепцию, соглашается с ней, так почему же так много людей (включая меня) часто испытывают проблемы с применением принципов?

Хотя, без сомнения, иногда это лень в саду, я знаю, что были времена, когда я хотел принять правильное решение, но в итоге почесал голову. В то время как стандарты HTML проделали довольно приличную работу, имитируя основные формы и структуры, которые мы все понимаем из традиционных книг (то есть страниц, абзацев, заголовков, таблиц и списков), все чаще и чаще я сталкиваюсь с разметкой документ, который не очень хорошо вписывается в эти структуры — например, меню ресторана, сценарии и комиксы. Каждый из них имеет устоявшийся формат, который не обязательно легко переносится в Интернет.

Хотя я не могу сказать, что у меня есть окончательные ответы на все эти вопросы, я думаю, что было бы полезно, по крайней мере, выкинуть вопрос и получить несколько альтернативных мнений — включая меня.

Разметка диалога — это первая загадка, которую мы рассмотрим.

Сценарий Касабланки - стр. 126 Давайте начнем с классической пьесы — какой самый разумный способ сделать разметку последней страницы из сценария из « Касабланки » для Интернета?

На первый взгляд, это больше, чем стандартная серия абзацев ( <p> ). У него есть юниты в очень специфическом порядке, но это определенно не упорядоченный список ( <ol>) . Структурно это очень похоже на список определений ( <dl>) — список элементов, каждый из которых имеет прикрепленный блок текста. Как цитата ( <q> ) и блочные цитаты ( <q> <blockquote> ) вписываются во все это?

К счастью, в этом случае мы не первые, кто задает этот вопрос, и уже было значительное обсуждение разметки диалогов на форумах Accessify, на которые мы можем опираться. Brothercake, Andrew K, Kev и я обсуждали варианты, и на этом мы остановились.

Самым простым подходом, без сомнения, было бы пометить все это как простую серию параграфов с несколькими добавленными интервалами, чтобы указать говорящего. Хотя это не может быть неоправданным, оно не встраивает много полезной информации в документ.

Другим подходом, предложенным некоторыми, было использование списка определений ( <dl> ). Тем не менее, хотя списки определений очень близки к визуальному соответствию, в данном случае они являются очень четкой семантической нет-нет. Утверждать, что каждый оратор является типом определения ( <dt> ) и что каждый прикрепленный фрагмент текста является «описанием определения» ( <dd> ), трудно выдержать.

Интересно, что в настоящее время существует предложение для <dialog> в HTML5 основываться на текущей структуре <dl> . Я не совсем уверен, что это правильный подход.

Так как в теории каждый блок диалога является цитируемой речью, <blockquote> представляется полезной структурой, в которую вписывается каждый фрагмент диалога. Кроме того, blockquote также позволяет нам встраивать в них как блочные, так и встроенные элементы, что дает нам гибкую базу для работы. Фактически, W3C рекомендует, чтобы текст внутри цитаты всегда содержался с блочным элементом.

Итак, начнем с чего-то вроде:

 <blockquote> <p>Louie, I think this is the beginning of a beautiful friendship</p> </blockquote> 

Поскольку всегда будет ограниченное количество ораторов, я думаю, что имеет смысл создать класс для каждого оратора и прикрепить этот класс к каждой цитате. Мы не обязаны его использовать, но это дает нам «крючки», чтобы делать более полезные вещи на более позднем этапе — например, выделять, подчеркивать, скрывать или окрашивать диалог определенных символов.

 <blockquote class="rick"> <p>Louie, I think this is the beginning of a beautiful friendship</p> </blockquote> 

Согласно W3.org, <cite> « содержит ссылку или ссылку на другие источники ». В нашем случае мы приписываем каждый отрывок докладчику, поэтому имеет смысл использовать <cite> чтобы указать, кто говорит. Для ясности я также дал ему класс «спикер», но это было бы очень необязательно.

Итак, теперь у нас есть что-то вроде:

 <blockquote class="rick"> <cite class="speaker">Rick</cite> <p>Louie, I think this is the beginning of a beautiful friendship</p> </blockquote> 

Наконец, сценические указания — еще один элемент, общий для почти всех сценариев. Поскольку они написаны в более традиционном описательном формате, они идеально подходят для простого старого абзаца. Если вы ожидали, что в одном и том же документе будут присутствовать другие виды абзацев — например, титры, предисловие или другие примечания — вы можете выбрать для указания своих сценических указаний определенный класс для них. Если нет, то достаточно простых тегов абзаца.

 <blockquote class="rick"> <cite class="speaker">Rick</cite> <p>Louie, I think this is the beginning of a beautiful friendship</p> </blockquote> <p class="directions">The two walk off together into the night.</p> <p class="directions">FADE OUT.</p> <p class="directions">THE END</p> 

Вот визуальное представление той же самой структурной разметки, наложенной поверх исходной страницы.

Визуальное представление разметки, наложенной поверх оригинального сценария Касабланки

Итак, каков твой вердикт?

Можете ли вы увидеть лучший подход?

Есть ли другой формат документа, который у вас были проблемы с переводом в Интернете?

PS Не забывайте «экранировать» свой код, если вы публикуете фрагменты HTML-кода (т. Е. <Становится & lt;)