2011-01-10 2 views
2

Есть ли альтернативы селектору css3 :not, которые совместимы с IE8 (и режимом quirks).Альтернатива css3 not selector

Либо в css, либо javascript/jquery, который эмулирует селектор или что-то подобное.

Я использую *:not следующим образом. Не стесняйтесь рекомендовать решение, которое полностью избегает использования :not.

@media screen { 
    #printable { 
     visibility: hidden; 
    } 
} 

@media print { 
    *:not(#printable) { 
     visibility: hidden; 
    } 
    #printable { 
     position: absolute; 
     visibility: visible; 
    } 
} 

Обратите внимание, что использование :not связано с использованием @media print так просто, используя простое решение JQuery применить CSS к $(":not(#printable)") не будет работать, не будучи умным.

Включение целой библиотеки, такой как ie9.js или selectivirz, не является вариантом, поскольку это может влиять на различные другие части страниц и будет включать большой раздел повторного тестирования.

jsfiddle, который показывает, что он работает в браузерах, которые поддерживают :nothttp://jsfiddle.net/Raynos/TjKbz/

ответ

5

Я не думаю, что вам нужно :not в этом случае:

@media screen { 
    #printable { 
     visibility: hidden; 
    } 
} 

@media print { 
    * { 
     visibility: hidden; 
    } 
    #printable { 
     position: absolute; 
     visibility: visible; 
    } 
} 

Селектор #printable имеет более высокий приоритет, чем *, поэтому ваш элемент #printable будет виден.

+0

Это именно то, что я искал. – Raynos

+0

помните, что подэлементы #printable будут скрыты, если вы не будете также стилизовать '#printable *' как видимые. Таким образом, ответ от Hardyharzen лучше. Также элементы 'hidden' по-прежнему отображаются как пустое пространство; вы можете использовать 'display: none ;' вместо этого. – Spudley

+0

@Spudley 'display none;', используемый на контейнере #printable, удалит #printable – Raynos

1

Вы можете попробовать специфичность переопределение, т.е.

@media print { 
    * { 
    visibility: hidden; 
    } 
    #printable, #printable * { 
    visibility: visible; 
    } 
}