问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎样理解css中id的唯一性以及与class的作用有什么不同,期待中,,谢谢!

发布网友 发布时间:2022-04-21 12:17

我来回答

3个回答

懂视网 时间:2022-04-21 16:38

标题党。这篇文章断断续续的修改过好几次,也没有满意,本来是想总结一下我这些零散的 CSS 知识结构,可能由于知识体系不全面,总是没能把知识点串联成一个通顺的内容。贴出来权当大家一起讨论下“前世今生”。文章后续可能会不定时更新。

CSS 作为 Web 的基础部分,极其容易上手。但是 CSS 并不算的上是一门编程语言,在语言能力上略显薄弱,往往导致整体的维护性变差。但是这并没有使得大家停止对 CSS 的探索,从命名规范,目录架构,预处理器(如 SASS),后处理器( PostCSS),模块化等等的方向上,努力把 CSS 变得更好。

关于自我历程

其实我自己并没有系统的学习过 CSS(虽然我现在也不知道如何系统的学习),看了几个视频,扫了下中文版的 API,然后就开始了切图生涯,很多的知识点也都是后来一些零散的博客中了解到的。这过程中,的的确确踩过不少的坑,有的填了,有的继续祸害着项目里其它的同学。也导致我在很长的时段时间里都是走在一个混乱无序的 CSS 书写当中。

最早遇到的大概的是命名的问题了吧,因为本身积累的词汇量就少,动不动就没单词可用了。那个时候好像也就是网上列出一大堆像 menu, siderbar之类的“命名大全”来模仿。再到后来接触到了 Bootstrap这种比较系统的框架(里面有好多可以值得借鉴的地方),而后又看到一些按类别划分文件,再配有特有的前缀的管理方式(那个时候还并不知道 SMACSS的名词),还有一些原子化,把功能和样式分离等等的。在 SASS兴起的时候其实挺兴奋的,因为终于感觉有了点编程的能力,当然了,对变量,嵌套, mixins等等的使用,很大程度上提高了编程效率。在后来同事的分享中,又了解了 BEM 的命名方式(初看很乱,了解后有一种豁然开然的感觉,细细回想起来,也就是大家约定一套共用的命名规范)。以及通过 PostCSS去实现 CSS 中一些自动处理的任务。在 React/ES6/Webpack 出现后,使得很大一部分程度上,CSS 写在 JS 中的方式也开始在特定的场合中频频出现。

以上,通通出现过我的项目中,在项目切换维护的时候,那感觉,心如刀割。并不是说上面涉及到的知识点有对错的问题,只是在一个团队中,如果没有一些统一的架构和约定,往往到项目的后期会变得越来越不稳定。这不禁又让我想起了 CSS 的学习曲线(像PHP?又来黑了),样式大家都能写,能愉快的维护,又是另一个层次了。

个人觉得 CSS 中有两个比较重要的点, 语义化和 可维护性,而最终都是为了提高开发的效率。

语义化很大一部分程度上是为了阅读需要,简易明了。建议团队内还是要尽量的保持风格一致。其它的,可以看一下 CSS语义思维的内容,这里不展开讲了。

可维护性真的是一个很虚的概念,但是涉及到了多方面的各个点。比如,该怎么保持项目的简单性,灵活性,而同时又有足够的扩展能力?又比如如何抽取模块,是以功能划分还是以样式结构?如何重用样式?如何防止样式被覆盖,避免冗余代码等等。

除了一次性的单页面这种外,一般项目类型的,都建议在开始的时候就搭好底层,统一一下整体风格与使用习惯,保持良好组织结构,命名规范,不然越往后面,可能会遇到更大的问题。

