Классы должны быть хорошо структурированными, функциональными и атомарными. Иногда полезно сузить его до element.name, если вы думаете, что у вас будут ситуации, подобные
div.highlight {
background: #FF00FF;
}
span.highlight, p.highlight {
color: #FF00FF;
}
В противном случае вам придется сделать что-то вроде
.highlight {
color: #FF00FF;
}
div.highlight {
background; #FF00FF;
color: inherit;
}
По общему правилу большого пальца, я думаю, что определения одного класса должны работать для всех примененных к нему элементов. Если есть конкретная ситуация, когда вам придется переопределить определения класса по умолчанию, вы должны, по крайней мере, определить новый класс, чтобы не нарушать представление для других элементов.
Вам также нужно будет решить, когда следует избегать таких структурных зависимостей от ваших селекторов, как
div#main div.section h1.title span.link { }
Но лучше было бы написать
div#main span.link {}