这几个CSS概念,你了解吗?
【这几个CSS概念,你了解吗?】
本文插图
本文转载自微信公众号「前端那些趣事」 , 作者树酱君 。 转载本文请联系前端那些趣事公众号 。
聊起css , 印象最深刻的就是刚毕业那会刚开始从事前端开发岗位工作的时候 , 身为一名 cut picture boy (切图仔) , 在页面布局及还原设计图中广泛使用css来开发页面 , 我记得刚开始接触最多的就是Bootstrap(用于开发响应式布局、移动设备优先的 WEB) 。 然而随着前端突飞猛进的编进 , 诸如element , ant design等优秀的ui库出现 , 在对比中感到审美疲劳 。 言归正传 , css近年来了也催生了蛮多新的解决方案 , 比如 CSS Modules、styled-components(css in js )、Functional CSS、CSS 原子类、CSS沙盒等等
CSS Module 顾名思义就是 CSS 模块化 , 为什么需要模块化?我们知道随着基于vue、react开发SPA的web应用 , 本质上是由多组件搭建而成 , 就好比用积木来搭房子 , 如果这个时候两个组件的样式类名重复了 , 那岂不是就冲突了?为了解决冲突就需要进行模块化区分 , 没有了命名冲突 , 更好地让组件间沙箱化 , 而CSS Module就是css模块化的实现方式之一
CSS Module 在打包的时候会将类名转换成带有hash值的新类名 , 根据命名规矩 , 从而杜绝css类名冲突的问题 。
啊呆同学:CSS Module是不是就是Vue: scoped 样式的实现方式呢?
答:不是的 , CSS Scope是通过限制作用域来实现 , 样式在局部生效 , 而不是真正意义上的css Module
我们知道 , 当一个style标签拥有scoped属性时候 , 它的css样式只能用于当前的Vue组件 , 它的实现原理是通过PostCSS来实现 , 通过给相对应的dom新增一个属性 , 同时给css选择器新增一个对应的属性 , 来对应这个唯一的dom , 如下所示
本文插图
而css module 是怎么样实现的呢 , 以vue为例子 , 如何使用CSS module
- webpack 直接 引入 vue-loader 使用文档??[1]
- vue-cli3内置 , 可以直接开箱即用 ,只需要在style标签标记module , 就可以在组件内使用CSS Modules了 , 更多操作看文档使用文档[2]
下面我们看看CSS Module在vue项目中的编译效果
本文插图
我们可以看到 , CSS Modules在最终构建页面时会自动重命名class , 用vue官方描述就是 , 这个 module 特性指引 Vue Loader 作为名为 $style 的计算属性 , 向组件注入 CSS Modules 局部对象 。 然后你就可以在模板中通过一个动态类绑定来使用它了
- 太阳系|825亿公里外!如果外星人飞船来到太阳系,这里最有可能发现它
- |“撒哈拉之眼”是亚特兰蒂斯遗迹?这些细节之处太相似了
- 三星|流畅用三年,两千价位机型,为什么说这款最值得买?
- 3g|这6个多条件函数都不掌握,还敢称Excel达人?
- 英特尔|这也太好看了吧!HAKII ICE真无线蓝牙耳机,让人享受的美感
- 行星|为什么NASA要重返月球?答案会是这样的?
- 完美日记|互联网大厂又开始卷了,这次是NFT
- 高通骁龙|全部配备骁龙778G与5000毫安电池,这三款手机高度‘套娃’
- 索尼Xperia|刚预售就直降5200元,索尼这波操作太秀了,网友懵了
- 阿瑟·克拉克|宇宙中有哪些神奇天体!