Как определить браузер пользователя и применить определенный файл CSS? - PullRequest
11 голосов
/ 11 апреля 2011

Мне нужно определить браузер и применить соответствующий CSS-файл.

Я создал 3 файла CSS: __ie.css, ff.css, opera.css. Теперь мне нужно определить браузер, чтобы включить хороший.

Я знаю это

<!--[if IE]>
     <link rel="stylesheet" href="css/ie.css" type="text/css"/>
<![endif]-->

Но как мне сделать то же самое с Firefox и Opera / Chrome?

Ответы [ 6 ]

8 голосов
/ 11 апреля 2011

Если вам нужно определить браузеры только для того, чтобы применить CSS, то вы можете переосмыслить свой CSS перед тем, как переходить к таблицам стилей для конкретного браузера. Все, что требуется, это чтобы один браузер имитировал строку пользовательского агента другого, или чтобы была выпущена новая версия, и все ломалось. Используйте действующие стандарты и проверьте свой код (http://validator.w3.org/),), и вам придется беспокоиться о гораздо меньшем количестве кросс-браузерных проблем. Даже простое использование <!--[if IE]><![endif]--> без номера версии может нарушить компоновку в более поздних версиях.

При этом, если вы хотите по-разному стилизовать страницу в зависимости от доступных функций CSS, взгляните на Modernizr . Таким образом, вы проверяете только те функции, которые не будут нарушены, если будет выпущена новая версия браузера.

Если ничего не помогло, и вам действительно нужно обнаружить браузер посетителя, попробуйте jquery.browser. Он встроен в jQuery и прост в использовании. http://api.jquery.com/jQuery.browser/.

4 голосов
/ 03 февраля 2015

Ближайший к вам чистый CSS - это запросов к функциям .Вместо того, чтобы определять тип / версию браузера, он позволяет проверить, поддерживается ли браузером определенная комбинация свойства / значения.

Ниже приведен пример использования свойства transform для вертикального центрирования.Если браузер не поддерживает преобразование, мы не хотим настраивать его позиционирование:

@supports (transform: translateY(-50%)) {
    .foo {
        position: relative;
        top: 50%;
        transform: translateY(-50%);
    }
}

Поддержка браузером запросов функций

3 голосов
/ 11 апреля 2011

Если вам нужно, чтобы браузер обнаружил Firefox, Opera и Chrome, значит, вы делаете что-то не так.Один и тот же CSS должен работать во всех них.

Конечно, есть исключения из этого - во всех браузерах отсутствуют функции и ошибки, которых нет в других браузерах.Примером может быть text-overflow:ellipsis, который не поддерживается Firefox .

Однако, если вы придерживаетесь часто используемых функций, таких случаев мало и далеко, и в целомвам действительно не нужно выполнять обнаружение браузера в наши дни, за исключением различных версий IE.

Если вы не уверены, что функции, которые вы хотите использовать, поддерживаются большинством браузеров, вы можете узнатьна CanIUse.com или Quirksmode .

Если вы используете серьезно передовые функции, то да, у вас будут проблемы с поддержкой кросс-браузер.Но в этом случае, как правило, лучше выполнять обнаружение функций, используя продукт, такой как Modernizr , а не обнаружение браузера, поскольку это будет более надежным способом обеспечения охвата всех браузеров и всех версий, включая будущие версии.(что является слабым местом обнаружения браузера).

1 голос
/ 03 мая 2015

Иногда вы можете использовать префиксные свойства, чтобы каждый браузер применял свои собственные свойства на основе своих префиксов и игнорировал другие.Следующий код заполняет фон CSS3-градиентом:

background-color: green;
background-image: url(my-img.png);
background-image: -webkit-linear-gradient(top right, #b51111, #eeeeee);
background-image: -moz-linear-gradient(top right, #b51111, #eeeeee);
background-image: -ms-linear-gradient(top right, #b51111, #eeeeee);
background-image: -o-linear-gradient(top right, #b51111, #eeeeee);
background-image: linear-gradient(top right, #b51111, #eeeeee);

В этом коде:

  • -webkit- предназначен для браузеров на основе WebKit (Chrome и Safari)
  • -moz- для Firefox
  • -ms- для Internet Explorer
  • -o- для Opera

Но, вообще говоря, браузерсниффинг - не лучший способ, потому что он может легко потерпеть неудачу в новых браузерах.Таким образом, вы должны получить строку браузера User Agent и проанализировать ее.Затем примените конкретные правила CSS для каждого браузера на основе его поддерживаемых функций.Если строка User Agent браузера изменится в более новых версиях, вы должны изменить код своего браузера.Представьте, что вы хотите поддерживать несколько браузеров, и каждый из них может выпустить несколько новых версий за один год!Вы можете запросить браузер, если он поддерживает данную функцию.например, HTML5 видео:

if(!!document.createElement('video').canPlayType === true) {
// run some code that relies on HTML5 video
} else {
// do something else
}

Существует библиотека обнаружения объектов с именем Modernizr , написанная на основе JavaScript.Вы можете скачать его и включить с помощью html-страницы.Также вы должны добавить класс no-js к вашему элементу.Modernizer запускает все свои тесты обнаружения признаков и и некоторые классы для элемента;примерно так:

<html lang="en-gb" class=" js no-flexbox no-flexbox-legacy canvas canvastext 
webgl no-touch geolocation postmessage websqldatabase no-indexeddb
hashchange history draganddrop no-websockets rgba hsla multiplebgs
backgroundsize borderimage borderradius boxshadow textshadow opacity
cssanimations csscolumns cssgradients no-cssreflections csstransforms 
no-csstransforms3d csstransitions fontface generatedcontent video audio  
localstorage sessionstorage webworkers applicationcache svg inlinesvg 
smil svgclippaths">

Итак, вы можете применять правила CSS выборочно.Например, вы хотите применить анимированное трехмерное преобразование в поддерживающих браузерах или отобразить что-то в других.Рассмотрим следующий код:

#my-div:hover {
  transform: rotateY(90deg);
}

для случая по умолчанию и ниже для альтернативы:

.no-csstransforms3d #my-div:hover {
  position: relative;
  right: 200px;
}

Это хорошая статья , описывающая понятие.

1 голос
/ 24 января 2013

Может быть, я опоздал, но.Лучшее решение - использовать CSS / JS Browser Determiner (минимизировано 4 КБ). Отказ от ответственности : Это коммерческий продукт , который я продаю.

Чтобы разделить файлы CSS и JS, вставьте этот код в <html>tag:

<head><script src="js/cssjs-browser-determiner.min.js"></script>

<!-- Old Browsers -->
<script>
browser.is_old && document.writeln(
  '<link href="styles/old-browser.css" rel="stylesheet">'
);
</script>

Этот файл будет загружен только для старых браузеров (по умолчанию тех, которые не поддерживают переход CSS3).Если вы хотите разделить файлы для каждого конкретного браузера, вы можете сделать то же самое, но изменить browser.is_old на browser.chrome или browser.webkit и т.д ...

Затем напишите немного CSS для конкретного браузера внутри old-browser.css (или любой другой файл CSS):

.opera9 .my-el { ... }
.firefox1_5 .my-el { ... }
.ie8- .el { ... } // IE8 or less
.ios .el { ... } // iPhone, iPad, iPod
etc...
1 голос
/ 11 апреля 2011

Нет никаких условных комментариев для браузеров, кроме IE.

Но вы можете сделать это с помощью JavaScript: http://www.quirksmode.org/js/detect.html

...