手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 免费部署 N8N 的 Zeabur 注册 | 登陆
浏览模式: 标准 | 列表分类:PHP

走走停停看看的:CSS通用元素选择器的都市流言

在转这篇文章之前,我先说一点项目中遇到的问题,公司的主页最近改版上线,但是上线后出了一点问题,是CSS方面的问题。

CSS文件很多,前端把它分的很细,每一个小的widget部位就是一个单独的CSS文件,这样确实方便了有重复内容时的工作量减轻。于是我们在上线后,对CSS文件进行了合并,用的是Yii的插件 EclientScript(@hightman开发的一个插件)。CSS和JS都顺利合并了,但结果却不太正常。经过仔细检查发现是每个文件头的@charset=utf-8导致了这个问题。合并后,所有的文件内容都被引用到一起,所以造成了合并后的文件中“@charset=utf8”有好几个,但是为了保证文件是按utf-8格式被加载于是保留了最上面的@charset=utf8,其余的都删除了。OK,这时候所有的流量器都正常了。

结果第二天,老板过来说,在IPAD下不正常,于是继续排查,最终发现还是这个@charset=utf8的原因。前面说过,我们只保留了第一个文件的UTF8的判断,其他的都清空了,那为什么还会出错呢?经过测试,发现@charset=utf-8只能在第一行才有效,在其他行时,safari不认,而EClientScript在压缩文件后,会在文件第一行加上这个文件对应实际文件的地址,于是就让@charset=utf8到了第二行。所以IPAD上面显示就不太正常了。。

接下来就转载了:CSS通用元素选择器的都市流言,原文来自:http://shawphy.com/2010/11/css-universal-selector.html

本文尚未有测试数据支持,以下结论仅是根据现有情况的一种解释。

关于 * 这个选择器,一直有个疑惑,到底是否影响效率。在先前的观念中,这由于要匹配所有的元素,让每一个元素都带上这个属性,所以会影响页面的效率。但近来的思考,觉得这应该不会影响效率。为此还特地写过一篇博文,里边提到了这点:真的还需要reset.css么?

而这篇文章中我打算着重阐述为何 * 这个选择器不会影响效率。

上周六去参加了 web标准化交流会,席间 winter 从浏览器(webkit)的角度分享了关于页面渲染的过程。其PPT也可以在前面的链接中下载到。

其中一个很重要的过程是,当页面载入过程中,CSS 和 HTML 是并行下载的。并且通常CSS是在HEAD中引入的,并且体积不如HTML大,所以CSS会先下载完。下载的过程中浏览器就已经开始对CSS中的规则进行 索引,也就是已经确定哪一个元素呈现的样式是如何的了。同时,浏览器根据HTML构建出的DOM树,其中的每一个元素会直接去CSS规则索引中去比对,构 建出渲染树。这个过程都是并行的,并且CSS规则是进行了索引的,因此速度非常的快速。

那么我们看看CSS规则的来源主要有2个,一是浏览器内置的元素样式,Firefox 3.x版是放在目录下的res文件夹内,4.0版和Chrome中没找到(这里是我的主观臆断不太可靠,大家自行辨别),另一个就是页面提供的。根据查看 放在 res 文件夹下的 CSS 文件就可以得知,就是是什么样式都不写,已经为每一个HTML元素设定好了基本样式了。

那么看看我们所忌讳的事情,不用*{margin:0;padding:0},而是使用

CSS代码
  1. html, body, div, span, applet, object, iframe,  
  2. h1, h2, h3, h4, h5, h6, p, blockquote, pre,  
  3. a, abbr, acronym, address, big, cite, code,  
  4. del, dfn, em, font, img, ins, kbd, q, s, samp,  
  5. small, strike, strong, sub, sup, tt, var,  
  6. b, u, i, center,  
  7. dl, dt, dd, ol, ul, li,  
  8. fieldset, form, label, legend,  
  9. table, caption, tbody, tfoot, thead, tr, th, td {  
  10.     margin: 0;  
  11.     padding: 0;  
  12. }  

