Как добавить строку css только для Safari

Я делаю веб-сайт, но элемент нуждается в поле в Chrome и других браузерах, но не в safari. Поэтому я хочу добавить строку css, чтобы исправить это, но я не могу найти никакого метода для добавления css только для safari 3+.

6 ответов


Это невозможно, так как вы также применяете то же свойство к Chrome. Как Chrome,так и Safari используют префикс - webkit.

но вы можете сделать это в PHP.

<?php
    $browser = get_browser();
    if(strtolower($browser->browser) == 'safari') {
        echo '<link href="safari.css" rel="stylesheet" type="text/css" />';
    } 
?>

заменить safari.css с вашей собственной таблицей стилей. Кредит @theorise


Я считаю, что это должно работать

Скрипка:http://jsfiddle.net/kHFjM/1/

    var userAgent = navigator.userAgent.toLowerCase(); 
    if (userAgent .indexOf('safari')!=-1){ 
       if(userAgent .indexOf('chrome')  > -1){
         //browser is chrome
       }else if((userAgent .indexOf('opera')  > -1)||(userAgent .indexOf('opr')  > -1)){
         //browser is opera 
       }else{
        //browser is safari, add css
       }
    }

вот ссылка для определения версии браузера https://stackoverflow.com/a/5918791


интегрированное решение jQuery:

<script type="text/javascript">
$(function () {
if (navigator.userAgent.indexOf('Safari') != -1 && 
    navigator.userAgent.indexOf('Chrome') == -1) {
        $("body").addClass("safari");
    }
});
</script>

<style>
div {
  margin:20px;
}

.safari div {
  margin:0;
}
</style>

Pure JS интегрированное решение:

<style>
div {
  margin:20px;
}

.safari div {
  margin:0;
}
</style>
<body>
<script type="text/javascript"> 
if (navigator.userAgent.indexOf('Safari') != -1 && 
    navigator.userAgent.indexOf('Chrome') == -1) {
        document.body.className += " safari";
    }
</script>
</body>

в safari 9.0+ вы можете сделать это сейчас в CSS с помощью этого приятного взлома. Вам не нужен код JS. Я сделал это, и он отлично работает для меня. Используйте этот хак:

@supports (overflow:-webkit-marquee) and (justify-content:inherit) {

/* type your custom css code here */

}

причина, по которой он работает: Safari 9.0 и выше имеют обнаружение функций. Таким образом, обнаружив функцию, которая предназначена исключительно для Safari, вы можете обнаружить Safari. переполнение: - webkit-marquee и justify-content: inherit предназначены исключительно для safari. Вот почему мы можем обнаружить safari с помощью этого простого взлома CSS.


вместо добавления дополнительного кода для устранения проблемы, так как поля по умолчанию отличаются, Вы можете попробовать сбросить все поля и отступы окружающих элементов до 0, прежде чем изменять его. Это может решить вашу проблему.

это полностью личное предпочтение, но я начинаю все свои веб-страницы с:

*{
    margin:0;
    padding:0;
}

У меня никогда не было проблем с кросс-браузером относительно полей или заполнения при этом.


есть вопрос, подобный этому на CSS-трюки форум. Но ответ в основном, нет. Вы можете попробовать пользователь-агент нюхает серверную сторону или с JavaScript, а затем добавить класс в html (например, для старых версий IE в HTML5 BoilerPlate).

надеюсь, что это помогает.

--избитый к нему парнями выше и ниже!