Por que minhas propriedades CSS estão sendo substituídas / ignoradas?

Estou tendo alguns problemas com a "hierarquia" do CSS (não tenho certeza se é apropriado chamá-la de hierarquia). Estou tentando estilizar o bit abaixo do HTML.

<code><body>
  <section id="content">
    <article>
      <ul class="posts-list">
        <li class="post-item">
          <h2>[post title]</h2>
          <p class="item-description">...</p>
          <p class="item-meta">...</p>
        </li>
        ...
      </ul>
    </article>
  </section>
</body>
</code>

Como o conteúdo da seção # muda em cada página que eu tenho, eu queria manter estilos consistentes em todos eles, então escrevi algumas regras CSS "globais".

<code>#content {
  color: #000;
  margin-left: 300px;
  max-width: 620px;
  padding: 0px 10px;
  position: relative;
}

#content p,
#content li {
  color: #111;
  font: 16px / 24px serif;
}
</code>

Eu queria estilo HTML dentro de umul.posts-list diferentemente, então escrevi essas regras.

<code>li.post-item > * {
  margin: 0px;
}

.item-description {
  color: #FFF;
}

.item-meta {
  color: #666;
}
</code>

No entanto, me deparei com alguns problemas. Aqui está como o Chrome está renderizando o CSS:

Por alguma razão, as regras#content p, #content li estão substituindo minhas regras para.item-description e.item-meta. Minha impressão foi que os nomes de classe / id são considerados específicos e, portanto, de maior prioridade. No entanto, parece que eu tenho um mal entendido de como o CSS funciona. O que eu estou fazendo errado aqui?

Edit: Além disso, onde posso ler mais sobre como funciona essa hierarquia?

questionAnswers(5)

yourAnswerToTheQuestion