Задать вопрос
@Multu

Как закрасить вложенные элементы дерева с учетом их html иерархии?

Приветствую всех! Сломал голову над решением на первый взгляд довольно простой задачи. Прошу помочь разобраться)

Суть в следующем. Есть 2 css класса: green и red. Требуется чтобы элементы дерева закрашивались по такой логике. Самые дальние (расположенные ниже по дереву) наследники имеют цвет ближайшего по иерархии родителя с установленным классом.

Для ясности покажу 2 примера html

В таком случае ссылки с текстом "3" и "2" должны быть окрашены в красный цвет, а ссылка с текстом "1" - в зеленый.
<ul>
     <li class="green">
              <a href="">1</a>
              <ul>
                      <li class="red">
                              <a href="">2</a>
                               <ul>
                                     <li> 
                                             <a href="">3</a>
                                     </li>
                                      ....
                               </ul>
                      </li>
              </ul>
     </li>
</ul>


В таком случае ссылки с текстом "3" и "2" должны быть окрашены в зеленый цвет, а ссылка с текстом "1" - в красный.
<ul>
     <li class="red">
              <a href="">1</a>
              <ul>
                      <li class="green">
                              <a href="">2</a>
                               <ul>
                                     <li> 
                                             <a href="">3</a>
                                     </li>
                                      ....
                               </ul>
                      </li>
              </ul>
     </li>
</ul>


Вот примерный css:
<style>
.green a { background-color: green }
.red a { background-color: red}
</stype>


Сейчас закрашивание элементов зависит от порядка строк в css, возможно ли как-то сделать так, чтобы закрашивание зависело не от порядка строк в css, а от иерархии html дерева (с учетом описанной логики)?

Вынес сюда для удобства ответы на вопросы из комментариев:
1. Количества цветов может быть не обязательно 2, может быть и больше
2. В дереве может быть много уровней вложенности, причем пользователь сразу же видит не всю структуру, а она динамически подгружается по мере его раскрытия
3. Нельзя использовать inline стили в html
4. Можно использовать js

Благодарю за внимание! Буду очень благодарен за помощь))
  • Вопрос задан
  • 382 просмотра
Подписаться 1 Оценить 3 комментария
Пригласить эксперта
Ответы на вопрос 3
Stalker_RED
@Stalker_RED
.green a { background-color: green; }
.red a { background-color: red ;}
.red .green a { background-color: green; }
.green .red a { background-color: red ;}

https://jsfiddle.net/xkb9h04L/

Вариант на JS https://jsfiddle.net/xkb9h04L/1/
Ответ написан
realovich
@realovich
Веб-разработчик
Может вам поможет эта статья: htmlbook.ru/samcss/dochernie-selektory
Ответ написан
Screamie
@Screamie
Full-stack разработчик
А как на счет background-color: inherit;?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы