Поля CSS: выравнивание списка по плавающему левому изображению

Ниже приведен мой первый вариант кодирования комментария, похожего на Reddit, в html+css. У меня есть несколько вопросов о css и общей структуре:

  1. Как сделать так, чтобы тело комментария («Король снял шляпу...») совпадало с заголовком комментария («Натан, опубликовал...») и хвостом комментария («постоянная ссылка ответа…»)? Я попытался немного удлинить поле margin-bottom для .comment-left, но это не решило проблему.
  2. Я знаю, что был немного доволен тегами. Какие из них лишние?
  3. Есть ли лучший/более плотный способ получить ту же структуру?

Спасибо всем, Натан

PS Я использовал полезную информацию здесь для размещения моих стрелок для голосования друг над другом.


альтернативный текст


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
  <head>
    <title>CSS sandbox: comments</title>

    <style type="text/css">

      .vote {
        width: 15px;        
        float: left;
        clear: left;      
      }
      .vote img {
        display: block;
        float: none;
        clear: both;
        width: 15px;
      }
      .userpic img {
        width: 60px;
      }
      .comment-contents li {
        list-style-type: none;
        margin-bottom: 10px;
      }
      .comment-left {
        float: left;
      }
      .head {
        margin-left:10px;
      }
      .tail-list li {
        display: inline;
      }
      img {
        border: 0;
      }
      a {
        text-decoration: none;
      }
    </style>
  </head>

  <body>
    <div class="comment">
       <span class="comment-left">
        <span class="vote">
          <a href="#"><img alt="^" title="vote up" src="http://www.reddit.com/static/aupgray.gif"></a>
          <a href="#"><img alt="v" title="vote down" src="http://www.reddit.com/static/adowngray.gif"></a>
        </span>
        <span class="userpic">
          <a href="#">
          <img src="http://www.gravatar.com/avatar/550deada0ac679dfc3c9103b674760af?s=128&d=identicon&r=PG" height="60" width="60">
          </a>
        </span>
       </span>

       <span class="comment-main">
        <ul class="comment-contents">
          <li class="head">
           <a href="#">Nathan</a>, posted 2 hours ago
           <a href="#" class="comment-collapse">[-]</a>
          </li>
          <li class="middle">
            <p>The king took off his hat and looked at it. Instantly an immense
            crowd gathered. The news spread like wildfire. From a dozen leading
            dailies,reporters and cameramen came rushing to the scene pellmell in
            highpowered monoplanes. Hundreds of reserves,responding without
            hesitation to a riotcall,displayed with amazing promptness quite
            unparalleled inability to control the everincreasing multitude,but
            not before any number of unavoidable accidents had informally
            occurred.</p>

            <p>Chapter 1 - untitled (eecummings)</p>
          </li>
          <li class="tail">
           <ul class="tail-list">
            <li><a href="#">reply</a></li>
            <li><a href="#">permalink</a></li>
            <li><a href="#">offensive?</a></li>
           </ul>
          </li>
        </ul>
      </span>
    </div>
  </body>
</html>

person nafe    schedule 20.12.2009    source источник


Ответы (3)


Обновите свой css, указав левое дополнение в «.comment-contents li» и убрав отступ в «.head».

.comment-contents li {
list-style-type: none;
margin-bottom: 10px;
padding-left: 60px;
}

.head {
margin-left:0px;
}

Пока вы это делаете, просто используйте padding вместо margin для «.comment-contents li»:

.comment-contents li {
list-style-type: none;
padding: 0 0 10px 60px;
}

Я рекомендую не использовать padding и margin в классе, если в этом нет абсолютной необходимости.

person superUntitled    schedule 20.12.2009
comment
Практически идеально! Вот как это выглядело после ваших изменений: i46.tinypic.com/9786xw.png - person nafe; 20.12.2009
comment
Итак, теперь заголовок и середина комментария выровнены. Хвост комментария все еще кажется проблемой, потому что у него есть хвостовой список (который добавляет больше отступов?). Я могу удалить этот вложенный список, и он выровняет начало, середину и конец — это хорошее решение? - person nafe; 20.12.2009