比如,对文件做一个层次划分

  • 基础框架(reset,iconfont,栅格)

  • 通用模块(原子,统一规范的模块)

  • 页面样式(继承通用模块)

  • 采用类似 BEM/SUIT等等的命名方式等等。

    现有的技术选择

    其实我们在平时应该或多或少的接触过一些 SASS, Compass, BEM, SMACSS, OOCSS的概念与设计模式。当然并没有一种解决方案是绝对的,合适当前的项目就可以了。

    BEM

    用于解决项目命名规则问题。BEM 通过已 block(块), element(元素), modifier(修饰符)的概念,使用连接符串联父级块作为前缀,来实现功能模块命名的唯一性。有兴趣的同学可以看一下 BEM的进化史。发现一句话并不太好表述清楚,想要具体了解的同学可以移步 官网。

    BEM这种唯一性以及元素间的平级展开,往往在稍微复杂一点的项目里,就会把名字命名的很长很长。目前也有很多是在 BEM的基础上衍生出来的一些方式(如 SUIT)。

    OOCSS (Object Oriented CSS)

    面向对象 CSS。是一种已面向对象的维护方式去管理组织 CSS 代码。其哲学理念是模块化,功能单一性,关注点分离。

    OOCSS 中有两个重要的原则

  • 结构和外观分离。样式尽量独立,和 DOM 无关

  • 容器和内容分离。CSS 只关注内容

  • OOCSS与 SASS结合是一个不错的选择,充分强大。

    SMACSS(Scalable and Modular Architecture for CSS)

    可扩展和模块化 CSS。把 CSS 样式划分为若干个不同类别的文件,如基础,布局,模块,主题等等。在加上一些特有前缀的组合。

    ACSS (Atomic CSS)

    原子化 CSS。遵循关注点分离原则。

    CSS 模块化

    随着 React的迅速引爆,其它关于 CSS 的另一种使用方式也在兴起。将样式在 JS 中定义。借助 require/import而解决了 CSS 中的命名空间的问题,使得单文件变得简单清晰。而通过组合,也可以实现快速的重复利用。甚至有些 CSS 可以单独与组件去绑定。

    以及其它的一些方式。上述的方式,是比较让我眼前一亮的感觉。

    未来走向

    待补充...

    扩展阅读

    热心网友 时间:2022-04-21 13:46

    请问这是一个哲学的问题吗?
    我只能对“css中id的唯一性”做一点个人的理解:就是打cs(反恐精英,一款射击游戏)的时候,输入一个比较特别的id,你的队友就不会把你误当成敌人误杀(id的唯一性)

    热心网友 时间:2022-04-21 15:04

    这是面向对象才要考虑的,上升到哲学的层面未免有点那个。
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 有声音,但显示这,音频服务未运行 win7 音频服务未运行怎么办? “因为*不会破产 所以把钱借给外国*是安全的。”这种说法对吗?为什么? 哪个有价证券的风险最高 安卓手机上有类似于格式工厂的格式转换软件吗?求推荐 手机如何下载格式工厂 包子蒸出来怎么会是死面包子?这是怎么会是?包子的面活的硬了好,还是软了好? 包子面活得软点还是硬点 发好的面包包子刚好多的面三个小时后在包包子就不行了发硬怎么办? 维思大学CSS是什么学科? 跪求搜狐视频VIP和爱奇艺VIP 搜狐影院VIP 谁有搜狐vip我想看高品格单恋我看了一定会删了的不会一直用的谢谢 我用支付宝买的搜狐视频会员,想用手机登录,可是我居然没有账号和密码,只能在电脑上看,有人知道怎么登 求搜狐VIP账号,看一下海贼王。三天就足够。不改密码,改密码死全家 张子萱拍vlog用的什么相机 东风雪铁龙牌DC7163TYAA的发动机在哪里 东风雪铁龙的车车牌号是鲁n·c983f的车在哪里 东风雪铁龙的正时皮带怎么装 东风雪铁龙萨拉毕加索2.0正时皮带怎么安装? 请问怎么把750MB的文件压缩到700MB以下啊 用WINRAR这个软件可以吗?怎么操作啊 如何将一个762MB的文件压缩成700Mb 如何将电影压缩成700MB左右(AVI) 860MB的文件怎样压缩到700MB以下? 怎样将1G文件压缩到700M以下 怎么把2.9G的文件压缩至700M左右呢? 如何将一个超过700MB的文件用WinRar压缩成700MB以内呢? 描写苹果的作文 有白癜风的患者可以吃鸡肉和牛羊肉吗? 白癜风能不能吃鸡肉? 小学三年级写苹果的作文怎么写 如何把750兆的AVI文件压缩为700兆以下? 白癜风患者能吃鸡肉和鸭肉吗能喝白酒吗 使用7-Zip压缩,该怎么设置才能达到最大压缩,就是把文件容量压缩到最小 怎么把系统备份缩小到700m?? 描写苹果的作文270字 鸡肉和香菇、核桃、山药一起煮汤,白殿风患者可以吃? 怎样把一个1.3G的ISO文件压缩成700M以下的容量 白癜风有什么忌口的? 白癜风患者吃烧烤应注意什么