关于ID选择器
和class选择器不同,这里使用#
class的值不同标签可以发生重复。但是id不允许!!!
id选择器不能结合使用
id属性通常和js配合使用
- #label {
- background-color: red;
- }
思考
最近我在对 CSS 的样式进行一些性能测试,然后我的一些好友问我:为什么你不使用 IDs 来作为页面上一些特定的内容部分呢?
这个问题很难回答,有下面几个理由:
1.页面中的该元素无法重用
2.螺旋式下降导致的特异性
3.通过 IDs 用来标识一些非常特殊的内容,但牺牲了抽象性
4.性能方面可通过其他方式来解决
5.下面我们针对这四点进行深入探讨。
无法重用页面的元素
IDs 对程序员来说相当于是单例,一个页面中不允许存在两个相同的 id(当然浏览器不会报错就是了),这就意味着你不可能重用某个元素,相当于是一对一的关系。而根据我的速度测试,如果一段 CSS 代码只对一个元素起作用对速度并不利,同时也带来了 CSS 膨胀的额外开销。
由螺旋式下降导致的特异性
CSS 关于重载的两个方法:
1.级联: (任何下一级的元素都可以重写上一级CSS规则)
2.特异性: the idea of creating weight by using weighted selectors.
为什么我说这里是一个螺旋式下降,因为为了要重载一个优先级很高的规则,我必须给它设置添加再高的优先级。
- .ModuleOfficeList .property-checkbox input {display:block;margin-bottom:8px;_border:0px !important;}
- .ModuleOfficeList .property-checkbox,
- .ModuleOfficeList .new-icon,
- .ModuleOfficeList .open-icon {display:block}
- ....uid-officelistings .property-checkbox {display:none !important; }
上面是我在 2005 年的一段真实的代码,上面的代码我必须在最后使用 !important 规则来对选择器规则进行重新排序。这很不好。一旦我们这样做......它需要我们更多的时间去追捕父ID,我们将推翻当前的特异性。这是不友好的而且不利于维护,最终你会掉进入自己挖好的洞,只有重构才能摆脱这个噩梦。
另一方面:
我听到少数的一些声音关于使用 ID 选择器的好
使用 ID 选择器更快
是的,这一点的确没错,而且我也曾经证明过。但是性能的表现微乎其微,但当你使用嵌套其他选择器时性能就下降了:
- #profile-module {...}
- #profile-module li {...}
- .profile-module li {...}
第二个选择器就没有第三个来的快,因为CSS是从右到左的,因此 li 会先被扫描,因此通过 ID 进行定位将直接被忽略。
关于 CSS 选择器的性能问题,请看 Steve Souders explains how selector speed works.
IDs 就是单例的意思
很多人会在页面中定义 ID ,但某个元素在所有页面中只出现一次的话,用 ID 选择器是没问题的。我唯一声明的是所有代码都应该是可重用的,如果能避免还是尽量避免。
特别说明
最后需要说明的是,我并不是要大家完全抛弃使用 ID,ID 可以加速 JavaScript 执行,在文档中传达具体的意义。
我只是不建议在 CSS 中使用 ID 选择器,当然,决定权在于你自己。
ID选择器,CSS
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?