当前位置:  开发笔记 > 编程语言 > 正文

如何使CSS仅对Opera可见

如何解决《如何使CSS仅对Opera可见》经验,为你挑选了5个好方法。

有没有办法让一些CSS规则只对Opera(9.5 +)可见?



1> Vitaly Baton..:

适用于Opera 10.63

noindex:-o-prefocus, .class {
  color:#fff;
}


这个技巧背后的理论是:a)如果有一个不支持的选择器,浏览器需要忽略整个CSS规则.并且b)因为这个选择器使用-o-前缀,所以只有Opera支持它 - 所有其他选择器必须忽略它.
好极了.正是我在寻找的东西:一个只在Opera中工作的CSS选择器.但是你可以这样简化它:*: - o-prefocus,body {background-color:red;}
据我所知,与opera v12一起使用!

2> certainlyake..:

这个黑客适用于最新的Opera:

 @media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0) {
       #id {css rule}
 }

就我测试而言,它并没有触及任何其他浏览器,但这可能是实际的几个月,随着网络技术的繁荣等.


在Opera 12上未检测到.
Vitaly Batonov使用:-o-prefocus选择器要简单得多.

3> Kornel..:

使用纯CSS攻击你可能无法安全地限制你正在黑客攻击的上层版本(例如,-o-prefocus在你的黑客停止修复并开始破坏它们之后很久就可以支持).

// remember to limit maximum version, because hacking all future versions
// will eventually break the page 
if (window.opera && window.opera.version() < 10)     
{
   document.documentElement.className += ' opera9';
}

在CSS中:

.opera9 .element-to-hack { /*declarations for opera <= 9 only*/ }

首先仔细检查CSS规范,以确保您所攻击的内容实际上是一个错误.Opera 10的具有完全CSS2.1支持,并通过了所有的测试酸,所以如果事情没有出现合适的,这可能是因为其它原因(错误别的地方的代码,细节或拐角情况下,你不应该依赖等.)



4> hallvors..:

不要想"检测Opera".

想想"检测不支持功能x的浏览器".例如,此JavaScript语句允许您检测支持moz-border-radius的浏览器:

typeof (getComputedStyle(document.body, '').MozBorderRadius)=='string'

这相当于基于WebKit的浏览器(Safari,Chrome):

typeof (getComputedStyle(document.body, '').WebKitBorderRadius)=='string'

把它们放在一起,我们可以想出类似的东西

function detectBorderRadiusSupport(){
    var styleObj;
    if( window.getComputedStyle ){
        styleObj=window.getComputedStyle(document.body, '');
    }else{
        styleObj=document.body.currentStyle;
    }
    return typeof styleObj.BorderRadius != 'undefined' || typeof styleObj.MozBorderRadius != 'undefined' || typeof styleObj.WebKitBorderRadius != 'undefined';
}

// the below must be inside code that runs when document.body exists, for example from onload/document.ready/DOMContentLoaded event or inline in body

if(!detectBorderRadiusSupport())document.body.className+=' fakeBorderRadius';

CSS:

body.fakeBorderRadius .roundMyCorners{
    /* CSS for Opera and others to emulate rounded corners goes here, 
    typically various background-image and background-position properties */
}

警告:未经测试:-p


如果你可以忽略一个临时的浏览器错误,我鼓励你这样做.因此,如果问题纯粹是化妆品而不影响功能,我建议你不要做任何事情.即使它让一些遇到问题的用户看起来更糟糕,我认为最好避免使用会导致问题的变通方法和黑客攻击.
我只是想补充一点,当一个浏览器据称支持一个功能时,并不意味着它的实现是完美无缺的.因此,在某些情况下,您可能想要禁用特定浏览器的功能.就像Opera 10.53中的"box-shadow"一样,仍有一些重绘问题.在这种情况下,除了将它隐藏在Opera之外,我没有别的办法.你呢?

5> 小智..:

Opera12

@media (min-resolution: .001dpcm) {
    _:-o-prefocus, .class {
        background: red;
    };
}

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有