tengo este diseño:¿Por qué mi selector jQuery: not() no funciona en CSS?
<div id="sectors">
<h1>Sectors</h1>
<div id="s7-1103" class="alpha"></div>
<div id="s8-1104" class="alpha"></div>
<div id="s1-7605" class="beta"></div>
<div id="s0-7479"></div>
<div id="s2-6528" class="gamma"></div>
<div id="s0-4444"></div>
</div>
Con estas reglas CSS:
#sectors {
width: 584px;
background-color: #ffd;
margin: 1.5em;
border: 4px dashed #000;
padding: 16px;
overflow: auto;
}
#sectors > h1 {
font-size: 2em;
font-weight: bold;
text-align: center;
}
#sectors > div {
float: left;
position: relative;
width: 180px;
height: 240px;
margin: 16px 0 0 16px;
border-style: solid;
border-width: 2px;
}
#sectors > div::after {
display: block;
position: absolute;
width: 100%;
bottom: 0;
font-weight: bold;
text-align: center;
text-transform: capitalize;
background-color: rgba(255, 255, 255, 0.8);
border-top: 2px solid;
content: attr(id) ' - ' attr(class);
}
#sectors > div:nth-of-type(3n+1) {
margin-left: 0;
}
#sectors > div.alpha { color: #b00; background-color: #ffe0d9; }
#sectors > div.beta { color: #05b; background-color: #c0edff; }
#sectors > div.gamma { color: #362; background-color: #d4f6c3; }
utilizo jQuery para añadir la clase unassigned
a sectores que de otra manera no tienen una de las clases alpha
, o beta
gamma
:
$('#sectors > div:not(.alpha, .beta, .gamma)').addClass('unassigned');
Entonces se aplican algunas reglas diferentes a esa clase :
#sectors > div.unassigned {
color: #808080;
background-color: #e9e9e9;
opacity: 0.5;
}
#sectors > div.unassigned::after {
content: attr(id) ' - Unassigned';
}
#sectors > div.unassigned:hover {
opacity: 1.0;
}
Y todo funciona a la perfección en los navegadores modernos.
Pero ya que el :not()
selector in jQuery se basa en :not()
in CSS3, estaba pensando que podía moverlo directamente en mi hoja de estilo, para no tener que depender de la adición de una clase extra usando jQuery. Además, no estoy realmente interesado en dar soporte a versiones anteriores de IE, y otros navegadores tienen soporte excelente para el selector :not()
.
Así que trate de cambiar la parte .unassigned
anterior a este (conociendo sólo tendré sectores Α, beta y gamma en mi diseño):
#sectors > div:not(.alpha, .beta, .gamma) {
color: #808080;
background-color: #e9e9e9;
opacity: 0.5;
}
#sectors > div:not(.alpha, .beta, .gamma)::after {
content: attr(id) ' - Unassigned';
}
#sectors > div:not(.alpha, .beta, .gamma):hover {
opacity: 1.0;
}
Pero tan pronto como hago esto deja de funcionar - en todos los navegadores! Mis sectores no asignados no aparecen atenuados, desvanecidos o etiquetados como "Sin asignar".
Updated but not so interactive jsFiddle preview
¿Por qué el trabajo :not()
selectora en jQuery, pero fracasan en CSS? ¿No debería funcionar de manera idéntica en ambos lugares ya que jQuery afirma ser "compatible con CSS3", o hay algo que me falta?
¿Existe una solución pura de CSS para esto o tendré que depender de un script?
Relacionado: [Combining: not() selectores en CSS] (http://stackoverflow.com/questions/7403129/combining-not-selectors-in-css) – BoltClock
También relacionado: [Encyclopedia Stack Exchange] (http : //blog.stackoverflow.com/2012/05/encyclopedia-stack-exchange) - este es mi primer experimento con él, y hasta ahora, además de ese rudo voto negativo, debo decir que resultó mejor de lo que esperaba:) – BoltClock