Какой лучший способ представить сцену script в 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 для представления нетабулярных данных. Я не вижу, как это действительно учитывает табличные данные. Раньше я использовал "строку" и "столбец", а не основные данные.
Итак, какие-то идеи? Я думаю, что большинство веб-сайтов script, которые я видел (не многие, по общему признанию), либо используют <pre>
как мой пример выше, либо не утруждают себя попыткой сохранить нормальный формат script, вместо этого просто префикс каждого абзаца имя динамика. (См. Вики-подкасты для примера этого стиля.) У меня возникают проблемы с разработкой даже тех элементов HTML, которые я должен использовать, чтобы представить это, честно говоря - список определения словаря с говорящим как термин и речь как определение вероятно, самый близкий, о котором я думал, но это похоже на злоупотребление.
Ответы
Ответ 1
Я второй ересь: -)
Всегда полезно рассматривать CSS, прежде чем прибегать к таблицам, но часто таблицы лучше всего подходят. Похоже, в этом случае.
Единственным дополнительным рассмотрением будет доступность. Я слышал, что для таблиц сложнее работать с программами для чтения текста, но я не понимаю, почему это было бы так (не стесняйтесь комментировать здесь, если вы знаете больше).
Еще одна вещь - я предполагаю, что сначала вы будете хранить необработанные данные в каком-то другом формате - возможно, базу данных или xml или какой-либо другой структурированный текст?
В любом случае получение его в формате xml и преобразование его в html с помощью xslt может быть довольно освобождающим, когда дело доходит до игры с этим материалом.
Ответ 2
Более правильным (семантически) и короче будет использование списков определений:
<dl>
<dt>Jeff</dt>
<dd>This sure is a nice website we've got now.</dd>
</dl>
dl {
overflow:hidden;
}
dl dt {
float:left;
width:30%;
}
dl dd {
float:left;
width:70%;
}
Ответ 3
Я бы сказал
<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 a lot of fun.
</dialog>
как определено в HTML5.
Конечно, вам понадобится <script>document.createElement('dialog');</script>
, чтобы заставить IE делать что-то разумное и dialog { display:block; }
в вашем CSS, чтобы заставить его работать полностью.
Ответ 4
Моим любимым примером маркировки чего-то подобного является одно из соединений Tantek XHTML 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 с дискретным LInes в отличие от списка определений.
Ответ 5
IMO, что фактически является табличными данными. Первый столбец - динамик, второй - текст.
Если вы хотите быть модным и агрессивно избегать таблиц, я считаю, что то, что, как я считаю, соответствует тому, что диктует веб-муравьи в этом сезоне, выглядит так:
<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.
Ответ 6
Я бы использовал заголовки и абзацы.
<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>
В следующих стилях он будет размещен так, как вы его представили:
.play h2 {
float:left;
clear:left;
width:100px;
margin:0;
}
.play p {
margin-left:100px;
}
Ответ 7
Пожалуйста, избегайте "синдрома кувалда" (если ваш единственный инструмент - молоток, вы пытаетесь лечить каждую проблему, как гвоздь). 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 для автоматической обработки фона, сегодня являются второстепенной задачей.
Ответ 8
Таблицы - это путь.
Что-нибудь еще, как возиться с <div> s и css или XSLT, просто изобретает <table> но с синтаксисом c ** p.
Я бы пошел на три или четыре фиксированных колонии. (Для любой нетривиальной игры понадобятся режимы сцены, спецэффекты, звуковые эффекты и т.д.).
Ответ 9
Вы не получите окончательного ответа на этот вопрос, поскольку HTML имеет много пробелов, один из которых - это - есть некоторые очень прочные статьи, размещенные вокруг Интернета о его предмете, и хорошее место для начала было бы статья Брюса Лоусона с 2006 года.
Учитывая, что нет ответа на этот вопрос, самое лучшее, что мы можем сделать, это посмотреть, какие элементы доступны для нас и сделать наши собственные компромиссы на основе нашей (и сообщества) интерпретации рекомендаций.
Мне лично нравится маршрут cite
/blockquote
и список данных. Я знаю, что в списках данных нет никакой семантической разметки, но я действительно считаю, что целью списков данных является не перечисление определений данных исключительно в словаре, а для объединения данных, где ul
и ol
не могут.
Я потратил много времени на размышления о семантике, и одна вещь, которую я (как и большинство других в этой области), уверен, что, глядя на все вопросы разметки, это то, что таблицы не являются ответом на 99,9% вопросы разметки (если это не табличные данные, где вы можете использовать th
, caption
, тогда таблицы должны быть действительно удалены из вашего инвентаря). Тем не менее, я бы также сказал, что исключительно использование div
также, вероятно, не является правильным ответом.
Я очень сомневаюсь, что поднятые голоса в этом вопросе будут отражать наилучший подход, но, скорее всего, отразят соглашение о подходе к существующим знаниям пользователей и использованию HTML.
Ответ 10
Я бы просто использовал 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 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 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 a lot of fun.</div>
</div>
https://jsfiddle.net/quz9cj2f/11/
Ответ 11
Если вы хотите сделать это семантически, я бы использовал метки, например:
<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 a lot of fun.</p>
</div>
</div>
Это сильно ухудшается, и я думаю, что ярлык немного более подходит для того, что вы пытаетесь сделать. И затем, в вашей таблице стилей, я бы нарисовал ее как пример примера Эрана Гальперина.
Другое предложение, которое я хотел бы, если вы серьезно относитесь к этому, - это еще раз изучить, как написаны мертвые сценарии дерева, и делайте все возможное, чтобы сохранить их стиль. Это поможет убедиться, что оно выглядит знакомым (читайте профессионально) для вашей аудитории.