在 Smashing 上,Adebiyi Adedotun Lukman 涵盖了所有这些样式方法。 它是在 Next.js 的背景下,这在某种程度上很重要,因为 Next.js 有一些特定的方式可以让你使用这些工具,它是 React 并且因此是一个基于组件的架构。 但是,所讨论的样式方法超出了 Next.js,可以广泛应用于许多网站。
以下是我对当今样式可能性整个目录的看法。
- 常规 CSS。 如果可以,请使用。没有构建工具是令人耳目一新的。它将经久耐用。我唯一真正想念的没有其他工具的是在选择器块中嵌套媒体查询。
- Sass。 Sass 已经存在很长时间了,并且仍然是一个非常流行的 CSS 预处理器。Sass 被内置到许多其他工具中,因此选择 Sass 并不总是意味着相同的事情。简单的 Sass 集成可能与
sass --watch src/style.scss dist/style.css
npm 脚本一样容易。然后,一旦你接受了你有构建过程的事实,你就可以开始连接文件、缩小文件、清除缓存以及所有这些你可能最终会以某种方式完成的步骤。 - Less & Stylus。 我很惊讶它们没有更受欢迎,因为它们一直都是 Node 并且非常适合 Node 支持的构建过程的激增。更不用说它们是不错的功能丰富的预处理器了。我并不反对两者,但 Sass 更普遍、更积极地开发,并且规范 Sass 现在可以在 Node-land 中正常工作。
- PostCSS。我并不被 PostCSS 所吸引,因为我不喜欢必须拼凑我想要的处理功能。这也具有负面影响,即在不同项目中编写 CSS 的过程不同。此外,我不喜欢预处理掉现代功能的想法,其中一些功能实际上是无法预处理的(例如,自定义属性无法预处理)。但是我确实喜欢 Autoprefixer,当我们真的需要它的时候,它是基于 PostCSS 构建的。
- CSS 模块。(基于 PostCSS)。如果您正在使用任何技术中的组件,CSS 模块使您能够将 CSS 范围限定到该组件,这是一个非常棒的想法。我喜欢这种方法,无论我在哪里都能得到它。您的模块 CSS 也可以是 Sass,因此我们可以在那里获得两全其美。
- CSS-in-JS。 事实上,这意味着“CSS-in-React”。如果您正在编写 Vue,您正在编写样式 Vue 帮助您 的方式。 相同 与 Svelte。 相同 与 Angular。React 是不固执己见的,让你可以选择 styled-components、styled-jsx、Emotion 之类的东西……有很多很多。我在 React 中有项目,我使用 Sass+CSS Modules 并且认为这很好,但很多人也喜欢 CSS-in-JS 方法。我理解。您会自动获得范围,并且可以做一些花哨的事情,例如将道具合并到样式决策中。对于设计系统来说可能很棒。
- 全部采用实用程序样式:巨大优势:CSS 文件小,样式一致且灵活。巨大缺点:您的标记中混合了无数个类,这使得阅读和重构变得很麻烦。我不被它吸引,但我理解,这些优点确实会击中一些人。
如果您想听听其他关于此范围的看法,Syntax FM 的人最近对此发表了评论s。
CSS 模块是 PostCSS 工具。它应该在 PostCSS 部分中提及。
哦,我不知道!我会把它说得更清楚。
我不明白为什么 CSS-in-JS 不被认为是倒退一步。它似乎一直等同于在 HTML 中放入
<style>
标签,但我可能错过了一些你在Component.scss 文件夹中与Component.js 文件并存时无法获得的关键好处。我一直处于重新架构/重建一套 .NET MVC 网站的整个前端(从头开始)的幸运位置。
HTML。CSS。JS。工具。所有的一切。
作为团队中唯一的专用前端开发人员,但与在前端领域不太舒适的 .NET C# 开发人员团队进行合作,我将事情保持简单以帮助开发人员体验。
对于样式……
– 明智地使用全局样式。所以我们可以有效地使用级联!;)
– CSS 变量用于关键设计令牌(颜色、字体、尺寸)。能够通过 CMS 等覆盖这些值。映射到 Sass 变量。
– Sass。混合和设计令牌变量的最小使用(关键变量映射到 CSS 变量)。
– PostCSS。主要用于处理 RTL 语言,以及支持 IE11 CSS Grid 语法。
所有这些都与 Parcel 捆绑在一起。零配置。
为了完整起见……BEM 用于 HTML 标记,以及 stylelint 用于强制执行一些格式规则。
这难道不是 PostCSS 的完美用例吗?编写普通 CSS 并通过添加一个小的
postcss.config.js
文件添加嵌套(媒体查询)。我不会因为这样做了而批评任何人,我说的是我自己。但我认为一旦我有了构建过程(因为我想要这个功能),在那一点上,我会选择 Sass,这样它与我的其他项目保持一致,并且不仅可以提供我想要的功能,还可以以相同的买入成本提供许多其他功能。
好文章。虽然我不太同意你关于 Post CSS 和更喜欢 SASS 的观点。我过去多年一直更喜欢并使用 SASS,正是出于这个原因,但后来由于几个原因转而使用 Post CSS,并且再也没有回头。SASS 的主要问题类似于 Jquery,即它有太多功能,其中相当一部分如果开发人员是初学者并且不知道自己在做什么,就会鼓励编写糟糕的 CSS 代码。Mixin、Expand 以及最糟糕的字符串插值、at-root 以及过易的嵌套规则会诱惑许多新手和懒惰的开发人员,尤其是那些预算紧张、时间紧迫的开发人员,尤其是那些主要从事 JS 开发并且喜欢命令式编程以创建你能想象的最疯狂的低性能和特定意大利面条 CSS 代码的开发人员。试着在几年后重构这种混乱,你就会明白我的意思。只要我自己小心使用它,我就从来没有陷入那些陷阱。
正如你所说,“然后,一旦你接受了你有构建过程的事实,你就可以开始……”做各种你永远不应该做的事情,仅仅因为你可以。
当然,使用普通 CSS 或 post CSS 你也可以写得很乱,但难度要大得多。正是因为添加任何疯狂功能都需要付出代价。
使用 post css 编写的代码更简洁。
它还迫使人们学习永远不会进入标准 CSS 的概念和工具,并且以后根本没有用。至少使用 post Css 你学习的技能可以在几个月/几年内使用。
并且使用 post CSS 与 postcss-preset-env 之类的东西可以让你获得所有你想要从 SASS 中获得的功能,而使用 SASS 的成本并不高。
我在听了 Rich Harris 和 Evan You 的话之后读到了这条评论,他们基本上说了同样的话。是时候学习 post-css 了。我非常想知道 Chris 对你想法的回应。
我正在一个 react 项目上工作,我遇到了一个问题,我应该使用 SCSS 还是 Styled Components?你个人更喜欢哪一个?还有一个问题,React 有可能像 useStyles 在 React 18 中不受支持一样,不再支持 Styled Components 吗?