Нужен совет по структуре html/css для отступов, многопоточных комментариев

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

response1
 response1a
 response1b
  response1b1
response2
 response2a
 response2b
 response2c
  response2c1
   response2c1a
    response2c1a1
     response2c1a1
      response2c1a1a
       response2c1a1a1

Я считаю, что это называется резьбовые комментарии. Вы, наверное, видели этот формат на многих сайтах онлайн-дискуссий, таких как reddit.

Что мне интересно, так это как реализовать это в HTML моего приложения?

Какой тип комбинации html/css будет наиболее целесообразным, чтобы разрешить этот тип определяемого приложением отступа?

6 ответов

Решение

В вашем HTML:

<div class="comment">
  Response1
  <div class="comment">
    Response1a
    <div class="comment">
      Response1a1
    </div>
  </div>
  <div class="comment">
    Response1b
  </div>
</div>

И в вашем CSS:

.comment { margin-left: 50px; }

Этот подход очень гибкий и портативный. Вы также можете использовать <ul>/<li> вместо <div> (Я предполагаю, что можно спорить как в пользу, так и против того, чтобы рассматривать резьбовые комментарии как семантически эквивалентные неупорядоченным спискам). Внутренний комментарий также может быть заключен в другой <div> если вам это нужно для дополнительного CSS-стиля.


Обновление: я (немного) предпочитаю <div>с над <ul>/<li> потому что это упрощает вашу реализацию.

Во-первых, если вы используете подход на основе списка, вы должны удалить <li> стиль, который использует большинство браузеров (точка маркера и отступы). Во-вторых, вы, вероятно, также хотите нацелить набор <ul>/<li>специфичные для ваших комментариев, потому что они должны отличаться от других структур списка. Это означает, что даже при "семантическом" подходе вы прибегаете к занятиям. Итак, в конце концов, какое преимущество вы действительно получаете, и стоит ли это дополнительных хлопот?

Мы были немного более осторожны с применением <ul> подобные структуры в наших проектах, и пока мы действительно рады этому. И, видимо, мы не единственные.

Наиболее используемая структура - это комбинация

    s (неупорядоченный список) и
  • s (элемент списка). Каждый пост будет иметь список комментариев, например:

    <div id="post">
        ... (post content here) ...
    
        <ul class="responses">
            <li>response1</li>
            <li>response2</li>
        </ul>
    </div>
    

    Затем, расширяя эту идею, каждый ответ может иметь также список ответов. Они идут внутри элемента

  • .

    <div id="post">
        ... (post content here) ...
    
        <ul class="responses">
            <li>
                response1
                <ul class="responses">
                    <li>response1a</li>
                    <li>response1b</li>
                </ul>
            </li>
            <li>response2</li>
        </ul>
    </div>
    

    Этот подход довольно легок в коде и семантически (используемые теги означают правильную вещь) наиболее подходящий.

    Чтобы добавить к этому немного CSS, чтобы сделать его визуально привлекательным, вы можете сделать что-то вроде этого:

    ul.responses {
        padding-left: 4em;
    }
    
    ul.responses li {
        border-width: 2px 0;
        border-style: solid;
        border-color: #ccc;
    }
    

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

Разве встроенные списки не будут работать? Внедренные неупорядоченные списки с выключенным типом списка будут иметь такой эффект. Может быть, я не понимаю ваш вопрос.

то есть.

<ul>
<li>response1
 <ul>
 <li>response1a</li>
 <li>response1b
  <ul>
   <li>response1b1</li>
  </ul>
 </li>
</li>
</ul>

<ul> а также <li> теги

Пример:

<html>
<head>

</head>
<body>
    <ul>
        <li>
            comment
            <ul>
                <li>I comment you
                    <ul>
                        <li>oh, and I comment you!</li>
                    </ul>
                </li>
            </ul>
        </li>
        <li>
            another one
            <ul>
                <li>comment about your</li>
                <li>well, another about you</li>
            </ul>
        </li>
    </ul>
</body>
</html>

Я взломал что-то подобное вместе для ManagedAssembly.com. Это не идеально, но это может дать вам некоторые идеи.

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

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

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