看看这一大坨东西啊,难道不是跟上面的 * 选择器一个用途么?对每个元素(至少是常用元素),添加样式。其实作用是一样的,并且就算没有这一坨,浏览器内置样式也在对每个元素设置样式。之后 HTML 文件中的每一个元素,可以很容易找到自己应当呈现的样式了。

那么,对于之后添加的,会不会有性能影响呢?也不会,由于CSS规则已经确定并索引了,所以今后增加的元素也不过就是简单比对一下而已,不会多走一步的。

所以,由此得出结论,只要有需要,大胆的使用 * 吧,他不会给你从性能上增加额外的麻烦。

最后补两个前端优化小知识:
1,由于CSS规则和HTML是并行载入的,因此把CSS放在HEAD中是非常有必要的。
2,少使用 :last-child 。因为这个选择器无法索引起来,必须等DOM构件完,才能知道他是不是父元素中最后的那个 元素。这种就非常慢了,慎用。

 

----EOF--

注:文中@charset=utf-8我格式可能写的不对,只是表达一个意思,因为我没有dreamwaver,而所说DW在写CSS的时候,默认会在第一行加上这个玩意。。。

 

Tags: css, charset, eclientscript, yii

115快盘

有朋友在sinaapp上开了个项目,是快盘提取文件,支持任意后缀名,因为这样就可以方便用户转贴到任意勃客或者论坛之类的了

所以我也就写了一个类似的。。还没有做rewrite。。

可以尝试一下:

http://labs.neatstudio.com/115.php?code=t99f5a9181&type=

这个type可以是tel,cnc,union,udan,对应了电信,网通,联通,优蛋(优蛋只能生成链接并帮你触发点击)

如果网上啥数据也没有,那就只能生成U蛋链接喽。

想法创意来自:http://kill.sinaapp.com/

 

Tags: 115

IE6?

这,应该算是冯大辉的牢骚吧?事实上我们也都知道,IE6真的不靠谱,不给力,但。。。有时候真的不能不用。
冯大辉这么说,从国内 IE 6 的市场份额说开去

网络大战,眼球无数,口水横飞,最受伤的仍然是那些可怜的用户。刚才偶然想到另一个和大战中的各方有点关系的话题:IE 6 浏览器在中国市场份额为何仍然高居不下?

作为一个十余年前发布的软件产品,作为无数互联网行业同仁最头疼的浏览器,无论从哪个方面看,IE 6 都应该推出历史舞台。但是,从各方面数据来看,在国内仍有接近半数的用户在用这个千疮百孔的浏览器,这不是怪事吗? 有知就里的朋友会觉得这不是一个多么复杂的问题,业界同仁都会给出这样一个答案:因为大量定制的盗版 Windows 造成这一局面。这是个关键因素,抛开那个盗版利益链不谈,我们继续提问,为何国内这些安全厂商不协力将这一境况改变?

如果"尊重用户的利益"(refer), 那么自居"卫士"的那个公司应该努力把这事儿解决掉,而不是搞什么"开机速度大比拼"。按理说,这事儿应该很容易,那个软件管家整天给用户提示一些没什么 新功能的"新版本"软件,给用户多提示下升级真的更加安全的 IE 8 应该不难吧? 当然不厌其烦去提示用户升级一下 IE,不推广自己的什么所谓的"安全浏览器"肯定是一件有损自身商业的事情,但这样会真的赢得口碑和尊重。

同样,那个靠 IM 独霸一方的公司,既然为"一天就能扫描出170万个木马"(refer)而担心用户安全的问题,那么帮用户把大门修好,你们是不是也很省心?当然,这样会有损你们自家生产的浏览器市场。但长期来看,那些损失的会弥补回来。

那个国内最大的电子商务公司,那家国内最大的第三方支付企业,与其忙活着开发"自己"(其实也都是用了别人的内核)的浏览器,还不如去协助用户用到更好一点的浏览器,提升用户的安全,自己就会减少麻烦。这不是帮别人,这是在帮助自己。

