Пишу, по большей части, про историю, свою жизнь и немного про программирование.

CSS hack для Opera 10.50, 10.xx, не 10.50

«Опера» 10.50 стала поддерживать border-radius и много других интересных вещей, в этой связи встал вопрос — как отличить 10.50 от более ранних версий в CSS?

Например, у меня на сайте скруглённые уголки для «Оперы», начиная с версии 9.50 делаются при помощи SVG, 10.50 вполне могла бы нарисовать их без этого «изыска». Помучался-помучался и придумал несколько CSS-хаков, собственного изобретения.

<style type="text/css">
@media (0) {
    body { background: red; } /* Opera 10.xx, но < 10.50 */
}

@media all and (resolution = 0dpi) {
    body { background: red; } /* Opera < 10.50, минимальной версии не знаю, 9.27 работает */
}

@media all, () {
    body { background: red; } /* Opera 10.xx (включая 10.50) */
}

@media all, {
    body { background: red; } /* Opera 10.50 prealpha */
}
</style>

Нужно понимать, что хаки сделаны исключительно для того, чтобы отличить одну версию «Оперы» от другой и могут сработать в других браузерах, так что лучше подстраховаться и добавить в стили какой-нибудь хак, чтобы отличать «Оперу» от всего остального.

Я не знаю минимальной версии при которой срабатывает хак №2, но подозреваю, что будет работать где-то начиная с 7-й версии.

Все хаки я испытывал на «Операх» 10.50 prealpha, 10.10, 10.01, 9.50 и 9.27. Надеюсь, баг 10.50 не исправят и хак будет работать и дальше (pepelsbey, пожалуйста, молчи!:).

Добавлено 25 декабря 2009 10:38: проснувшись утром, я обнаружил, что умудрился ночью запостить этот текст два раза. Решил удалить один из них и удалил тот, что с комментариями. Простите, это утро :(

16 комментариев
FX Poster (blog.fxposter.org) 2009

Ксасавчик! Молодец, спасибо.

Кстати, Жень, а как ты вообще эти хаки находил?

FX Poster (blog.fxposter.org) 2009

*кРасавчик :) очепятался

Евгений Степанищев (bolknote.ru) 2009

Комментарий для blog.fxposter.org:

Подбором :)

FX Poster (blog.fxposter.org) 2009

Комментарий для Евгения Степанищева:

А почему именно @media? :)

Евгений Степанищев (bolknote.ru) 2009

Комментарий для blog.fxposter.org:

Трудно сказать. Интуиция.

ninjacolumbo.ya.ru 2009

Комментарий для blog.fxposter.org:

Bolk — настоящий хакер. Когда он находит разные дыры в нашем ПО, я поражаюсь, как у него мышление устроено, что до таких вещей додуматься можно.

Евгений Степанищев (bolknote.ru) 2009

Комментарий для ninjacolumbo.ya.ru:

У меня ощущение, что я зря это делаю. Работа вида «нашёл — пидарас, не нашёл — ну какой же ты пидарас». Кажется, выглядит так, как будто мне делать нечего, вот я и ищу дыры.

angel31337 (angel31337.ya.ru) 2010

Не респектище огромное. Помогло на ура, так держать

life-maniac.livejournal.com 2010

для Опера 10.52 сборка 3370 ни один из хаков, к сожалению, не подошел. Помог этот (от StudioAD):
@media all and (-webkit-min-device-pixel-ratio:10000),not all and (-webkit-min-device-pixel-ratio:0){.name{style:value;}} /* Стиль для Opera */

stewardtz 2010

Огроменное спасибо!!!!! Сегодня это меня спасло.

Евгений Степанищев (bolknote.ru) 2010

Комментарий для stewardtz:

Рад помочь :)

Евгений Степанищев (bolknote.ru) 2010

Комментарий для life-maniac.livejournal.com:

для Опера 10.52 сборка 3370 ни один из хаков, к сожалению, не подошел. Помог этот (от StudioAD)…

А Safari/Chrome на нём не срабатывает? Для «Оперы» 10.50 и выше есть другой хороший CSS-хак ( http://bolknote.ru/all/1786/ ):

noindex:-o-prefocus, .name { attr: value }

никита 2010

Есть проблема с этими хаками — их отлично воспринимает Firefox 4!!

Евгений Степанищев (bolknote.ru) 2010

Комментарий для никита:

Вот жеж зараза. А что, он уже вышел? Можно запостить эти хаки им в багтрекер.

webkev.com 2011

Грош цена этим хакам. Их воспринимает FF.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для http://webkev.com:

У меня FF 3.6.13, это последний на данный момент. Он их не воспринимает. Если их воспринимает бета FF4, то ещё не поздно завести баг в их багзилле.

И вообще, ваша фраза звучит как «вы потратили недостаточно усилий, чтобы сделать меня счастливым». Я вам ничего не должен.