Eu tenho um conjunto de quatro cores e quero aplicá-las aos divs aninhados, para que cada próximo filho tenha uma cor diferente. Se houver um quinto nível de aninhamento, quero começar de novo na primeira cor e manter isso em andamento, mesmo que eu tenha infinitos níveis profundos de aninhamento . Isso é possível apenas com seletores CSS e evita JavaScript ?
Atualmente, estou preso ao código a seguir - como você pode ver o rosa continua sendo aplicado a todos os divs aninhados após o quarto.
div {
border: 1px solid black;
font-weight: bold;
padding: 30px;
}
div {
color: red;
}
div>div {
color: blue;
}
div>div>div {
color: green;
}
div>div>div>div {
color: pink;
}
<div>
1
<div>
2
<div>
3
<div>
4
<div>
1
<div>
2
<div>
3
<div>
4
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
html
css
css-selectors
easwee
fonte
fonte
section
ou nome da classe para os top então seus seletores devem ser contidasection > div
Respostas:
Podemos usar
hue-rotate
para dar o efeito desejado. Ao definir o filtro,90deg
ele repetirá a cada 4 crianças. Ao especificar a cor inicial como azul e girar o matiz 90 graus, obtemos o vermelho.Eu não acho que é possível especificar quatro cores diferentes da maneira que você está usando usando CSS puro, a menos que esteja disposto a repetir
div > div > ...
para um ninho máximo teórico?Exemplo com texto de lorem ipsum:
Mostrar snippet de código
fonte
saturate
. Ao aumentar a saturaçãosaturate(3)
, obtemos exatamente as mesmas cores a cada loop, mas notei uma espécie de sombra ou sangramento quando empurro a saturação para o alto, o que torna MUITO difícil ler os personagens. Aumentei a saturação nos meus exemplos de código para 2,5 para reduzir a diferença entre as cores por loop.Aqui está uma idéia de solução baseada em algum truque de segundo plano. É mais uma aproximação do que uma solução robusta, pois considerarei o fato de que você terá apenas uma linha de texto em cada nível.
fonte