Eine knifflige CSS-Auswahlfrage, ich weiß nicht, ob es überhaupt möglich ist.
Nehmen wir an, dies ist das HTML-Layout:
<div></div>
<div></div>
<div></div>
<div style="display:none"></div>
<div style="display:none"></div>
Ich möchte den letzten auswählen div
, der angezeigt wird (dh nicht display:none
), der div
im gegebenen Beispiel der dritte wäre . Wohlgemerkt, die Anzahl der div
s auf der realen Seite kann unterschiedlich sein (sogar die display:none
).
html
css
css-selectors
Vishal Shah
quelle
quelle
Die eigentliche Antwort auf diese Frage lautet: Sie können es nicht tun. Alternativen zu Nur-CSS-Antworten sind keine korrekten Antworten auf diese Frage. Wenn JS-Lösungen für Sie akzeptabel sind, sollten Sie hier eine der JS- oder jQuery-Antworten auswählen. Wie ich oben sagte, ist die wahre, richtige Antwort jedoch, dass Sie dies in CSS nicht zuverlässig tun können, es sei denn, Sie sind bereit, den
:not
Operator mit den[style*=display:none]
und anderen solchen negierten Selektoren zu akzeptieren , was nur bei Inline-Stilen funktioniert und insgesamt schlecht ist Lösung.quelle
:not
von Ihnen angegebenen Operators unter bestimmten Umständen funktionieren kann. Zum Beispiel funktioniert dies perfekt für meine Situation, in der JS Elemente bedingt versteckt, die dann Inline-Stile hinzufügen, und somit funktioniert Ihre Lösung tatsächlich perfekt :)Wenn Sie Inline-Stile verwenden können, können Sie dies nur mit CSS tun.
Ich verwende dies, um CSS für das nächste Element auszuführen, wenn das vorherige sichtbar ist:
quelle
[style*='display: block']
da es haben könntedisplay: block !important;
oder nur<div style="display: block">
:-).btn-group > .btn.d-none + .btn
(wird für die Eingabegruppen von Bootstrap verwendet "Ich denke, es ist nicht möglich, durch einen CSS-Wert auszuwählen (Anzeige)
bearbeiten:
Meiner Meinung nach wäre es sinnvoll, hier ein bisschen jquery zu verwenden:
quelle
Reine JS-Lösung (z. B. wenn Sie jQuery oder ein anderes Framework nicht für andere Zwecke verwenden und diese nicht nur für diese Aufgabe herunterladen möchten):
http://jsfiddle.net/uEeaA/90/
quelle
Versuchen
div: not ([style * = "display: none"])
quelle
Auf andere Weise können Sie dies mit Javascript tun. In Jquery können Sie Folgendes verwenden:
* überarbeitet
quelle
Mit CSS ist dies nicht möglich, Sie können dies jedoch mit jQuery tun.
JSFIDDLE DEMO
jQuery:
HTML:
CSS:
jQuery (vorherige Lösung):
quelle
$('li:visible:last').addClass('red')
.$('li').not(':hidden').last().addClass("red");
Wenn Sie die ausgeblendeten Elemente nicht mehr benötigen, verwenden Sie einfach
element.remove()
anstelle vonelement.style.display = 'none';
.quelle
Das hat bei mir funktioniert.
quelle