Provavelmente estou respondendo minha própria pergunta, mas estou extremamente curiosa.
Eu sei que o CSS pode selecionar filhos individuais de um pai, mas há suporte para estilizar os filhos de um contêiner, se seu pai tiver uma certa quantidade de filhos.
por exemplo
container:children(8) {
// style the parent this way if there are 8 children
}
Sei que parece estranho, mas meu gerente me pediu para verificar, não encontrei nada sozinho, então decidi mudar para SO antes de encerrar a pesquisa.
css
css-selectors
Brodie
fonte
fonte
Respostas:
Esclarecimento:
Por causa de uma redação anterior na pergunta original, alguns cidadãos de SO levantaram preocupações de que essa resposta pudesse ser enganosa. Observe que, no CSS3, os estilos não podem ser aplicados a um nó pai com base no número de filhos que ele possui. No entanto, os estilos podem ser aplicados aos nós filhos com base no número de irmãos que eles têm.
Resposta original:
Incrivelmente, isso agora é possível apenas no CSS3.
O truque é selecionar o primeiro filho quando ele também for o nono-desde o último filho. Isso efetivamente seleciona com base no número de irmãos.
O crédito por essa técnica é dado a André Luís (descoberto) e Lea Verou (refinado).
Você não ama CSS3? 😄
Exemplo de CodePen:
Fontes:
fonte
:first-child:nth-last-child(1)
você também pode usar:only-child
.Não. Bem, na verdade não. Existem alguns seletores que podem te aproximar um pouco, mas provavelmente não funcionará no seu exemplo e não possui a melhor compatibilidade com o navegador.
:only-child
O
:only-child
é um dos poucos seletores de contagem verdadeiros, no sentido de que é aplicado apenas quando há um filho do pai do elemento. Usando seu exemplo idealizado, ele age comochildren(1)
provavelmente faria.:nth-child
O
:nth-child
seletor pode realmente levá-lo aonde você quer ir, dependendo do que realmente deseja fazer. Se você quiser estilizar todos os elementos, se houver 8 filhos, não terá sorte. Se, no entanto, você deseja aplicar estilos aos elementos 8 e posterior, tente o seguinte:Infelizmente, essas provavelmente não são as soluções que você está procurando. No final, você provavelmente precisará usar algumas habilidades de Javascript para aplicar os estilos com base na contagem - mesmo que você use um deles, precisará verificar com atenção a compatibilidade do navegador antes de usar uma linguagem pura. Solução CSS.
W3 CSS3 Spec em pseudo-classes
EDIT Eu li sua pergunta um pouco diferente - existem algumas outras maneiras de estilizar os pais , não os filhos. Deixe-me jogar alguns outros seletores do seu jeito:
:empty
e:not
Isso estiliza elementos que não têm filhos. Não é útil por si só, mas quando emparelhado com o
:not
seletor, você pode estilizar apenas os elementos que têm filhos:Você não pode contar quantas crianças estão disponíveis com CSS puro aqui, mas é outro seletor interessante que permite fazer coisas legais.
fonte
NOTA: Esta solução retornará os filhos de conjuntos de determinados comprimentos, não o elemento pai, como você pediu. Felizmente, ainda é útil.
Andre Luis criou um método: http://lea.verou.me/2011/01/styling-children-based-on-their-number-with-css3/ Infelizmente, ele funciona apenas no IE9 e acima.
Essencialmente, você combina: enésimo filho () com outras pseudo classes que lidam com a posição de um elemento. Essa abordagem permite especificar elementos de conjuntos de elementos com comprimentos específicos .
Por exemplo,
:nth-child(1):nth-last-child(3)
corresponde ao primeiro elemento de um conjunto e também é o terceiro elemento do final do conjunto. Isso faz duas coisas: garante que o conjunto tenha apenas três elementos e que tenhamos o primeiro dos três. Para especificar o segundo elemento do conjunto de três elementos, nós usaríamos:nth-child(2):nth-last-child(2)
.Exemplo 1 - Selecione todos os elementos da lista se o conjunto tiver três elementos:
Exemplo 1 alternativa de Lea Verou:
Exemplo 2 - segmente o último elemento do conjunto com três elementos da lista:
Exemplo 2 alternativa:
Exemplo 3 - segmente o segundo elemento do conjunto com quatro elementos da lista:
fonte
li:nth-child(3):nth-last-child(1) { transform: rotate(120deg); } li:nth-child(2):nth-last-child(2) { transform: rotate(240deg); }
e assim por diante ...Trabalhando com a solução de Matt, usei a seguinte implementação do Compass / SCSS.
Isso permite expandir rapidamente o número de itens.
fonte
sim, podemos fazer isso usando o enésimo filho assim
Isso fará com que o filho da 8ª divisão avante fique vermelho. Espero que isto ajude...
Além disso, se alguém disser "ei, eles não podem ser estilizados usando CSS, use JS !!!" duvide deles imediatamente. CSS é extremamente flexível hoje em dia
Exemplo :: http://jsfiddle.net/uWrLE/1/
No exemplo, os 7 primeiros filhos são azuis e 8 em diante são vermelhos ...
fonte
Se você for fazer isso em CSS puro (usando scss), mas tiver diferentes elementos / classes dentro da mesma classe pai, poderá usar esta versão !!
fonte
Não, não há nada como isso no CSS. No entanto, você pode usar o JavaScript para calcular o número de filhos e aplicar estilos.
fonte