Uma pergunta complicada de seletor de CSS, não sei se é possível.
Digamos que este é o layout HTML:
<div></div>
<div></div>
<div></div>
<div style="display:none"></div>
<div style="display:none"></div>
Quero selecionar o último div
, que é exibido (ou seja, não display:none
), que seria o terceiro div
no exemplo dado. Lembre-se, o número de div
s na página real pode ser diferente (mesmo display:none
os).
html
css
css-selectors
Vishal Shah
fonte
fonte
A resposta real para esta pergunta é: você não pode fazê-lo. Alternativas às respostas somente de CSS não são respostas corretas para esta pergunta, mas se as soluções JS forem aceitáveis para você, você deve escolher uma das respostas JS ou jQuery aqui. No entanto, como eu disse acima, a resposta correta e verdadeira é que você não pode fazer isso no CSS de maneira confiável, a menos que esteja disposto a aceitar o
:not
operador com os[style*=display:none]
seletores negados e com outros seletores, que funcionam apenas em estilos inline e são geralmente pobres solução.fonte
:not
operador conforme você declarou pode funcionar em determinadas circunstâncias. Por exemplo, isso funciona perfeitamente para a minha situação onde eu tenho JS condicionalmente ocultar elementos que então adiciona estilos inline e, assim, a sua solução realmente funciona perfeitamente :)Se você pode usar estilos embutidos, pode fazê-lo exclusivamente com CSS.
Estou usando isso para fazer CSS no próximo elemento quando o anterior estiver visível:
fonte
[style*='display: block']
uma vez que poderia terdisplay: block !important;
ou apenas<div style="display: block">
:-).btn-group > .btn.d-none + .btn
(usado para os grupos de entrada do bootstrap "Eu acho que não é possível selecionar por um valor css (display)
editar:
na minha opinião, faria sentido usar um pouco de jquery aqui:
fonte
Solução JS pura (por exemplo, quando você não usa o jQuery ou outra estrutura para outras coisas e não deseja fazer o download apenas para esta tarefa):
http://jsfiddle.net/uEeaA/90/
fonte
Experimentar
div: not ([style * = "display: none"])
fonte
de outra maneira, você pode fazê-lo com javascript, no Jquery, você pode usar algo como:
* reeditado
fonte
Não é possível com CSS, no entanto, você pode fazer isso com jQuery.
JSFIDDLE DEMO
jQuery:
HTML:
CSS:
jQuery (solução anterior):
fonte
$('li:visible:last').addClass('red')
.$('li').not(':hidden').last().addClass("red");
Se você não precisar mais dos elementos ocultos, use em
element.remove()
vez deelement.style.display = 'none';
.fonte
Isso funcionou para mim.
fonte