Как лучше всего представить сценарий сцены в HTML?

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

Я пытаюсь найти лучший способ представить это в HTML. Мне в основном нужны две колонки - одна для говорящего персонажа, а другая для текста. Очевидно, что каждое выступление должно соответствовать выступающему. Другими словами, примерно так:

    Jeff        This sure is a nice website we've got now.

    Joel        It certainly is. By the way, working at FogCreek rocks.

    Jeff        Of course it does. Have you played Rock Band yet? It's
                 a lot of fun.

(Ну это лучше, чем lorem ipsum ...)

Я знаю, как я могу сделать это с таблицами HTML (с одной строкой таблицы на речь), но это кажется довольно уродливым, и все, безусловно, похоже, заинтересованы в использовании CSS для представления нетабличных данных. Я не могу понять, как на самом деле учитываются табличные данные - раньше я использовал «строку» и «столбец» скорее для макета, чем для фундаментальных данных.

Итак, есть идеи? Я думаю, что большинство веб-сайтов сценариев, которые я видел (правда, не многие), либо используют <pre>, как мой пример выше, либо не пытаются сохранить обычный формат сценария, вместо этого просто добавляя к каждому абзацу имя докладчика. (См. Пример этого стиля в вики-странице подкаста.) У меня проблемы с определением даже того, какие элементы HTML я должен использовать для представления этого, честно говоря - списка определений словаря с говорящим в качестве термина и речью в качестве определения. наверное, самое близкое, о чем я думал, но это похоже на насилие.

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
29
0
2 852
12
Перейти к ответу Данный вопрос помечен как решенный

Ответы 12

ИМО, это на самом деле табличные данные. Первый столбец - динамик, второй столбец - текст.

Однако, если вы хотите быть модным и агрессивно избегать столов, я считаю, что то, что веб-знатоки диктуют в этом сезоне, согласуется с такой структурой:

<div class = "play">
  <div class = "line">
    <div class = "speaker">Jeff</div>
    <div class = "text">This sure is a nice website we've got now. </div>
  </div>
  <div class = "line">
    <div class = "speaker">Joel</div>
    <div class = "text">It certainly is. By the way, working at FogCreek rocks.</div>
  </div>
</div>

Затем вы контролируете, как это будет выглядеть, с помощью соответствующего CSS.

Если похоже, что вы в основном пишете XML и используете CSS, чтобы указать, как он выглядит, ну, это потому, что веб-знатоки считают, что вы должны делать это, AFAICT.

На самом деле это приводит к интересной идее - XML ​​+ XSLT. <speech><speaker>Jeff</speaker><text>Foo</text> </speech>. Хм. Следующая работа: приложение WYSIWYG для этого ... иначе я вижу, что творческий процесс несколько прерывается :)

Jon Skeet 14.01.2009 10:37

(Конечно, я могу использовать XSLT для создания таблиц вместо огромного количества div.)

Jon Skeet 14.01.2009 10:39

@Jon Skeet: вполне разумно. Может быть, было бы также хорошо, если бы ваш интерфейс редактирования воспроизведения хранился в базе данных, выводил любую полезную окончательную форму и, тем не менее, пропустил XSLT.

chaos 14.01.2009 10:50

@ Эран Гальперин: Ага. Но это магически политически одобренные дивы, а не злые контрреволюционные таблицы, так что это правильно и хорошо. (Можете ли вы сказать, что я думаю, что некоторые люди немного заносчивы и примадонны со своими резкими обличительными фразами "фу, столы"? Да, я думал, что вы могли бы.)

chaos 14.01.2009 10:52

Я не согласен. Та же структура (два столбца) может быть легко реализована с использованием семантических тегов с гораздо меньшим объемом разметки.

Eran Galperin 14.01.2009 10:55

@ Эран Гальперин: Хотя я считаю, что блоки div выглядят нелепо и в первую очередь будут голосовать за таблицы, я должен отметить, что у вас и в примерах Марка Тайлера гораздо меньше разметки, но это игрушечные примеры, которые не могут фактически использоваться на нетривиальном производственном веб-сайте. (продолжение)

chaos 14.01.2009 11:01

@ Эран Гальперин: Это безумно плохая практика - глобально перепрофилировать семантические теги для чего-то подобного, как это делают оба ваших примера. В реальном производстве ваша разметка будет расширена атрибутами class (или, тьфу, id), необходимыми для изоляции ваших поведенческих спецификаций.

