2011-01-10 4 views

Odpowiedz

11

Uwielbiam wyzwania!
Zajęło mi trochę czasu, ale w końcu okazało się, że: testowany

body {background:0} /* default */ 
@media not screen and (1) { 
body {background:red} /* OP 11 */ 
} 
@media not screen and (orientation) { 
body {background:green} /* for the earlier versions of Opera that pick the first media query's rule + chrome/safari */ 
} 

przeglądarek:

  • czerwono: Opera 11
  • zielono: Opera 10 i 10,5 + WebKit przeglądarki
  • none: Opera 9.26 + Firefox 3.6 + IE9

Jest to związane z error-handling oraz fakt, że NOTneguje wynik globalny (przeglądarki WebKit nie oceniają prawidłowo orientacji bez poprawnej wartości). Ponieważ orientation jest obsługiwany w presto 2.7, drugie zapytanie o media to FALSE.

Identyfikacja fałszywych orientacji brzmi jak dobre imię dla mnie.

+0

Sir. Jesteś oficjalny (i naprawdę daję ci gwarancję) NIESAMOWITE. – Tomkay

+2

Jak ktoś może tak hakować? : -o –

+0

Czy to działa w operze 12? –

2

Nie wiem o sposób CSS-tylko jak Opera 11 jest nadal bardzo nowy.

Można użyć po stronie serwera językach jak PHP wykryć User Agent w przeglądarce lub można użyć swobodnie dostępne JavaScript rozwiązanie CSS Browser Selector.

Powyższe rozwiązanie nie zawiera jeszcze Opery 11, więc sprawdźmy ciąg znaków User 11 Opery 11, sprawdzając ich numer references. (Faktycznie mają swój własny artykuł na how to detect opera)

Opera/9.80 (Windows NT 5.1; U; pl) Presto/2.7.39 Version/11,00

Kiedy teraz przyjrzeć się z JavaScript wyżej wymieniony selektor przeglądarki CSS można zobaczyć czytając navigator.userAgent i porównując go z wieloma odmianami - po prostu dodaj swoją odmianę Opery 11 i jesteś gotowy do pracy (lub poczekaj, aż programista zaktualizuje javascript - lub nawet lepiej, zaktualizuj scenariusz i powiedz o tym autorowi!).

5

Czy istnieje dobry powód, aby tego dokonać?

Zawsze polecam od wykrywania przeglądarki. W niemal każdym przypadku, gdy ludzie chcą z niego korzystać, lepiej jest użyć funkcji wykrywania obiektów. Jeśli dowiesz się, czy wybrana funkcja jest obsługiwana, automatycznie zaczniesz obsługiwać nowe wersje innych przeglądarek, gdy nadrobią zaległości, bez ciągłej pracy, aby utrzymać aktualność swojej strony, tak jak w przypadku skryptów wykrywania przeglądarki.

Do wykrywania cech, jednym z najlepszych narzędzi, które mogę zasugerować, jest użycie Modernizr.

Do wykrywania w przeglądarce - zwłaszcza marki nowej przeglądarki, takiej jak Opera11 - nie mogę zaproponować niczego, co będzie niezawodne. Poprawną odpowiedzią jest spojrzenie na ciąg agenta użytkownika, który może być łatwo zmieniony przez użytkownika w celu sfałszowania innej przeglądarki (i często jest, szczególnie przez użytkowników Opery, ponieważ oni najczęściej próbują ominąć witryny, które robią wykrywanie przeglądarki i spróbuj je zablokować)

+1

To zdecydowanie dobry punkt, i zgadzam się z tobą .. ale staram się unikać javascript jak najwięcej ... i jestem ciekawy, czy ktoś znalazł hack do Opery 11 jeszcze – Tomkay

2

Tutaj można przejść ......

/* Opera */ 
@media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0) 
{ 
here you can display anything you want just for opera 
} 
+0

ouch! Hacky, hacky, hacky. Ale przypuszczam, że * naprawdę * musisz to zrobić ...: -s – Spudley

2

Poniższa styl rzeczywiście dostać tylko renderowane w Operze. Zobacz Webmonkeys blogu Szczegółowe informacje:

@media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0) { 
    #myid { background-color: #F00; } 
} 

Należy jednak pamiętać, że wszelkiego rodzaju hacki CSS nie może już pracować w przyszłości. Dlatego zdecydowanie zaleca się dodanie stylów dynamicznych tylko dla Opery z jQuery (jQuery.browser).

+0

Kolejna odpowiedź dała już ten sam kod. ale daję ci punkt, w którym zamieścisz odnośnik z powrotem na blogu. Naprawdę mam nadzieję, że nigdy nie zobaczę strony używającej tego hacka. : -s – Spudley

+0

Gdy kliknąłem na odpowiedź i ją napisałem, odpowiedź nie była dokładnie taka, jak chciałem napisać. Zauważyłem, że jest to duplikat, ale postanowiłem go zostawić tylko w celach informacyjnych. –

1

read-only Pseudo-klasa jest prosty filtr dla Opery:

#foo:read-only { overflow: auto; }