`
yiminghe
  • 浏览: 1453440 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

用 ext-core 就别用 css hack

阅读更多

起因:

 

  今天碰到一个奇怪的问题,ff 以及其他标准浏览器 top :0 可以达到预期效果,而 ie6 这个怪胎非得要 top :1px ,由于只有这一个属性,懒得搞懂 ie6 为什么会这样, 又不想用条件注释这种把一个css文件分成两个,就习惯的用了邪恶的 css hack (Universal* Selector ):

 

.c {
  top:0;
  *top:1px;
}

 

很是不爽,验证都通不过了,不符合完美主义。

 

原理:

 

突然想起看得 ext-core 中 EventManager.js 的一段代码,实现了传说中的css标记浏览器方法 :


extjs 会在 html 的 body 元素上 加入  class : ext-gecko ext-gecko3  或 ext-ie6 等类 标志这是哪个浏览器,html 标签上加入  ext-strict 等表示是否处于标准模式 ,(ext-border-box 还没搞清楚干嘛的 ?)

 

代码:

 

// Initialize doc classes
(function(){
    var initExtCss = function(){
        // find the body element
        var bd = document.body || document.getElementsByTagName('body')[0];
        if(!bd){ return false; }
        var cls = [' ',
                Ext.isIE ? "ext-ie " + (Ext.isIE6 ? 'ext-ie6' : (Ext.isIE7 ? 'ext-ie7' : 'ext-ie8'))
                : Ext.isGecko ? "ext-gecko " + (Ext.isGecko2 ? 'ext-gecko2' : 'ext-gecko3')
                : Ext.isOpera ? "ext-opera"
                : Ext.isSafari ? "ext-safari"
                : Ext.isChrome ? "ext-chrome" : ""];

        if(Ext.isMac){
            cls.push("ext-mac");
        }
        if(Ext.isLinux){
            cls.push("ext-linux");
        }

        if(Ext.isStrict || Ext.isBorderBox){ // add to the parent to allow for selectors like ".ext-strict .ext-ie"
            var p = bd.parentNode;
            if(p){
                p.className += Ext.isStrict ? ' ext-strict' : ' ext-border-box';
            }
        }
        bd.className += cls.join(' ');
        return true;
    }

    if(!initExtCss()){
        Ext.onReady(initExtCss);
    }
})();

 

 

实践:


这样我们就可以利用css的层叠特性来修改原来的代码:

 

.c {
 top:0;
}

.ext-ie6 .c {
 top:1px; 
}

 


则这样 ie6 特殊样式就覆盖了 一般的样式,得到了自己想要的,并且可以通过验证了。

 

缺点以及适用场景:

 

不过毕竟 extjs 的识别浏览器的样式,要等到运行后才能添加(Ext.onReady),那么等到页面渲染完毕,extjs 才加入 浏览器特定样式,如果特定浏览器样式影响到已经渲染完毕的元素, 会造成页面闪动。所以我认为这种方法,最好的适应场景是后期效果处理,比如用户点击一个按钮,弹出一个复杂控件,则可以在这个控件中使用这种方法了


 

0
0
分享到:
评论
1 楼 block 2009-08-12  
ie在怪异模式下的盒模型与w3c的盒模型有区别,ie的盒模型会认为border、padding也属于width和height,而w3c的盒模型不包含border与padding。
所以为了兼容ie的怪异模式,有些事情就不得不使用ext-border-box。

可以看这个简单的介绍:
http://www.w3cn.org/article/tips/2004/90.html

相关推荐

    ext-2.0 ext-2.0 ext-2.0 ext-2.0 ext-2.0

    ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0ext-2.0

    ext 2 简单例子(内附ext-all.css, ext-base.js, ext-all.js三个必不可少的文件)

    ext 是 ExtJs 的简称,是一个强大的js 类库。本资源主要包括三个大的文件ext-all.css,ext-base.js,ext-al.js。在引用ext 类库的时候,这三个文件必不可少。另外我还提供了ext2的一个简单例子,以便大家学习交流。

    spketdwcs-ext-2.1.mxp

    spketdwcs-ext-2.1.mxpspketdwcs-ext-2.1.mxpspketdwcs-ext-2.1.mxpspketdwcs-ext-2.1.mxpspketdwcs-ext-2.1.mxpspketdwcs-ext-2.1.mxpspketdwcs-ext-2.1.mxpspketdwcs-ext-2.1.mxpspketdwcs-ext-2.1.mxpspketdwcs-...

    前端开源库-style-ext-html-webpack-plugin

    2. **懒加载**:对于非首屏内容,可以使用`extract`选项将其CSS异步加载,降低首屏加载时间。 3. **代码分割**:结合Webpack的`SplitChunksPlugin`,将公共CSS抽取出来,避免重复加载。 4. **预加载和预读取**:通过...

    ext-air-3.1.0和ext-core-3.1.0

    开发者在使用这些库时,需要将对应的JavaScript文件引入到项目中,并根据需求选择使用Ext Core的组件或Ext Air的特性。同时,通过阅读文档和示例,可以更好地理解和掌握如何利用这两个库来构建功能丰富的Web或桌面...

    Ext-Core 3.1.0 简体中文手册

    Ext-Core 3.1.0 简体中文手册Ext-Core 3.1.0 简体中文手册Ext-Core 3.1.0 简体中文手册Ext-Core 3.1.0 简体中文手册Ext-Core 3.1.0 简体中文手册

    ext-core-3.0.0 ext-core-3.0.0

    通过使用Ext Core 3.0.0,开发者能够构建出具有专业外观和功能的Web应用程序,而无需依赖大型的JavaScript框架。然而,需要注意的是,尽管Ext Core提供了很多功能,但它相比完整的Ext JS框架来说,缺少了一些高级...

    bcprov-ext-jdk15on-152和bcprov-jdk15on-152

    在实际开发中,如果你的项目需要使用某些特定的加密算法,或者在不受特定法规限制的环境中,可以选择使用"bcprov-ext-jdk15on-152.jar"。反之,如果必须遵守特定地区的法规,或者为了减少潜在的安全风险,可能会选择...

    ext-ms-win-gdi-desktop-l1-1-0.dll

    ext-ms-win-gdi-desktop-l1-1-0.dll 用于解决这个dll文件丢失问题,下载后将此文件放置在相关文件根目录下,即可解决丢失问题

    bcprov-ext-jdk15on-160.jar

    用于制作Android App进行SSL通信时所需使用的bks格式证书。 为了生成Android用的BKS证书文件,采取如下操作: 1.下载 bcprov-ext-jdk15on-160.jar,复制到jdk_home\jre\lib\ext 2.配置bcprov,在 jdk_home\jre\lib\...

    ext-7.0.0-gpl.zip

    标题中的"ext-7.0.0-gpl.zip"是一个软件扩展或库的压缩包,遵循GPL(GNU General Public License)开源协议。这通常意味着它是一个免费的、可修改的软件,用户可以查看源代码并根据需要进行定制,但必须保留原始许可...

    Ext-Gantt和相关js如ext-all.js ext-base

    它基于Ext JS框架,一个广泛使用的富客户端JavaScript库,提供了一系列组件和功能,用于构建交互式的用户界面。Ext JS的核心文件包括`ext-all.js`和`ext-base.js`,它们为Ext-Gantt提供了必要的基础架构。 `ext-all...

    bcprov-ext-jdk16-1.45.jar

    bcprov-ext-jdk16-1.45.jar资源包 ,在进行JAVA的ECC椭圆算法调用时,需要用到的jar包

    bcprov-ext-jdk15on-1.54.jar和bcprov-jdk15on-1.54.jar压缩文件

    如果只使用了基础加密功能,bcprov-jdk15on可能就足够了;如果需要扩展功能,再引入bcprov-ext-jdk15on。 3. **性能考虑**:虽然bcprov-jdk15on提供了丰富的加密算法,但其性能可能不如Java内置的Java Cryptography ...

    bcprov-ext-jdk15on-1.54.jar,bcprov-jdk15on-1.54.jar

    这个异常通常是由于Java加密库的问题导致的,特别是在进行安全通信,如使用SSL/TLS协议时,系统尝试生成Diffie-Hellman(DH)密钥对但失败。为了解决这个问题,我们可以引入Bouncy Castle提供的jar包:bcprov-ext-...

    bcprov-ext-jdk15on-1.52和bcprov-jdk15on-1.52

    标题中的"bcprov-ext-jdk15on-1.52"和"bcprov-jdk15on-1.52"是两个不同版本的Java软件包,它们都是由The Legion of the Bouncy Castle(Bouncy Castle)组织提供的加密库。Bouncy Castle是一个广泛使用的开源Java...

    bcprov-ext-jdk15on-1.68.jar

    bcprov-ext-jdk15on-1.68.jar

    bcprov-jdk15on-1.54.jar bcprov-ext-jdk15on-1.54.jar下载

    2.将下载的两个JAR文件复制到:JDK安装目录\jre\lib\ext下,例如我的就是D:\Program Files (x86)\java\JDK1.6\jre\lib\ext 3.打开java.security文件:在JDK安装目录\jre\lib\security下的java.security文件。

    ext-3.4.1包

    "Ext-3.4.1包"是一个针对Web应用程序开发的JavaScript库,源自EXT JS框架。EXT JS是一个强大的用户界面库,专为构建富互联网应用(RIA)而设计。3.4.1版本是该库的一个特定迭代,包含了对之前版本的改进、修复和新...

    ext-all.js

    ext-all.js,ext-all.css

Global site tag (gtag.js) - Google Analytics