chaos 14.01.2009 11:03

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

Eran Galperin 14.01.2009 11:15

@ Эран Гальперин: ладно. Мне больше нравится ваш пример с контейнером. На самом деле наши примеры нацелены на разные вещи. Мой не пытается минимизировать разметку, он пытается отобразить логическую структуру и максимизировать ясность и точность связанного CSS.

chaos 14.01.2009 11:26

Сведение к минимуму разметки - не идеальный вариант, но он помогает облегчить обслуживание и упростить работу. Использование именованных тегов также хорошо для семантики (программы чтения с экрана и т. д.).

Eran Galperin 14.01.2009 11:32

@chaos "ИМО, это табличные данные". - Абсолютно согласен.

Ry Biesemeyer 14.01.2009 11:38

Определенно таблица - нет необходимости в div - поскольку она имеет форму (a: b) +, а не форму ключевого значения, поскольку "a" может повторяться (исключает <dl>).

annakata 14.01.2009 12:14

@annakata: в спецификации ничего не говорится об уникальных терминах в DL. DL может содержать любое количество элементов dd / dt в любом порядке (ну, если во всем списке хотя бы 1!). Это делает скромный DL очень гибким и вполне подходящим для таких задач. Пока не получим элемент ...

Bobby Jack 15.01.2009 15:23

... направленные непосредственно на сценарии, я думаю, это лучшее, что мы можем сделать. Я полагаю, что таблица не совсем неправильная, но я обычно с подозрением отношусь к табличным данным, которые ДОЛЖНЫ быть упорядочены фиксированным образом, а не по заданному столбцу. Конечно, это мое личное определение.

Bobby Jack 15.01.2009 15:25

Я бы использовал заголовки и абзацы.

Со следующими стилями он будет оформлен так, как вы его представили:

.play h2 {
  float: left;
  clear: left;
  width: 100px;
  margin: 0;
}

.play p {
  margin-left: 100px;
}
<div class = "play">
  <h2>Jeff</h2>
  <p>This sure is a nice website we've got now.</p>

  <h2>Joel</h2>
  <p>It certainly is. By the way, working at FogCreek rocks.</p>

  <h2>Jeff</h2>
  <p>Of course it does. Have you played Rock Band yet? It's<br /> a lot of fun.</p>
</div>

Более правильным (семантически) и короче было бы использование списков определений:

dl {
  overflow: hidden;
}

dl dt {
  float: left;
  width: 30%;
}

dl dd {
  float: left;
  width: 70%;
}
<dl>
  <dt>Jeff</dt>
  <dd>This sure is a nice website we've got now.</dd>
  <dt>Joel</dt>
  <dd>It certainly is. By the way, working at FogCreek rocks.</dd>
  <dt>Jeff</dt>
  <dd>Of course it does. Have you played Rock Band yet? It's a lot of fun.</dd>
</dl>

Я не совсем согласен с тем, что это обязательно семантически правильно. Фактический список определений не имеет расширенной серии множественных определений для термина «Джефф».

chaos 14.01.2009 10:46

Подумав об этом еще раз, я бы сказал то же самое, если бы элемент <dl> назывался <al>, список ассоциаций, но не если бы это был <pl>, парный список.

chaos 14.01.2009 10:48

Конечно, но, к сожалению, в HTML не реализованы теги <al> или <pl>. В HTML так много всего не хватает ... :)

Deniss Kozlovs 14.01.2009 11:30

Хаос, я бы склонен был согласиться, но учтите, что спецификация HTML 4.01 (например) фактически говорит, что «Другое применение DL, например, для разметки диалогов, где каждое DT называет говорящего, а каждый DD содержит его или ее слова ".

Will Wagner 14.01.2009 18:02

Почему у вас плавают и dt, и dd

theonlygusti 27.10.2019 20:18

Таблицы - это то, что вам нужно.

Все остальное, например возиться с <div> и css или XSLT, - это просто новое изобретение <table>, но с синтаксисом c ** p.

Я бы выбрал три или четыре стойки фиксированной ширины. (Для любой нетривиальной пьесы потребуются сценические постановки, спецэффекты, звуковые эффекты и т. д.).

Сценические направления и т. д. Обычно представлены в той же колонке, что и выступление, но курсивом. Похоже, что столы могут быть лучшим выходом.

Jon Skeet 14.01.2009 11:22

