使用 JSS 为您的前端增添工程风格

2025-06-08

使用 JSS 为您的前端增添工程风格

在众多选项中选择适合你应用风格的选项本身可能就是一个项目。🤯

我已经尝试了几种前端样式解决方案和方法,例如:

使用它们的项目要么是用 Vanilla JS 编写的,要么是用一些现代 JavaScript 框架编写的,比如 AngularJS、Angular 4、React ⚛️ 甚至 React Native。

毕竟,我还有一个非常钟爱的造型选项世界,上面没有提到。我随时都会在新项目中投票支持它(抱歉,克罗地亚很快就要举行地方选举了🗳️)。

最后,说得更贴切一点,我喜欢像编写应用程序的其他部分一样,用 JavaScript 来编写样式。这意味着我会使用相同的编程语言和语法来处理逻辑和样式。这很酷,但这并不是我这样做的主要动机。是因为我发现 JavaScript 比 CSS 更强大💪,也更实用。

JavaScript 为应用程序样式设计过程增添了更多工程特色。这可以通过CSS-in-JS解决方案(或更短的 JSS)实现。

我第一次使用 JSS 是在使用 Material UI 构建的项目上。在他们的文档中,你可以找到为什么他们在放弃 Less 和自定义内联样式方案后选择了这种方法。实际上,他们在选择样式方案时做了一些非常有趣的比较📊

我已经提到了工程风格,所以让我们展示一些我所想到的例子。

变量

您可以简单地将任何样式保存在变量中。

const COLOR_PRIMARY = "black";
const COLOR_SECONDARY = "#f0f0f0";
Enter fullscreen mode Exit fullscreen mode

还将它们分组到 JS 对象中。

baseTitle: {
    fontSize: 24,
    fontWeight: 600,
    color: COLOR_PRIMARY
}
Enter fullscreen mode Exit fullscreen mode

你现在可能会想:没什么特别的,用扩展 CSS 也能做到。耐心点……😃

扩展、默认属性和覆盖

假设我们想扩展这个基本标题以供其他用途。

sectionTitle:  {
  ...baseTitle,
  //override font weight from base title
  fontWeight: 800, 
  //extend base title
  fontFamily: '"Roboto", "Helvetica", "Arial", sans-serif',
  fontStyle: 'italic',
}
Enter fullscreen mode Exit fullscreen mode

请注意,您不需要学习任何新语法,您实际上编写的是 CSS,但只需使用camelCase: kebab-case➡️font-size即可fontSize。并在其之上拥有 JS 的力量。

主题

然后,您还可以将所有可重复使用的样式保存在一个地方并构建整个主题 - 这只是 JS 对象。

const theme = {
  backgroundColor: COLOR_PRIMARY,
  color: COLOR_SECONDARY,
  ...
};
Enter fullscreen mode Exit fullscreen mode

该主题可以被视为一个配置文件,但用于样式💅。使用Material UI 主题来获取灵感。从断点、排版到配色方案和间距。

将 JSS 与 React 集成

有一个JSS Core库可以在任何 Javascript 应用程序中使用,但 React 开发人员对React-JSS更感兴趣

动态值

关注动态值

JSS 使用 Hooks API,您可以在其中使用类似这样的钩子createUseStyles

我从 JSS 文档中借用了一个很酷的例子来说明如何开始。我会将样式与组件分开,因为避免在一个文件中造成混乱始终是一个好习惯。此外,它还让人想起了 CSS 模块方法,即为每个组件提供单独的、独立的样式。

useButtonStyles.js

import { createUseStyles } from 'react-jss'

export const useButtonStyles = createUseStyles({
  myButton: {
    padding: props => props.spacing
  },
  myLabel: props => ({
    display: 'block',
    color: props.labelColor,
    fontWeight: props.fontWeight,
    fontStyle: props.fontStyle
  })
})
Enter fullscreen mode Exit fullscreen mode

请注意,您可以多么优雅地根据从组件传递的 props 值来更改样式。

index.js

import React from 'react'
import { useButtonStyles } from "./useButtonStyles";

const Button = ({children, ...props}) => {
  const classes = useButtonStyles(props)
  return (
    <button className={classes.myButton}>
      <span className={classes.myLabel}>{children}</span>
    </button>
  )
}

Button.defaultProps = {
  spacing: 10,
  fontWeight: 'bold',
  labelColor: 'red'
}

const App = () => <Button fontStyle="italic">Submit</Button>
Enter fullscreen mode Exit fullscreen mode

请随意使用CodeSandbox 上的示例

主题

除了用于创建样式的钩子之外,它还useThemeThemeProvider包装器结合使用。它还提供了一个主题解决方案,使您可以更轻松地开始使用可重用样式编写主题应用程序,并快速启动新项目。

你会尝试一下吗?

❓ 你有什么想法?
❓ 你更喜欢哪种样式方案?
❓ 你如何处理主题和可复用样式?

鏂囩珷鏉yu簮锛�https://dev.to/bornfightcompany/style-your-frontend-with-a-engineering-flavour-by-using-jss-4h06
PREV
你不需要它 GenAI LIVE!| 2025 年 6 月 4 日
NEXT
从初级软件开发人员到中级软件开发人员的历程