Сейчас нет времени заниматься CSS (может быть, позже), но вы сможете добиться внешнего вида с помощью этой разметки:

<div class="comment">
     <p class="user">
        <a href="#">
          <img src="http://www.gravatar.com/avatar/550deada0ac679dfc3c9103b674760af?s=128&d=identicon&r=PG" height="60" width="60">
        </a>
        <a href="#">Nathan</a>, posted 2 hours ago
        <a href="#" class="comment-collapse">[-]</a>
     </p>
     <p>The king took off his hat and looked at it. Instantly an immense
            crowd gathered. The news spread like wildfire. From a dozen leading
            dailies,reporters and cameramen came rushing to the scene pellmell in
            highpowered monoplanes. Hundreds of reserves,responding without
            hesitation to a riotcall,displayed with amazing promptness quite
            unparalleled inability to control the everincreasing multitude,but
            not before any number of unavoidable accidents had informally
            occurred.
     </p>
     <p>Chapter 1 - untitled (eecummings)</p>
  <ul class="commentTools">
    <li class="voteUp"><a href="#">vote up</a></li>    
    <li class="voteDown"><a href="#">vote down</a></li>        
    <li><a href="#">reply</a></li>
    <li><a href="#">permalink</a></li>
    <li><a href="#">offensive?</a></li>
  </ul>
</div>

И CSS

.comment {
   position:relative;
    padding-left:75px;
}
.comment p {

}
.comment .user img {
  float:left;
  margin-left:-60px;
}
.comment .commentTools {
    padding-left:0;
}
.comment .commentTools li {
   display:inline;
}
.comment .commentTools .voteUp, .comment .commentTools .voteDown {
   position:absolute;
   display: block;
   left:0;
}
.comment .commentTools .voteUp {
    top:0;
}
.comment .commentTools .voteDown {
    top:15px;
}
.comment .commentTools .voteUp a, .comment .commentTools .voteDown  a {
  display:block;
  width: 15px;
  height: 15px;
  text-indent:-5000em;
}
.comment .commentTools .voteUp a {
    background: url(http://www.reddit.com/static/aupgray.gif) no-repeat;
}
.comment .commentTools .voteDown a {
    background: url(http://www.reddit.com/static/adowngray.gif) no-repeat;
}

Я не проверял это, поэтому могут быть некоторые ошибки. Дайте мне знать, если вы хотите объяснить CSS.

person wheresrhys    schedule 20.12.2009
comment
Спасибо за Ваш ответ. Я пробовал. Вот как это выглядит: i50.tinypic.com/2l9xsh.png - person nafe; 20.12.2009
comment
Некоторые выравнивания немного смещены... но я думаю, что вижу, как это исправить. Мне интересно, как вы используете фон в таблице стилей для установки изображений с голосованием за / против - предпочтительнее ли это встраивания тега ‹img› в html? - person nafe; 20.12.2009
comment
Общая идея заключается в том, что, если подумать, стрелка вверх означает слова «голосовать за». Размещение текста непосредственно в ссылке означает, что эта информация максимально понятна для тех, кто по каким-либо причинам не может использовать изображения. - person wheresrhys; 21.12.2009

Как насчет установки p margin-left на 30px?

person netrox    schedule 20.12.2009
comment
Мне это нравится, потому что это кажется самым простым. Я добавил p {margin-left: 35px;} в таблицу стилей, и, похоже, это сработало. Тем не менее, является ли это (добавление заполнения пикселя) надежной вещью в целом? Вот как это выглядело после внесения изменений: i50.tinypic.com/v2wmc6.png - person nafe; 20.12.2009
comment
Да. Я бы сказал, что это самый простой способ с вашим письменным HTML. - person netrox; 21.12.2009