О, но теперь я пару раз прочитал все остальные ответы, становится менее ясно ...

Jon Skeet 14.01.2009 11:25

Не позволяйте хулиганам, выступающим за стол, напугать вас. Если ситуация требует GOTO, то, ей-богу, требуется GOTO.

chaos 14.01.2009 11:38

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

Ry Biesemeyer 14.01.2009 11:38

@chaos: Дискуссия за / против таблицы так часто неверна - таблицы - вполне приемлемое решение целого ряда проблем. Проблемы возникают, когда люди начинают использовать таблицы как средство управления компоновкой, когда контент не имеет земной связи с таблицей. Все дело в семантике.

annakata 14.01.2009 12:19

@chaos - то, что я забочусь, не делает меня хулиганом!

Steve Perks 15.01.2009 01:45
Ответ принят как подходящий

Я поддерживаю ересь :-)

Всегда полезно рассмотреть CSS, прежде чем прибегать к таблицам, но часто таблицы действительно подходят лучше всего. Похоже так в данном случае.

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

Еще одна вещь - я предполагаю, что сначала вы будете хранить необработанные данные в каком-то другом формате - возможно, в базе данных, XML или другом структурированном тексте?

В любом случае, преобразование его в формат xml и преобразование его в html с помощью xslt может быть весьма полезным, когда дело доходит до игры с этим материалом.

Пожалуйста, избегайте «синдрома кувалды» (если ваш единственный инструмент - молоток, вы пытаетесь относиться к каждой проблеме как к гвоздю). HTML - это язык представление, а не язык источник.

Поэтому я предлагаю написать пьесу на чем-то, что лучше всего отражает ваши мысли (не обязательно в XML), а затем преобразовать это в HTML. Для своих работ я использую рекурсивный XML-анализатор, который может выпадать из-за синтаксического анализа XML для определенных элементов:

<content><<Hello,>> Forne smiled and thought: <<T Idiot.>></content>

Мой синтаксический анализатор вызовет собственный синтаксический анализатор для анализа содержимого <content>. В моем случае он создаст промежуточное XML-дерево:

<content><say>Hello,</say> <char>Forne</char> smiled and thought: <think>Idiot.</think></content>

Затем это дерево конвертируется в HTML, TeX, PDF и т. д.

[EDIT] Моя стратегия по созданию компактного языка работает следующим образом: я начинаю с XML. Через некоторое время я смотрю на XML и пытаюсь увидеть закономерности. Затем я думаю, как я мог бы выразить эти шаблоны более компактно: 1.) как XML, 2.) как XML-текст (с настраиваемой разметкой) и 3.) как что-то совершенно другое. Когда мне приходит в голову идея, я пишу парсер для нового формата.

Откровенно говоря, написание синтаксических анализаторов, которые могут преобразовывать что-либо в XML для автоматической фоновой обработки, сегодня является второстепенной задачей.

+1 для HTML - это просто представление. Я не уверен, какой исходный язык является лучшим на данный момент, но мне нужно будет знать, какой HTML сгенерировать в какой-то момент. Конечно, с подходящим исходным языком я могу довольно легко опробовать все идеи, представленные здесь ...

Jon Skeet 14.01.2009 13:23

@Jon: На этой планете есть три человека, которые могут создать хороший язык. Один из них - Гвидо ван Россум, а двое других - не я или вы;)

Aaron Digulla 14.01.2009 14:10

Если вы хотите сделать это семантически, я бы использовал метки, например:

<div class = "script">
<label for = "Jeff1">Jeff<label>
<div id = "Jeff1">
  <p>This sure is a nice website we've got now.</p>
</div>

<label for = "Joel1">Joel</label>
<div id = "Joel1">
  <p>It certainly is.</p>
  <p>By the way, working at FogCreek rocks.</p>
</div>

<label for = "Jeff2">Jeff</label>
<div id = "Jeff2">
  <p>Of course it does.</p>
  <p>Have you played Rock Band yet? It's a lot of fun.</p>
</div>

</div>

Это довольно красиво деградирует, и я думаю, что этот ярлык немного больше подходит для того, что вы пытаетесь сделать. А затем в вашей таблице стилей я бы сделал что-то вроде примера CSS Эрана Гальперина.

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

