Я прекрасно понимаю разницу между ребенком и потомками. Однако у меня проблема с селектором дочерних элементов. Возможно я не правильно что-то понимаю. Возьмите следующий HTML в качестве примера. Это трехуровневое навигационное меню.
<div id="nav">
<ul class="menu">
<li><a href="#">Menu Item 1</a></li>
<li><a href="#">Menu Item 2</a>
<ul class="sub-menu">
<li><a href="#">Sub Menu Item 1</a></li>
<li><a href="#">Sub Menu Item 2</a>
<ul class="sub-menu">
<li><a href="#">Sub Sub Menu Item 1</a></li>
<li><a href="#">Sub Sub Menu Item 2</a></li>
<li><a href="#">Sub Sub Menu Item 3</a></li>
</ul>
</li>
<li><a href="#">Sub Menu Item 3</a></li>
</ul>
</li>
<li><a href="#">Menu Item 3</a></li>
</ul>
</div>
Основываясь на моем понимании дочернего (>) селектора в css, верно следующее:
#nav {}
#nav ul.menu {}
#nav ul.menu > li {} /* main navigation items only */
#nav ul.menu > li > ul.sub-menu li {} /* the 2nd tier only */
#nav ul.menu > li > ul.sub-menu ul.sub-menu {} /* the 3rd tier only */
Однако, похоже, это не так. CSS для 2-го уровня также применяется к 3-му уровню. И только с объявлением !important
я могу перезаписать 2-й уровень в последнем определении CSS.
Имеет смысл?