Есть несколько равноправных с точки зрения семантики CSS стилей:
.style1 a {
color: red;
}
.style2 a {
color: green;
}
А в HTML коде есть блоки, к которым эти стили применяются, и которые могут друг в друга вкладываться. Например:
<div class="style2">
<span>
<a href="/">Style 2</a>
</span>
<div class="style1">
<div>
<a href="/">Style 1</a>
</div>
<div class="style2">
<a href="/">Style 2</a>
</div>
</div>
</div>
В результате получается, что вторая ссылка («Style1») окрашивается в зелёный цвет. Это происходит из-за того, что тег ссылки подходит под правила .style1 и .style2, и, так как эти правила имеют одинаковый вес, применяется правило .style2, потому что это правило объявлено после правила .style1.
Как, не зная заранее о том, какой блок в какой будет вложен, сделать так, чтобы применялся стиль только ближайшего родительского блока со стилевым классом (то есть вторая ссылка стала красной)?
Песочница с указанным кодом:
codepen.io/anon/pen/zvXmOw
P.S. Можно менять HTML код. Но учтите, что ссылки могут быть где угодно.