CSS in JS (JSS)|环球观速讯
简单来说,一句话概括CSS in JS (JSS),就是"行内样式"(inline style)和"行内脚本"(inline script)。
(相关资料图)
因为,自从React出现以后,基于组件化的要求,强制把HTML、CSS、JavaScript捆绑在一起,在同一个文件里面,封装了结构、样式、以及逻辑。这虽然违背html发明初期的"关注点分离"的原则,但更有利于组件之间的隔离。而每个组件包含了所有需要用到的代码,不必依赖外部环境,组件之间没有耦合。所以,随着 React 的走红和组件模式深入人心,“关注点分离”原则越发淡出人们的视野,而React所带来的"关注点混合"的原则逐渐成为主流。[1]
React 对 CSS 封装非常简单,就是沿用了 DOM 的 style 属性对象。CSS-in-JS是一种技术(technique),而不是一个具体的库实现(library)。简单来说CSS-in-JS就是将应用的CSS样式写在JavaScript文件里面,而不是独立为一些.css,.scss或者less之类的文件,这样你就可以在CSS中使用一些属于JS的诸如模块声明,变量定义,函数调用和条件判断等语言特性来提供灵活的可扩展的样式定义。值得一提的是,虽然CSS-in-JS不是一种很新的技术,可是它在国内普及度好像并不是很高,它当初的出现是因为一些component-based的Web框架(例如React,Vue和Angular)的逐渐流行,使得开发者也想将组件的CSS样式也一块封装到组件中去以解决原生CSS写法的一系列问题。还有就是CSS-in-JS在React社区的热度是最高的,这是因为React本身不会管用户怎么去为组件定义样式的问题,而Vue和Angular都有属于框架自己的一套定义样式的方案。[2]
JSS 的常见实现由于React 对 CSS 的封装非常弱,导致出现了一系列的第三方库,用来加强 React 的 CSS 操作。它们统称为 CSS in JS,意思就是使用 JS 语言写 CSS。根据不完全统计,各种 CSS in JS 的库至少有47种。老实说,现在也看不出来,哪一个库会变成主流。[1]
1. Styled-components缺点:
必须使用Styled-components预定义的语法糖,如styled.div("...")语法糖对css的封装居然使用的是string,而使用string也就意味着我们将会失去一切可能的对象化操作css的机会。这与差不多10年前 AngularJS 1.x时代对 html 的处理方法如出一辙,不得不说这种方式似乎是在开历史的倒车。不过,Styled-components 应该是CSS-in-JS最热门的一个库了,到目前为止github的star数已经超过了30k了。通过styled-components,你可以使用ES6的标签模板字符串语法(Tagged Templates)为需要styled的Component定义一系列CSS属性,当该组件的JS代码被解析执行的时候,styled-components会动态生成一个CSS选择器,并把对应的CSS样式通过style标签的形式插入到head标签里面。动态生成的CSS选择器会有一小段哈希值来保证全局唯一性来避免样式发生冲突。[2]
它既具备了 css-in-js 的模块化与参数化优点,又完全使用CSS的书写习惯,不会引起额外的学习成本[3]。
Styled-components官网。
2. CSS moduleimport style from "./index.css"需要额外配置,ts环境需要配置*.d.ts的类型声明文件
declare module "*.css" { const css: { [key: string]: string //约定:导出key所在的对象,原始的类名和内容都会和转化为这个对象 }; export default css;}
JSS 的好处p.s. 接下来内容均转自 知乎/进击的大葱/CSS in JS的好与坏。
1. 局部样式 - Scoping StylesCSS有一个被大家诟病的问题就是没有本地作用域,所有声明的样式都是全局的(global styles)。而CSS-in-JS会提供自动局部CSS作用域的功能,你为组件定义的样式会被限制在这个组件,而不会对其他组件的样式产生影响。[2]
2. 避免无用的CSS样式堆积进行过大型Web项目开发的同学应该都有经历过这个情景:在开发新的功能或者进行代码重构的时候,由于HTML代码和CSS样式之间没有显式的一一对应关系,我们很难辨认出项目中哪些CSS样式代码是有用的哪些是无用的,这就导致了我们不敢轻易删除代码中可能是无用的样式。这样随着时间的推移,项目中的CSS样式只会增加而不会减少(append-only stylesheets)。
而因为CSS-in-JS会把样式和组件绑定在一起,当这个组件要被删除掉的时候,直接把这些代码删除掉就好了,不用担心删掉的样式代码会对项目的其他组件样式产生影响。而且由于CSS是写在JavaScript里面的,我们还可以利用JS显式的变量定义,模块引用等语言特性来追踪样式的使用情况,这大大方便了我们对样式代码的更改或者重构。[2]
3 Critical CSS放在head标签内的CSS当然是越少越好,因为太多的内容会加大html的体积,所以我们一般把用户需要在首屏看到的(above the fold)页面要用到的最少CSS提取为Critical CSS。
CSS-in-JS通过增加一点加载的JS体积就可以避免另外发一次请求来获取其它的CSS文件。而且一些CSS-in-JS的实现(例如styled-components)对Critical CSS是自动支持的。[2]
4. 基于状态的样式定义CSS-in-JS可以根据组件的状态动态地生成样式。[2]
5. 封装得更好的组件库如果CSS是写在JS里面的,项目想要使用封装的组件库只需要进行简单的npm install就可以了,非常方便。[2]
JSS 的坏处p.s. 接下来内容均转自 知乎/进击的大葱/CSS in JS的好与坏。
1. 陡峭的学习曲线首先CSS-in-JS是针对component-based的框架的,这就意味着要学习CSS-in-JS你必须得学习:component-based框架(例如React),JavaScript和CSS这三样技能。其次,即使你已经会用React,JavaScript和CSS来构建SPA应用,你还要学习某个CSS-in-JS实现(例如styled-components),以及学习一种全新的基于组件定义样式的思考问题方式。[2]
2. 运行时消耗由于大多数的CSS-in-JS的库都是在动态生成CSS的, 这就意味着会有一定的性能代价[2]
3. 代码可读性差大多数CSS-in-JS实现会通过生成唯一的CSS选择器来达到CSS局部作用域的效果。这些自动生成的选择器会大大降低代码的可读性,给开发人员debug造成一定的影响。[2]
4. 没有统一的业界标准CSS-in-JS只是一种技术思路而没有一个社区统一遵循的标准和规范,所以不同实现的语法和功能可能有很大的差异。[2]
总结CSS-in-JS有好处也有坏处,要不要使用完全取决于同学们自己的项目需求。例如在下面几种情况下你就不需要它:
前端开发的初学者: 由于CSS-in-JS的学习坡度很陡,刚开始学习Web开发的同学没必要学习,可能会有挫败感。功能简单的静态页面:逻辑交互不复杂的网站没有必要使用CSS-in-JS。注重样式可读性以及调试体验: CSS-in-JS动态生成的选择器很影响代码的可读性,可能会降低你的调试效率。在我们的课程中,我们CSS-in-JS和普通的css我们都会使用,所以请同学们放心,进过本课程的学习,同学们基本上能掌握如何使用不同的方式来定义React的样式了。
参考文献[1] 阮一峰的网络日志/CSS in JS 简介[2] 知乎/进击的大葱/CSS in JS的好与坏[3] Styled Components: Enforcing Best Practices In Component-Based Systems[3] JSS[4] wikipedia
标签:
-
2022-02-07 14:57:45
奇迹!绝杀!女足亚洲杯逆转夺冠!<
刚刚,中国女足上演逆转绝杀奇迹!她们在亚洲杯决赛中3:2力克韩国队,时隔16年再夺亚洲杯冠军!
-
2022-02-07 14:57:45
中国政府与阿根廷共和国政府签署共建“一带一路”谅解备忘录<
新华社北京2月6日电(记者安蓓)国家发展改革委6日称,国家发展改革委主任何立峰与阿根廷外交、国际贸易和宗教事
-
2022-02-07 14:57:43
中华人民共和国和阿根廷共和国关于深化中阿全面战略伙伴关系的联合声明(全文)<
新华社北京2月6日电中华人民共和国和阿根廷共和国关于深化中阿全面战略伙伴关系的联合声明一、应中方邀请,阿根廷
-
2022-02-07 14:57:40
春节假期国内旅游出游2.51亿人次<
春节遇冬奥,旅游年味浓。根据文化和旅游部数据中心测算,2022年春节假期7天,全国国内旅游出游2 51亿人次,同比
-
2022-02-07 14:57:40
中吉签署关于经典著作互译出版的备忘录 开启两国人文交流互鉴新阶段<
新华社北京2月6日电(记者史竞男)国家主席习近平6日会见来华出席北京2022年冬奥会开幕式的吉尔吉斯斯坦总统扎帕
-
2023-03-27 17:34:48
CSS in JS (JSS)|环球观速讯
简单来说,一句话概括CSSinJS(JSS),就是 行内样式 (inlinestyle)和 行内脚本 (inlinescript)。
-
2023-03-27 16:10:19
【天天速看料】26个字母按相同音素归类_按音素给26个字母分类
1、26个英文字母及发音音标如下:Aa[ei]Bb[bi:]Cc[si:]Dd[di:]Ee
-
2023-03-27 15:17:42
马云来云谷学校讨论未来教育:要用人工智能去解决问题而不是被控制_环球新消息
马云说,ChatGPT这一类技术已经对教育带来挑战,但是ChatGPT这一类技术只是AI时代的开始。我们要用人工智能(161631)去解决问题,而不是被人工智能
-
2023-03-27 13:44:53
记者观察:京津冀一体化要做大民营经济 突破物理空间对人才束缚|全球热推荐
中国的民营企业从2012年的1000多万家增长到2022年的4700多万家,在10年当中增长了两倍多。在这当中长三角地区民营经济的占比非常之大,在中国
-
2023-03-27 12:03:09
中金:维持周生生中性评级 目标价10港元 环球关注
中金发布研究报告称,维持周生生(00116)“中性”评级,考虑到黄金产品占比提升带来毛利率结构性下降,下调2023年EPS预测18%至1 37港元,引入2024
-
2023-03-27 10:49:26
左脑右脑的功能分别是_左脑偏头痛是为什么 天天微动态
1、如果患者左脑有偏头痛,比如左脑有脉冲样的抽痛,这种情况需要考虑偏头痛的可能。2、偏头痛一般是局部血管扩张或痉挛引起的
-
2023-03-27 09:46:28
焦点播报:五一假期出境游进入预订高峰 欧洲游热度走高
随着第二批出境团队旅游业务的试点恢复,目前国内出境团队游目的地已增加到60个。记者近日了解到,目前“五一”假期出境游产品
-
2023-03-27 08:36:19
环球动态:深圳华强(000062)3月24日主力资金净买入3583.57万元
截至2023年3月24日收盘,深圳华强(000062)报收于14 3元,上涨6 4%,换手率2 09%,成交量21 81万手,成交额3 05亿元。
-
2023-03-27 06:16:59
教坛新秀展风采 不负韶华向未来|最新资讯
许昌实验中学教坛新秀展风采不负韶华向未来本报讯(记者吕正子通讯员王利兵)为进一步加强青年教师队伍建设,打造一支教学基本功扎实、专业素
-
2023-03-27 01:09:27
当前焦点!more than one +单数名词_more than one单复数
今天小编肥嘟来为大家解答以上的问题。morethanone+单数名词,morethanone单复数相信很多小伙伴还不知道,现在让我们一起来看看吧!1、
-
2023-03-26 22:02:37
钱在键盘上怎么打出来_钱的符号在键盘上怎么打_环球消息
1、+4(不是小键盘的)就可以打出¥或者$。2、编程里$对应的ASCII码是十进制的36。本文到此分享完毕,希望对你有
-
2023-03-26 19:10:42
环球快看点丨索尼cr392主板型号_索尼cr392
1、可以换cpu。2、∴。3、!。以上就是【索尼cr392主板型号,索尼cr392】相关内容。
-
2023-03-26 17:06:32
全球今头条!2022年法考主观题开考,多名江苏考生认为题目难
2022年法考主观题开考,多名江苏考生认为题目难
-
2023-03-26 14:57:57
做自然的朋友,罗湖企业连续15年为地球献出一小时
3月25日,京基集团及旗下产业积极响应由WWF(世界自然基金会)发起的全球最大的应对气候变化的公益行动——“地球一小时”。在当天晚上8点3...
-
2023-03-26 12:33:29
青年“V”志愿服务站亮相
3月24日,北辰区团委推出的青年“V”志愿服务站在宜兴埠镇未来新天地广场亮相。青年“V”志愿服务站是北辰团区委打造的青年志愿服务新型阵...
-
2023-03-26 12:33:13
亲爱的你过得怎么样是什么歌
亲爱的你过得怎么样这首歌是由著名歌手张惠妹的《我最亲爱的》。原歌词是“我最亲爱的,你过的怎么样,没我的日子,你别来无恙”。2、完整...
-
2023-03-26 10:04:00
前NBA球员:如果不是因为湖人太垃圾,里夫斯都上不了场_快资讯
前NBA球员:如果不是因为湖人太垃圾,里夫斯都上不了场,湖人,里夫斯,奥斯汀,拉沙德,美国篮球,nba球员,布莱恩特·里维斯
-
2023-03-26 07:44:43
空调除湿最好的方法?-焦点热文
如果你家里的空调具有除湿功能,那就直接开启就是。空调厂家一般都设置了除湿的温度,比室温低2度。2 如果你家里的空调具有除湿功能,但是需要自
-
2023-03-26 03:05:57
一流企业做标准二流企业做市场_一流企业做标准_当前快播
1、一流企业:有自己的技术专利、雄厚的资本,生产的产品技术参数、产品质量要求将成为其他企业的的模版,成为其他企业生产的技
-
2023-03-25 23:17:30
耳顺之年是指什么年龄 当前消息
1、“耳顺”之年是指60岁。2、《论语·为政》中说:“六十而耳顺。”何晏集解引郑玄曰:“耳闻其言,而知其微旨。”后即以“耳顺”或“花甲”...
-
2023-03-25 22:22:51
每日视讯:荒野大镖客2马匹排行位置(荒野大镖客2马匹排行)
1、荒野大镖客2中马匹的排名是狐步>阿拉伯(玫瑰)>阿拉伯(黑色)>阿拉伯(白色)>纯血。2、在荒野大镖客2中玩家经常会骑马打猎,图中会
-
2023-03-25 19:39:36
焦点要闻:拉克西里是潜行的吗_拉克西里和断牙哪个好
1、现在宠物伤害都一样的了现在同一种类型的宠物伤害攻速技能等都是一样的,天赋根据个人加点不同而不同。2、断牙和拉克西里在
-
2023-03-25 17:02:34
花城文学院成立 助力广东文化高质量发展-时讯
(记者程景伟)花城文学院25日在广州越秀公园举行揭牌及签约仪式,宣告正式成立。花城文学院选址在广州越秀公园的“陌上花开”文化空间。越秀...
-
2023-03-25 15:31:44
世界热资讯!刘真参加舞蹈节目有哪些
1、刘真参加舞蹈节目有舞林大会、奇舞飞扬、越跳越美丽。2、刘真(1975年6月9日-2020年3月22日),女,台湾政治大学俄文系毕业。台湾女舞蹈家
-
2023-03-25 14:53:26
碱性磷酸酶偏高的原因孕妇_碱性磷酸酶偏高的原因 全球快资讯
1、人体血清碱性磷酸酶大部分来自肝脏和骨骼,少部分来自肾脏、小肠和胎盘。2、当儿童骨骼生长发育时,碱性磷酸酶可在生理上增
-
2023-03-25 12:14:24
【环球新要闻】九号当铺小说_当铺小说
1、《福运逆天:捡个太子来种田》。以上就是【九号当铺小说,当铺小说】相关内容。
-
2023-03-25 10:20:54
世界短讯!龙精虎猛是什么意思_龙精虎猛
1、第四名是生肖马2、生肖属马人,别人是越老越“黄土埋脖子”,他们却是越老越精神,先天精力旺盛,热情豪爽,以至于属马人没
-
2023-03-25 08:10:27
【全球热闻】丰富的反义词是什么爱问知识人
丰富的反义词是:贫乏、单调、缺乏、简单、匮乏。贫乏:贫穷,穷困、枯竭。单调:单一,重复而缺少变化。缺乏:不足,缺少。匮乏:缺乏、贫乏
-
2023-03-25 08:10:31
山西省天镇县发布大雾黄色预警_全球要闻
山西省天镇县发布大雾黄色预警
-
2023-03-25 05:23:56
【世界热闻】中油工程(600339):3月24日北向资金增持75.65万股
3月24日北向资金增持75 65万股中油工程。近5个交易日中,获北向资金增持的有3天,累计净增持140 64万股。截至目前,北向资金持有中油工程536 8
Copyright © 2015-2022 全球信息网版权所有 备案号:豫ICP备20009784号-11 联系邮箱:85 18 07 48 3@qq.com