西红柿爱番茄

Feed Rss

文章标签 ‘CSS’

检测外联js是否加载完毕,这个相对来说比较简单,只需要处理onload和onreadystatechange在非IE和IE下做兼容,但是需要检测外联的CSS文件是否加载完毕,这个就有点恶心了,大致分成了三类:IE和Opera;Chrome和Safari、FF,这时候FF没有跟着大部队走了,这或许也是FF中的一个bug。 最理想的方式,无非就是统一使用onload来检测link元素是否加载完毕。但是事不与程序猿人愿~ 但是兼容办法还是有的。 在IE、Opera下,可以直接使用onload、onreadystatechange这两种方式都可以检测link元素是否加载完成,跟检测script一样的原理。 在Chrome、Safari等基于Webkit内核的浏览器下,估计就要监控document.styleSheets.length的变化了。Webkit内核的浏览器在处理document.styleSheets.length的方式是这样的,当加载完了一个link之后,length就会加1,那么这样的话,就可以使用setInterval的方式来检测length的变化了,对于同时检测多个link是否加载完成的方式也可以利用这个,看length增加了多少。《测试用例》示例如下: [javascript] var link = document.createElement("link"); var cn = document.styleSheets.length; var ti = setInterval(function() { if … 了解更多

今天逛网的时候,看到一种技巧是将js代码和css代码混合在一起,利用CSS parser和Js parser的解析原理,来区分两种不同的代码。这个技巧估计老早就有人知道并讨论的乱套了,我又凹凸了一回。(合并javascript和css作为一个文件,Combine CSS with JS and make it into a single download!,Squeeze CSS and JS into one file) 起初看到这个标题觉得很惊奇,细看了上面罗列的文章之后,发现也只是利用了解析器的原理(解析器本来就是这么设计的,或许不是bug吧),对<!- … 了解更多

刚上班,首先是文档哥,之后就是无聊哥了,真杯具。但是杯具下就好了,人不杯具。消遣的最好方式就是练练脑,写代码,query就是杯具下的产物。先出土个雏形,有时间还成无聊哥了再来扩展下。 query根据CSS规则来查询DOM,提供了基础的CSS选择符: tag,.class,#id,[attr],tag[attr],tag[attr="value"]… 在测试跟jquery的查询速度比较的时候,再添加了对querySelectorAll(语法是:baseElement.querySelectorAll(selector),这里的baseElement其实是可以为除了文本节点和空节点之外的任何的DOM节点的,别以为只是document而已)的支持。编写的代码中加入了本人认为不错的编写方式,如果你对阅读代码有兴趣,那就看看吧,欢迎提出更好的方式(如果这里显得难看了,就自己下载来看:query.js):

CSS2.1是当前普遍使用着的CSS版本,平时如果循规蹈矩的编写CSS,或许不会发现问题,可问题就是:如果想要保存的时候,不小心按Ctrl+s的时候多留了一个s在CSS文件里,问题就开始来鸟;或者是不小心在规则的大括号外边多写了一个分号……出错的事情是千奇百怪的,对于新手来说频率可能会高些。出现这样的问题的时候、调试起来你可能会感觉很莫名其妙,这就需要了解一下CSS2.1版本的容错机制了。 CSS2.1的容错方式总的来说就是:对于出现一些无效的属性、属性值、@-keywords等等,它就会忽视这些样式声明或者整个规则声明。对于无效的属性、属性名会忽视该样式声明,对于@-keywords中keywords无效时,会将整个@-keywords包含的样式声明都忽略掉。 既然CSS2.1有这个容错机制,那么还有其他一些平时比较容易忽略的错误导致的样式失效的问题,下面举例出一些实例,看完下面的实例,基本可以了解CSS解析器解析CSS代码的一些原理了。 不要在CSS每个规则之间插入除空格之外的无效字符或者插入不合CSS语法的注释,否则该无效字符之后的第一个规则无效,例如: body{color:green;}. /*这里不小心多了个点号就杯具了*/ p.ten{color:red; background-color:green;} /*这个规则是无效的*/ p.one{color:red;} /*这个有效*/ 有一种情况比较特殊,当无效字符等使用大括号“{}”包含的时候,它下面的规则正常应用了,因为浏览器CSS解析器将它当作一条规则来处理。比如: body{color:green;} {.} p.ten{color:red; background-color:green;} /*它可以work啦*/ 跟上面对应的就是在样式中出现无效字符或者插入不合CSS语法的注释,则当前无效字符之后的第一条样式无效,例如: p.one{border-style:solid; . … 了解更多

Script DOM Element动态加载js可以使得js文件跟其他资源并行加载并异步执行,这是我们都知道的事实。但是有一点,或许有些人没有想到,js脚本在何时才会开始加载? 话说多了不足为信,看一个简单的测试:《测试js何时开始加载(用firebug查看HTTP瀑布图,或者HTTPWatch、Inspection等等均可)》,代码示例如下 [javascript] var s = document.createElement("script"); s.setAttribute("src","test.js"); var l =document.createElement("link"); l.setAttribute("href","/wp-content/c/style.css"); l.setAttribute("rel","stylesheet"); var img = new Image(); … 了解更多

2010-6-28 updates 之前的测试都在页面中直接通过link元素外联css文件,但是动态插入的情况呢?(非常感谢Emu的提醒) 因此,又测试了使用DOM Element的方式来动态插入link元素,并外联css文件,可是问题依旧,《测试示例》。IE、Chrome、Safari照常需要等到全部的样式表都加载下来才开始呈现页面样式;FF、Opera是加载完一个样式表就渲染页面,而不需要等到全部的样式表都加载下来。 之后,测试使用一个定时器(setTimeout)的方式来异步执行动态加载css文件,《测试页面》,这下子就有点意思了:IE出现了无样式内容闪烁,仍然需要等全部的样式表都加载下来之后才呈现页面;Chrome、Safari跟FF、Opera一样了,加载完一个样式表就渲染页面,不需要等到全部的样式表都加载下来。 不过定时器的方式虽然解决了Chrome、Safari的问题,但是使得IE可能会出现无样式内容闪烁,所以也并不是很完美的方案,就看网站的用户群偏向哪些浏览器多一些了,并对这些浏览器做这方面的优化。 ——————— 完美的分界线 ———————- 一直存在一个疑问:IE同其他主流浏览器的兼容性差异都涉及到布局、HTML、Javascript、CSS规则等方面,但是对于解析样式表来渲染整个页面呢,是否也存在异同?当看到Steve Souders的博文《Frontend SPOF》,迷惑揭开了,文中对各种浏览器解析样式表的机制做了如下描述: Browsers are split on how they handle … 了解更多