您现在的位置是:网站首页> 编程资料编程资料
该不该使用ID选择器?浅谈对CSS的ID选择器的使用建议简要讲解CSS中的类型选择器、ID选择器、类选择器英文教程:五种CSS选择器类型IE7对css选择器的改进-CSS教程-网页制作-网页教学网CSS属性选择器的四种格式-CSS教程-网页制作-网页教学网最常用的五类CSS选择器-CSS教程-网页制作-网页教学网四种css 伪类选择器CSS3 选择器 伪类选择器介绍CSS3 选择器 属性选择器介绍CSS3 选择器 基本选择器介绍你不可不知的CSS选择器
2021-09-04
877人已围观
简介 在不嵌套单独使用ID选择器的情况下,它是比较快的,然而各种各样的原因使开发者们抛弃对ID选择器的使用.究竟该不该使用ID选择器?这里我们就来浅谈对CSS的ID选择器的使用建议
关于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 选择器,当然,决定权在于你自己。
相关内容
- CSS 之margin知识点(必看)浅谈css margin重叠css布局之负margin妙用及其他实现CSS的margin属性在页面布局中的使用攻略细说CSS中margin属性的使用 深入解析CSS中margin属性的使用CSS中使用负margin值来调整居中位置CSS属性探秘系列(六):margin解决margin 外边距合并问题
- 使用CSS3滤镜的filter:blur属性制作毛玻璃模糊效果的方法详解CSS3 filter:drop-shadow滤镜与box-shadow区别与应用通过css3的filter滤镜改变png图片的颜色的示例代码CSS3 中filter(滤镜)属性使用详解jquery和CSS3图片排序过滤搜索插件Filterizr详解CSS3中强大的filter(滤镜)属性使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IEcss3背景图片透明叠加属性cross-fade简介及用法实例
- 详解IE浏览器的haslayout属性及相关兼容性问题解决浏览器hack总结 详细的浏览器兼容性的快速解决方法HTML5的video标签的浏览器兼容性增强方案分享浅谈各种浏览器下的CSS Hack兼容性写法CSS3中的Opacity多浏览器透明度兼容性问题火狐浏览器怎么切换到IE兼容模式?浅谈浏览器的兼容性(必看篇)
- 分享CSS3制作卡片式图片的方法CSS3实现圆角、阴影、透明效果并兼容各大浏览器css3圆角边框和边框阴影示例css3圆角样式分享自定义按钮样式让IE6、IE7、IE8支持CSS3的圆角、阴影样式CSS3的Border-radius轻松制作圆角CSS3实现DIV圆角效果完整代码 CSS制作箭头图标代码(圆,三角形,椭圆) HTML5 Canvas中绘制椭圆的4种方法html5 canvas里绘制椭圆并保持线条粗细均匀的技巧在html5的Canvas上绘制椭圆的几种方法总结
- CSS3制作缩略图的详细过程IE7下生成高质量CSS缩略图CSS3制作圆角图片和椭圆形图片HTML5实践-图片设置成灰度图Dreamweaver中实现双背景图片导航菜单的代码网页设计中对于图片格式与设计关系的详解用ASP.NET实现下载远程图片保存到本地的方法 保存抓取远程图片的方法巧用CSS3 border实现图片遮罩效果代码CSS图片垂直居中实现方法详解 用CSS实现的图片透明度链接效果代码 实测图片的HTTP请求
- 浅谈CSS浮动的那点事儿深入理解css布局之定位与浮动清除css浮动的三种方法小结CSS使用float属性设置浮动元素的实例教程CSS浮动所差生的内容溢出问题及清除浮动的方法小结CSS3定位和浮动详解浅谈CSS浮动的特性
- css布局模型全面了解解析CSS的box model盒模型及其内的子元素布局控制CSS3弹性盒模型flex box快速入门心得(必看篇)CSS弹性盒模型flex在布局中的应用详解几个CSS3的flex弹性盒模型布局的简单例子演示CSS网页布局的核心内容:CSS盒模型掌握盒模型轻松DIV CSS网页布局
- 浅谈css中的clip裁剪用法CSS中的clip-path区域裁剪属性使用教程CSS裁剪属性clip使用的实例教程
- css优先级计算方法(推荐)CSS优先级计算的规则详解CSS中的选择器优先级顺序详解CSS中的选择器优先级及样式层叠问题解决CSS z-index 层级关系优先级的概念CSS优先级的两种理解方式
- 浅谈css margin重叠CSS 之margin知识点(必看)css布局之负margin妙用及其他实现CSS的margin属性在页面布局中的使用攻略细说CSS中margin属性的使用 深入解析CSS中margin属性的使用CSS中使用负margin值来调整居中位置CSS属性探秘系列(六):margin解决margin 外边距合并问题