Только с помощью CSS вы не можете ссылаться на родителя родителя.
То, что вы можете сделать, это попробовать сочетание определенных селекторов CSS и разметки, чтобы появился желаемый эффект.
<td>
This is the enclosing element.
<ul>
<li>This is the first level UL, direct child of TD
<ul>
<li>This is the second level UL</li>
<li>Same as outside the UL</li>
</ul>
</li>
</ul>
</td>
CSS:
td > ul
color: blue; /* this affects the "direct child" UL only */
}
Вы бы ограничили глубину наследования стилей до одного уровня, следовательно, внутренний UL не имеет стиля в отношении цвета и получает свою настройку из прилагаемого текста.
Узнайте больше о CSS Child Selector и помните, что у старых браузеров могут быть свои причуды.
EDIT
Для Internet Explorer 6 дочерний селектор может быть подделан в некоторой степени. Обязательно пристегните ремни безопасности (условные комментарии и т. П.) Перед использованием:
td ul {
color: expression(/TD/.test(this.parentNode.tagName)? "blue" : "black");
}
Это предполагает "черный" в качестве внешнего цвета. Если это значение цвета может измениться, боюсь, вам не повезло. Если вы не можете определить expression()
, который может получить значение цвета из контекста (например, проверка некоторых других свойств родительских элементов). Или вы отказываетесь и используете JS-фреймворк, как уже предлагал кто-то другой.
Самое слабое решение без использования JS, конечно, будет:
td ul.first {
color: blue;
}
Но я понимаю, почему вы хотите этого избежать.