Я достаточно серьезен, чтобы взглянуть на некоторые сценарии, которые я создаю, и попытаться устранить любые недоработки. Я недостаточно серьезен, чтобы тратить на это часы и часы :) Мне нравится, как это выглядит, кроме того, что для каждой речи нужен отдельный идентификатор - это не идеально для меня :(

Jon Skeet 14.01.2009 13:22

Вы можете обойтись без идентификаторов и оставить атрибут for вне div.

tsimon 15.01.2009 12:34

Это определенно злоупотребление label элемент, который предназначен для описания ввода формы.

steveax 22.04.2013 10:01

Мой любимый пример разметки чего-то подобного - это одно из XHTML-соединений Tantek http://tantek.com/presentations/2005/03/elementsofxhtml/ (проверьте бит разговора)

В итоге это выглядит так:

<ol>
  <li><cite>Jeff</cite>
    <blockquote><p>This sure is a nice website we've got now.</p><blockquote>
  </li>
  <li><cite>Joel</cite>
    <blockquote><p>It certainly is. By the way, working at FogCreek rocks.</p></blockquote>
  </li>
  ...etc...
</ol>

Не уверен, как вы разметите направления этапа и т. Д ... Может быть, вы в конечном итоге создадите новый микроформат :)

Кроме того, в этой разметке есть несколько идеальных хуков CSS с дискретными ссылками, в отличие от списка определений.

Обыграй меня в цитировании, комбинации цитат. Я не собирался добавлять список, хотя это именно то, что есть, список строк.

John_ 14.01.2009 13:50

Элементы cite и blockquote специально отмечены как «не подходящие» для разговоров в последней спецификации HTML 5.2. См. Примеры как представить разговор.

Clint Pachl 04.09.2018 10:37

я бы сказал

<dialog>
  <dt>Jeff
  <dd>This sure is a nice website we've got now.
  <dt>Joel
  <dd>It certainly is. By the way, working at FogCreek rocks.
  <dt>Jeff
  <dd>Of course it does. Have you played Rock Band yet? It's a lot of fun.
</dialog>

как определено в HTML5.

Конечно, вам понадобится <script>document.createElement('dialog');</script>, чтобы заставить IE делать что-то разумное, и dialog { display:block; } в вашем CSS, чтобы заставить его работать полностью.

Вау - это реально круто! Сколько современных браузеров его поддерживают?

Jon Skeet 14.01.2009 23:48

Нравится вам это или нет, но я бы предположил, что это поддерживает первоначальное предложенное использование в спецификациях w3 DL. Нет?

Steve Perks 15.01.2009 02:33

Не знаю, какая у этого была история, но сейчас это неуместно.

Ry- 29.01.2014 04:27

В настоящее время dialog представляет собой элемент пользовательского интерфейса, с которым взаимодействует пользователь (например, модальное диалоговое окно).

Clint Pachl 04.09.2018 10:34

Вы не получите однозначного ответа на этот вопрос, поскольку в HTML есть много пробелов, один из которых заключается в следующем: в сети разбросано несколько очень солидных статей по его теме, и хорошее место для начала было бы Статья Брюса Лоусона от 2006 г..

Учитывая, что на этот вопрос нет ответа, лучшее, что мы можем сделать, это посмотреть, какие элементы доступны нам, и пойти на собственный компромисс, основанный на нашей (и сообществе) интерпретации руководящих принципов.

Мне лично нравится cite / blockquote и маршрут списка данных. Я знаю, что списки данных не имеют семантической разметки, но я искренне верю, что цель списков данных состоит не в том, чтобы перечислять определения данных исключительно в словарной манере, а в том, чтобы объединить данные в пары, где ul и ol не могут.

Я потратил много времени на размышления о семантике, и в одном я (как и большинство других специалистов в этой области) уверен, глядя на все вопросы разметки, - это то, что таблицы не являются ответом на 99,9% вопросов разметки ( если это не табличные данные, в которых вы можете использовать th, caption, тогда таблицы действительно следует исключить из вашего инвентаря). Тем не менее, я бы также сказал, что использование исключительно div также, вероятно, не является правильным ответом.

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

Элементы cite и blockquote специально отмечены как «не подходящие» для разговоров в последней спецификации HTML 5.2.

Clint Pachl 04.09.2018 10:29