或许,这些想法都太幼稚了,因为一个有缺陷的浏览器是是一个植入梦境的机会,是生财之道。谁控制浏览器,谁控制 Web 入口;谁控制入口,谁就能源源不断得获取利益。

中国用户之所以 IE 6 的份额高举不下,其实就是和这些利益链条有关系。说白了,IE 6 这个堪称世界上最不安全的浏览器,就好比一个操作系统系统后门,要想在我等可怜的用户的操作系统上来去自如多半要依赖它。如果中国用户统一升级到 IE 最新版本或是其它如 Firefox、Chrome 等浏览器,恐怕很多号称做"安全"产品的公司都要关门大吉,你说,他们能干么?

对于国内的所有网站来说,解决 IE 6 的问题,就是在帮网站提高效率;对于每一个技术人来说,解决 IE 6 的问题,就是提升我们的生产力;对于每一个用户来说,解决 IE 6 的问题,就是给自己一个掌控自身权益的机会。

这才有点"低碳、环保"的意味在里面。

--EOF--

有时候想想是谁在坚持着IE6?难道不又是那些我们认为大型的公司嘛?正是他们养成了那些普通用户的习惯,只是现在又要求他们改掉,但对那些不太熟悉电脑的人来说,这个难度不低啊。我是习惯了firefox了。。不过,最近也准备折腾chrome,因为听说开发插件很方便。而firefox的插件则有点痛苦。。。

腾讯社区开放平台

以前这个开放平台就存在,但一直没有关注过。只是这次好象开始支持PHP了。而且。。。
        腾讯社区开放平台是基于QQ空间、朋友社区(QQ校友)两大社交网络的开放平台。至今官方提供了一系列的开放接口(Open API)和开发工具包(SDK),开发者可以通过Open API获取登录用户信息、用户签名信息以及好友关系链信息等。已上线的应用还可以调用支付和监控接口,实现支付功能,查看应用实时运维数据。这句话来自:http://opensns.qq.com/apps/wiki

API接口地址在这里:http://wiki.opensns.qq.com/wiki/SDK%E4%B8%8B%E8%BD%BD#1_PHP_SDK,也可以在此页面下载,文件名中pengyou.class.php,有兴趣的可以看一下。我是下载了,有空的时候折腾折腾。

 

Tags: qq, tencent, api

判断QQ号是否为企业QQ

在商城程序中,不可避免的会给商城的用户展示自己的QQ,于是QQ在线状态就好象比较重要了,因为光显示一个号码并不能使得用户直接与商家交流,所幸QQ提供了这样的功能。

如果你是个人用户,那么:http://wp.qq.com/就可以生成自己的在线状态,比如我就这样显示了一下:

点击这里给我发消息
但如果你是企业QQ,上面的功能就不能用了,因为企业QQ的状态与其他的不太一样,他的在线状态生成在这里:http://b.qq.com/wp/

但目前从网上找的资料来看,好象没有更好的办法来判断用户是否是企业QQ,因此只能找了一些相关资料:

XML/HTML代码
  1. 企业QQ是按您所购买的工号数,来收取相应的年费的。我们按工号数量划分为3个套餐,您可以根据自己的需要,购买我们的产品。同时我们会免费赠送一个尊贵的400/800开头的10位企业QQ号码,此企业QQ号码,可以与您的热线400/800电话一致,从而尽显您企业的专业形象。具体经销商联系方式,请参见“企业QQ经销售联系方式”。  
所以只能现在这样判断:10位的数字,前三位是400或者800:
PHP代码
  1. <?php  
  2. $qqnumber = '';  
  3. $bizPre = substr($qqnumber,0,3);  
  4. if( ($bizPre == '400' || $bizPre == '800' ) && strlen($qqnumber) == '10' ){  
  5.    //企业qq  
  6. }  
  7. //至于那个判断是否是QQ号的,这里就不写了,也只是简单的判断而已  
于是,就可以根据QQ号显示不同的在线状态了

 

Tags: qq, 在线状态