首页 > 为何推荐使用 class 而不用 id 来定义样式?

为何推荐使用 class 而不用 id 来定义样式?

用 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号大院这个地方,可能又来了一个某某,这个时候,我们就没有办法定位到最终的那一个人了,而只能同时定位到这两个个,那么这个时候,我们就需要使用到更多的归类,比如:

理解我的意思没有? class 是按照 同类型 来归类HTML的各种元素的,要把某些元素归为一类,一般会考虑到下面这些因素:

那我们何时使用 id 呢?当你需要快速的定位到某一个元素时,我们就可以使用ID了,比如,在前面那个关于人的示例中,我们可以直接使用身份证号来定位到最终的那个人。

使用 class 可以让我们做到最大的代码复用,但是使用ID却可以让我们更加快速的定位元素,这两者不是一个排斥的关系,而是一个互补的关系,这需要一个长时间的过程才能有更深的体会的。

另外,关于类的使用,你可以好好的研究一下: http://semantic-ui.com/,类使用的极品样例。

【热门文章】
【热门文章】