В этом случае я бы просто использовал элементы div с хорошими классами, описывающими домен. Вы можете спорить об использовании всех видов элементов HTML, которые дают лучшее семантическое значение намерения, но, например, в случае элемента диалог, то есть нет, предназначенного для написания диалогов между персонажами в пьесе, он, однако, предназначен для представления пользователю диалогового окна для взаимодействия. Но тот факт, что вы можете изменить и стилизовать этот элемент по своему желанию в CSS, - это замечательно, но я бы не рекомендовал это делать.

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

Предлагаю такое решение:

.character{
  display: block;
  float: left;
}

.line{
  margin-bottom: 20pt;
  width: 400px;
  margin-left: 50pt;
}

Со следующим HTML:

<div class = "character">Jeff</div>
<div class = "line">This sure is a nice website we've got now.</div>
<div class = "character">Joel</div>
<div class = "line"> It certainly is. By the way, working at FogCreek rocks.</div>
<div class = "character">Jeff</div>
<div class = "line">Of course it does. Have you played Rock Band yet? 
  <br/>It's a lot of fun.</div>

Запуск JSFiddle: https://jsfiddle.net/quz9cj2f/6/

Теперь вы можете реализовать стандартное форматирование воспроизведения, которое я взял отсюда: http://ptfaculty.gordonstate.edu/lking/CPF_play_formatting2.pdf

.play {
  font-family: courier;
}
.play{
  margin-top: 1in;
  margin-left: 1.5in;
  margin-right: 1in;
  margin-bottom: 1in;
}
.character {
  display: block;
  margin-left: 4in;
  text-transform: uppercase;
}
.direction:before{
  margin-left: 2.75in;
  content: "(";
}
.direction:after{
  content: ")";
}
.line {
  margin-bottom: .3in;
}

С помощью этого HTML:

<div class = "play">
  <div class = "character">Jeff</div>
  <div class = "direction">JEFF is enthusiastic!</div>
  <div class = "line">This sure is a nice website we've got now.</div>
  <div class = "character">Joel</div>
  <div class = "direction">Jumping continuously</div>
  <div class = "line"> It certainly is. By the way, working at FogCreek rocks.</div>
  <div class = "character">Jeff</div>
  <div class = "line">Of course it does. Have you played Rock Band yet?
    <br/>It's a lot of fun.</div>
</div>

Рабочий JSFiddle: https://jsfiddle.net/quz9cj2f/9/

Или вы можете пойти ва-банк и использовать селекторы атрибутов CSS и создать собственные атрибуты для метаинформации:

.play {
  font-family: courier;
}
.play{
  margin-top: 1in;
  margin-left: 1.5in;
  margin-right: 1in;
  margin-bottom: 1in;
}
.character {
  display: block;
  margin-left: 4in;
  text-transform: uppercase;
}
.line[direction]:before{
  margin-left: 2.75in;
  content: "(" attr(direction) ")";
  display: block;
}

.line {
  margin-bottom: .3in;
}

Теперь вы избавились от лишних элементов и добавили метаинформацию в виде атрибутов - теперь вы можете довольно легко преобразовать ее из какой-то красивой структуры данных из JSON, XML или других форматов обмена в этот:

<div class = "play">
  <div class = "character">Jeff</div>
  <div direction = "Enthusiastic" class = "line">This sure is a nice website we've got now.</div>
  <div class = "character">Joel</div>
  <div direction = "Shaking his head" class = "line"> It certainly is. By the way, working at FogCreek rocks.</div>
  <div class = "character">Jeff</div>
  <div class = "line">Of course it does. Have you played Rock Band yet?
    <br/>It's a lot of fun.</div>
</div>

https://jsfiddle.net/quz9cj2f/11/

Рекомендация HTML 5.2 для разговоры

authors are encouraged to mark up conversations using p elements and punctuation. Authors who need to mark the speaker for styling purposes are encouraged to use span or b. Paragraphs with their text wrapped in the i element can be used for marking up stage directions.

Пример разговора с минимальной разметкой

<article class=stage-script>
  <h1>Water Cooler Talk at FogCreek</h1>

  <p><b>Jeff</b> This sure is a nice website we've got now.

  <p><b>Joel</b> It certainly is. By the way, working at FogCreek rocks.

  <p><b>Jeff</b> Of course it does. Have you played Rock Band yet? It's a lot of fun.

  <p><i>Joel and Jeff walk into the sunset</i>
</article>

CSS для разговора

.stage-script > p > b:first-child {
    display: inline-block;
    width: 5em;
}
.stage-script > p > b:first-child::after {
    content: ':';
}

Другие вопросы по теме