Una pregunta difícil sobre el selector de CSS, no sé si es posible.
Digamos que este es el diseño HTML:
<div></div>
<div></div>
<div></div>
<div style="display:none"></div>
<div style="display:none"></div>
Quiero seleccionar el último div
, que se muestra (es decir, no display:none
), que sería el tercero div
en el ejemplo dado. Eso sí, el número de div
s en la página real puede diferir (incluso display:none
los).
html
css
css-selectors
Vishal Shah
fuente
fuente
La verdadera respuesta a esta pregunta es que no puedes hacerlo. Las alternativas a las respuestas solo de CSS no son respuestas correctas a esta pregunta, pero si las soluciones JS son aceptables para usted, entonces debe elegir una de las respuestas JS o jQuery aquí. Sin embargo, como dije anteriormente, la respuesta correcta y verdadera es que no puede hacer esto en CSS de manera confiable a menos que esté dispuesto a aceptar el
:not
operador con[style*=display:none]
y otros selectores negados, que solo funciona en estilos en línea, y es un pobre en general solución.fuente
:not
operador como usted dijo puede funcionar en ciertas circunstancias. Por ejemplo, esto funciona perfectamente para mi situación en la que tengo JS ocultando elementos condicionalmente que luego agrega estilos en línea y, por lo tanto, su solución realmente funciona perfectamente :)Si puede usar estilos en línea, puede hacerlo únicamente con CSS.
Estoy usando esto para hacer CSS en el siguiente elemento cuando el anterior es visible:
fuente
[style*='display: block']
como podría tenerdisplay: block !important;
o simplemente<div style="display: block">
:-).btn-group > .btn.d-none + .btn
(utilizado para los grupos de entrada de bootstrap "Creo que no es posible seleccionar por un valor CSS (pantalla)
editar:
en mi opinión, tendría sentido usar un poco de jquery aquí:
fuente
Solución JS pura (por ejemplo, cuando no utiliza jQuery u otro marco para otras cosas y no desea descargarlo solo para esta tarea):
http://jsfiddle.net/uEeaA/90/
fuente
Tratar
div: not ([style * = "display: none"])
fuente
de otra manera, puedes hacerlo con javascript, en Jquery puedes usar algo como:
*re-editado
fuente
No es posible con CSS, sin embargo, podría hacerlo con jQuery.
DEMO JSFIDDLE
jQuery:
HTML:
CSS:
jQuery (solución anterior):
fuente
$('li:visible:last').addClass('red')
.$('li').not(':hidden').last().addClass("red");
Si ya no necesita los elementos ocultos, simplemente use en
element.remove()
lugar deelement.style.display = 'none';
.fuente
Esto funcionó para mí.
fuente