如何仅为Safari添加css行

时间:2013-07-14 08:46:09

标签: html css safari stylesheet

我正在创建一个网站,但Chrome和其他浏览器中的元素需要保证金,但在Safari中则不然。所以我想添加一个css行来修复它,但我找不到任何方法来为safari 3+添加css。

7 个答案:

答案 0 :(得分:11)

我相信这应该有用

小提琴: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

答案 1 :(得分:8)

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>

纯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>

答案 2 :(得分:8)

这是不可能的,因为您也会将相同的属性应用于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

答案 3 :(得分:4)

在safari 9.0中(仅限,不是&gt; 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。这就是为什么我们可以通过这个简单的CSS hack来检测safari。

答案 4 :(得分:1)

由于默认边距不同,您可以尝试将所有边缘元素的边距和填充重置为0,然后再更改它,而不是添加更多代码来修复问题。这可以解决你的问题。

这完全是个人偏好,但我用以下内容开始我的所有网页:

*{
    margin:0;
    padding:0;
}

在执行此操作时,我从未遇到任何关于边距或填充的跨浏览器问题。

答案 5 :(得分:0)

CSS-Tricks forum上有类似的问题。但答案基本上是,不。 您可以尝试用户代理嗅探服务器端或JavaScript,然后向html添加一个类(就像HTML5 BoilerPlate中的旧IE版本一样)。

希望这有帮助。

- 被上面和下面的人殴打!

答案 6 :(得分:0)

我已经尝试了几乎所有上述建议的解决方案,但是直到我看到我的话中的一段代码,一切都没有解决:

@-webkit-keyframes fadein { //code here }

它完成了这项工作并将所需的CSS应用于: Safari, Chrome and Opera > 12.1

希望这可以帮助某人。