起因:
今天碰到一个奇怪的问题,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 才加入 浏览器特定样式,如果特定浏览器样式影响到已经渲染完毕的元素, 会造成页面闪动。所以我认为这种方法,最好的适应场景是后期效果处理,比如用户点击一个按钮,弹出一个复杂控件,则可以在这个控件中使用这种方法了
分享到:
相关推荐
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 是 ExtJs 的简称,是一个强大的js 类库。本资源主要包括三个大的文件ext-all.css,ext-base.js,ext-al.js。在引用ext 类库的时候,这三个文件必不可少。另外我还提供了ext2的一个简单例子,以便大家学习交流。
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-...
2. **懒加载**:对于非首屏内容,可以使用`extract`选项将其CSS异步加载,降低首屏加载时间。 3. **代码分割**:结合Webpack的`SplitChunksPlugin`,将公共CSS抽取出来,避免重复加载。 4. **预加载和预读取**:通过...
开发者在使用这些库时,需要将对应的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.0.0,开发者能够构建出具有专业外观和功能的Web应用程序,而无需依赖大型的JavaScript框架。然而,需要注意的是,尽管Ext Core提供了很多功能,但它相比完整的Ext JS框架来说,缺少了一些高级...
在实际开发中,如果你的项目需要使用某些特定的加密算法,或者在不受特定法规限制的环境中,可以选择使用"bcprov-ext-jdk15on-152.jar"。反之,如果必须遵守特定地区的法规,或者为了减少潜在的安全风险,可能会选择...
ext-ms-win-gdi-desktop-l1-1-0.dll 用于解决这个dll文件丢失问题,下载后将此文件放置在相关文件根目录下,即可解决丢失问题
Extjs中实现国际化要用到的文件ext-lang-zh_CN.js和ext-lang-en.js
用于制作Android App进行SSL通信时所需使用的bks格式证书。 为了生成Android用的BKS证书文件,采取如下操作: 1.下载 bcprov-ext-jdk15on-160.jar,复制到jdk_home\jre\lib\ext 2.配置bcprov,在 jdk_home\jre\lib\...
它基于Ext JS框架,一个广泛使用的富客户端JavaScript库,提供了一系列组件和功能,用于构建交互式的用户界面。Ext JS的核心文件包括`ext-all.js`和`ext-base.js`,它们为Ext-Gantt提供了必要的基础架构。 `ext-all...
这个异常通常是由于Java加密库的问题导致的,特别是在进行安全通信,如使用SSL/TLS协议时,系统尝试生成Diffie-Hellman(DH)密钥对但失败。为了解决这个问题,我们可以引入Bouncy Castle提供的jar包:bcprov-ext-...
bcprov-ext-jdk16-1.45.jar资源包 ,在进行JAVA的ECC椭圆算法调用时,需要用到的jar包
标题中的"bcprov-ext-jdk15on-1.52"和"bcprov-jdk15on-1.52"是两个不同版本的Java软件包,它们都是由The Legion of the Bouncy Castle(Bouncy Castle)组织提供的加密库。Bouncy Castle是一个广泛使用的开源Java...
如果只使用了基础加密功能,bcprov-jdk15on可能就足够了;如果需要扩展功能,再引入bcprov-ext-jdk15on。 3. **性能考虑**:虽然bcprov-jdk15on提供了丰富的加密算法,但其性能可能不如Java内置的Java Cryptography ...
标题中的"ext-7.0.0-gpl.zip"是一个软件扩展或库的压缩包,遵循GPL(GNU General Public License)开源协议。这通常意味着它是一个免费的、可修改的软件,用户可以查看源代码并根据需要进行定制,但必须保留原始许可...
标题中的"bcprov-ext-jdk15on-1.52.jar"和"bcprov-jdk15on-1.52.jar"是两个与Java相关的库文件,它们都属于Bouncy Castle加密库的不同版本。Bouncy Castle是一个开源的Java安全套件,提供广泛的安全服务,包括加密、...
"Ext-3.4.1包"是一个针对Web应用程序开发的JavaScript库,源自EXT JS框架。EXT JS是一个强大的用户界面库,专为构建富互联网应用(RIA)而设计。3.4.1版本是该库的一个特定迭代,包含了对之前版本的改进、修复和新...
ext-all.js,ext-all.css