用 id 会导致什么问题吗?
因为用id的地方都可以用class,而用class的地方却不能用id
为什么css选择器钩子大多数用class?这个问题可仅从css的方面出发来回答:
1、相对于class选择器,id选择器的权重实在太重了(100),这在一些项目中会造成灾难性的样式污染,以及权重陷阱。
2、id在文档内必须是唯一的,而样式很多具有复用性。当然,使用id也意味着你的css选择器完全不需要嵌套:
css
body #a{color:red} // 不必要的写法,除了额外增加选择器权重没有任何必要。 #a{color:red} // 这样即可
至于为什么大多数js使用id作为钩子,主要因为js通过id查询dom的速度是最快的。
id是不是一定会和js挂钩,这个是未必的,以下情况可能必须使用class:
循环插入若干组件,不同组件内绑定dom相同Function时。
从性能方面来看看这篇文章 Don’t use IDs in CSS selectors?
刚才我看到支持最多的答案,我只想说这是理论上。
之所以建议你是用class而不是id,主要可能是因为公司的分工和配合的问题
可能大公司的分工比较细,可以将写html,css的人和写js代码的人进行分工合作,这样就不建议写css的人使用id
因为一般id是写js代码的人进行前端事件绑定使用的,如果写css的人将id改掉的时候,那么可能直接影响到了前端的交互效果。
#id
只能在页面中出现一次;CSS 的 .class
可以重复使用。
现在可以用 CSS .js-class-name
不声明任何 CSS 样式,只做 JavaScript 操作。
从语义角度出发,class是类,对于样式而言,也就是同一类的样式。可以当做钩子挂在多处。
id则是区分,有唯一性,这个可以做样式差异化处理(实际上,还是建议用class来替代)。
而行业内部的实践,默认用id来做为js的挂钩。
所以,class承载了,并且也足够承载样式所需的一切,而id则只是用来做js挂钩了。
id是唯一的,样式表主要解决通用性的问题,定一个class可以在很多地方使用
(背景:最近在用 aspx 做网页,由于是分工协作,做前端,id 的话主要是后台用,不能随便改。所以主要用 class。)
就分工这个意义上来说,用 class 扩展性更好一些,id 是唯一的,但就算别人已经加过 class,你还是可以继续加。并且样式还可以通过 class 来分解和利用已有的样式。
而且,你看,要是你的样式准备重复利用的话,你会用 id 么?Bootstrap 我也没看到用 id 的呢~~
总结下来,用 class 的好处在于:
(1)利于分工
(2)利于样式分解
(3)利于扩展
(4)利用以前项目的样式
嗯,就是这样的,如果主要做的是前端这块(样式),那还是用 class 吧。
这个问题,很久前就由类似的提问, 可能很多人遗忘了。
为什么 推荐优先 class 来写样式呢。
除了 楼上的一些的答案,还有以下一些原因。
一、
id 选择器是唯一的。
class 是可以重复的
二、
基于id 写的样式权重值很高。
important > inline > id > class > tag (具体可以 google 搜索一下 css样式权重)
在一些复杂的页面构建的时候,不推荐使用id来写样式,
因为有的时候,根据需要,去覆盖通用样式。
这个时候如果你是用id 写的通用样式的权重就非常高,覆盖成本很高。
三、
其实class的诞生就是为了样式服务。
id 更倾向于方便为脚本服务。
id
在一个页面中id名称是唯一
的,很明显你就不能够在同一页面重用这个样式。class
可重复使用。
谁推荐你使用 class
而不用 id
的?
这两种的存在都有着它们自己的特殊用途,专业术语可以不用讲,就取一个最真实的例子:
湖南省 长沙市 开福区 幸福村 128号大院 某某
上面这一段话,我们可以把 湖南省
、长沙市
、开福区
、128号大院
、某某
都看作是类,因为,按省级地区归类,我们可以分为湖南省的人,湖北省的人,但是我们这里却把某一个人归为了湖南省,长沙市、开福区等等也都是一样的,甚至他的姓名某某
也有可能有很多个,但是我们把上面这六个 class
放在一起的时候,就可以定位到那一个很确定的唯一的人。
这个时候我们就可以为这个人写一些样式类了,但是,也有一种情况可能出现,那就是在湖南省 长沙市 开福区 幸福村 128号大院这个地方,可能又来了一个某某,这个时候,我们就没有办法定位到最终的那一个人了,而只能同时定位到这两个个,那么这个时候,我们就需要使用到更多的归类,比如:
- 湖南省 长沙市 开福区 幸福村 128号大院 来自怀化的 某某
- 湖南省 长沙市 开福区 幸福村 128号大院 长沙本地的 某某
理解我的意思没有? class
是按照 同类型 来归类HTML的各种元素的,要把某些元素归为一类,一般会考虑到下面这些因素:
- 它们具有同样的样式,比如不管他们的标签是什么,h1 或者是 div,但是字体大小都是 16px;
- 它们是一种具有同样意义的东西,比如我们做网站,一般首页的 LOGO 会使用 h1,但是内页的 Logo 却不使用 h1(因为我们需要让真正的内容的标题使用 h1),但是不管是 h1 还是 div ,他们都可以使用
class="logo"
来定义他; -
它们是一种具有同样HTML结构的一种元素集合,比如
<div class="entry"> <h2>标题</h2> <div>这是内容</div> </div>
那我们何时使用 id
呢?当你需要快速的定位到某一个元素时,我们就可以使用ID了,比如,在前面那个关于人的示例中,我们可以直接使用身份证号来定位到最终的那个人。
使用 class
可以让我们做到最大的代码复用,但是使用ID却可以让我们更加快速的定位元素,这两者不是一个排斥的关系,而是一个互补的关系,这需要一个长时间的过程才能有更深的体会的。
另外,关于类的使用,你可以好好的研究一下: http://semantic-ui.com/,类使用的极品样例。