首页 > 编程语言 >如何设计React应用程序的样式——比较不同的选项

如何设计React应用程序的样式——比较不同的选项

时间:2023-06-06 12:46:34浏览次数:35  
标签:样式 应用程序 React color styled 组件 CSS

样式在创建具有视觉吸引力和用户友好的 Web 应用程序方面起着至关重要的作用。对于 React 应用程序,可以通过多种方式来设置组件和 UI 元素的样式。

在本文中,我们将探讨几个流行的选项,包括纯 CSS、CSS 模块、CSS 预处理器、Tailwind CSS、CSS-in-JS 库(如 Styled Components)以及预构建组件库(如 Chakra UI、Material-UI 和 Bootstrap) .

我们将深入研究每个选项的主要特征、优点和缺点,以帮助您为 React 项目选择正确的样式方法。

(更多优质教程:java567.com,搜索"react")

目录

您将学习如何使用以下方法来设计您的 React 应用程序的样式:

  • 纯CSS

  • CSS 模块

  • CSS 预处理器

  • 顺风 CSS

  • CSS-in-JS

  • 组件库

  • 结论

如何使用纯 CSS 设计你的 React 应用程序的样式

纯 CSS 涉及使用标准 CSS 语法编写样式表并将它们链接到您的 React 组件。

这种方法简单且得到广泛支持,使其成为小型项目的绝佳选择。但随着应用程序的增长,管理和扩展可能变得具有挑战性。

优点:

  • 熟悉:具有 CSS 专业知识的开发人员可以快速适应这种方法。

  • 浏览器支持:所有现代浏览器都支持纯 CSS。

  • 轻量级: CSS 文件可以被浏览器缓存,从而加快页面加载时间。

缺点:

  • 全局范围: CSS 中定义的样式默认是全局的,这会导致命名冲突和样式泄漏。

  • 有限的可重用性:跨组件重用样式需要手动维护类名和选择器。

例子:

 import React from 'react';
 import './MyComponent.css';
 ​
 const MyComponent = () => {
   return (
     <div className="my-component">
       <h1 className="title">Hello, World!</h1>
       <p className="description">This is a styled React component.</p>
       <button className="btn">Click Me</button>
     </div>
  );
 };
 ​
 export default MyComponent;

在此示例中,我们有一个名为 的组件MyComponent。要使用纯 CSS 应用样式,我们导入一个名为MyComponent.css. CSS 文件可能如下所示:

 .my-component {
   background-color: #f2f2f2;
   padding: 20px;
   border-radius: 5px;
   text-align: center;
 }
 ​
 .title {
   font-size: 24px;
   color: #333;
   margin-bottom: 10px;
 }
 ​
 .description {
   font-size: 16px;
   color: #777;
 }
 ​
 .btn {
   background-color: #007bff;
   color: #fff;
   border: none;
   padding: 10px 20px;
   border-radius: 4px;
   cursor: pointer;
   transition: background-color 0.3s ease;
 }
 ​
 .btn:hover {
   background-color: #0056b3;
 }

在这个 CSS 文件中,我们为组件中使用的不同类定义了样式。类my-component样式容器 div,类title样式标题,类description样式段落,btn类样式按钮。

呈现时MyComponent,它将应用定义的样式。容器 div 将具有带填充和边框半径的浅灰色背景。标题将具有较大的字体大小和深灰色,而段落将具有较小的字体大小和浅灰色。该按钮将具有蓝色背景和白色文本,并且在悬停时会过渡为深蓝色。

请记住正确导入 CSS 文件,确保路径根据您的项目结构准确无误。

如何使用 CSS 模块设计你的 React 应用程序

CSS 模块旨在解决纯 CSS 的全局范围和可重用性问题。它们允许您编写模块化样式表,其中类名称的范围限定为特定组件。

优点:

  • Scoped Styles: CSS 模块为每个组件生成唯一的类名,避免样式冲突。

  • 可重用性: CSS 模块中定义的样式可以轻松地跨组件重用。

  • 清除依赖关系:样式表被导入并直接链接到使用它们的组件。

缺点:

  • 学习曲线:开发人员必须学习和理解 CSS 模块语法和导入机制。

  • 附加配置:将 CSS 模块集成到 React 项目中通常需要额外的配置设置。

例子

 import React from 'react';
 import styles from './MyComponent.module.css';
 ​
 const MyComponent = () => {
   return (
     <div className={styles.myComponent}>
       <h1 className={styles.title}>Hello, World!</h1>
       <p className={styles.description}>This is a styled React component.</p>
       <button className={styles.btn}>Click Me</button>
     </div>
  );
 };
 ​
 export default MyComponent;

在本例中,我们导入了一个外部 CSS 模块文件 calledMyComponent.module.css并将其分配给styles对象。该styles对象包含 CSS 类名到特定于组件的唯一生成类名的映射。

CSS 模块文件可能如下所示:

 .myComponent {
   background-color: #f2f2f2;
   padding: 20px;
   border-radius: 5px;
   text-align: center;
 }
 ​
 .title {
   font-size: 24px;
   color: #333;
   margin-bottom: 10px;
 }
 ​
 .description {
   font-size: 16px;
   color: #777;
 }
 ​
 .btn {
   background-color: #007bff;
   color: #fff;
   border: none;
   padding: 10px 20px;
   border-radius: 4px;
   cursor: pointer;
   transition: background-color 0.3s ease;
 }
 ​
 .btn:hover {
   background-color: #0056b3;
 }

在 CSS 模块文件中,您可以像在常规 CSS 中一样定义样式,但您使用的不是全局类名,而是本地类名。这些本地类名称的范围仅限于组件,并具有在构建过程中生成的唯一名称。

呈现 时MyComponent,将使用对象中相应的类名称应用 CSS 模块样式styles。组件的容器 div、标题、段落和按钮将应用各自的样式。

确保使用属性并从组件的 JSX 中的对象className引用 CSS 模块类名称。stylesCSS模块系统会自动将这些类名映射到生成的唯一类名,保证样式封装,防止类名冲突。

请注意,CSS 模块文件应具有.module.css模块的文件扩展名才能正常工作。

如何使用 CSS 预处理器为你的 React 应用程序设计样式

SASS、LESS或Stylus等 CSS 预处理器提供了额外的功能,如变量、嵌套、混合等。它提高了 CSS 代码的生产力和可维护性。

优点:

  • 高级功能: SCSS 引入了简化 CSS 编写和管理的强大功能。

  • 代码可重用性: SCSS 允许使用混入和变量创建可重用的代码片段。

  • 轻松迁移:现有的 CSS 文件可以逐步转换为 SCSS,而无需进行重大重构。

缺点:

  • 编译步骤: SCSS文件需要编译成常规的CSS才能使用。

  • 学习曲线:开发人员必须学习 SCSS 语法及其特定功能。

例子

下面是一个示例,说明如何使用 Sass 来设置 React 组件的样式。npm install node-sass首先,通过运行or确保你的项目中安装了 Sass yarn add node-sass。

 import React from 'react';
 import './MyComponent.scss';
 ​
 const MyComponent = () => {
   return (
     <div className="my-component">
       <h1 className="title">Hello, World!</h1>
       <p className="description">This is a styled React component.</p>
       <button className="btn">Click Me</button>
     </div>
  );
 };
 ​
 export default MyComponent;

在此示例中,我们导入一个名为MyComponent.scss. 确保文件扩展名适用.scss于 Sass 文件。SCSS 文件可能如下所示:

 .my-component {
   background-color: #f2f2f2;
   padding: 20px;
   border-radius: 5px;
   text-align: center;
 ​
   .title {
     font-size: 24px;
     color: #333;
     margin-bottom: 10px;
  }
 ​
   .description {
     font-size: 16px;
     color: #777;
  }
 ​
   .btn {
     background-color: #007bff;
     color: #fff;
     border: none;
     padding: 10px 20px;
     border-radius: 4px;
     cursor: pointer;
     transition: background-color 0.3s ease;
 ​
    &:hover {
       background-color: #0056b3;
    }
  }
 }

如何使用 Tailwind CSS 设计你的 React 应用程序的样式

Tailwind CSS是一个实用程序优先的 CSS 框架,它提供了大量预定义的实用程序类。它促进了整个应用程序的快速开发和一致的样式。

优点:

  • 快速原型制作: Tailwind CSS 提供了广泛的实用程序类集合,可实现快速 UI 开发。

  • 高度可定制:该框架允许通过配置文件进行定制,从而实现量身定制的样式。

  • 一致的样式:通过使用预定义的实用程序类,可以轻松维护样式的一致性。

缺点:

  • 文件大小:包括整个 Tailwind CSS 框架会导致更大的包大小。

  • 类重载:过度依赖实用类可能会导致 HTML 标记臃肿。

例子:

首先,按照官方 Tailwind CSS 文档中的安装指南,确保您的项目中安装了 Tailwind CSS 。

 import React from 'react';
 ​
 const MyComponent = () => {
   return (
     <div className="bg-gray-200 p-4 rounded-lg text-center">
       <h1 className="text-2xl text-gray-800 mb-2">Hello, World!</h1>
       <p className="text-base text-gray-600">This is a styled React component.</p>
       <button className="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">
         Click Me
       </button>
     </div>
  );
 };
 ​
 export default MyComponent;

在此示例中,我们不导入任何外部 CSS 或 SCSS 文件。相反,我们直接在组件的 JSX 中使用 Tailwind CSS 实用程序类。实用程序类为组件的各个方面提供了现成的样式。

示例中使用的实用程序类 ( bg-gray-200, p-4, rounded-lg, text-center, , text-2xl, text-gray-800, mb-2, text-base, text-gray-600, bg-blue-500, hover:bg-blue-700, text-white, font-bold, py-2, px-4)rounded定义背景颜色、填充、边框半径、文本对齐方式、文本大小、文本颜色、边距、按钮样式等.

渲染时MyComponent,来自 Tailwind CSS 的各个实用程序类将应用于相应的元素,从而产生所需的样式。

确保您的项目已正确配置为使用 Tailwind CSS,包括导入必要的 Tailwind CSS 样式表和应用所需的构建过程(例如运行npm run build或yarn build生成生产就绪的 CSS 文件)。

Tailwind CSS 提供了广泛的实用程序类,您可以混合搭配它们来为您的 React 组件创建所需的样式。有关可用实用程序类和自定义选项的更多信息,请参阅官方 Tailwind CSS 文档。

如何使用 CSS-in-JS 设计你的 React 应用程序的样式

像Styled Components这样的 CSS-in-JS 库允许开发人员直接在他们的 JavaScript 代码中编写 CSS,从而提供了一种独特的样式化方法。Styled Components 提供了一种在 React 组件中创建可重用和作用域样式的方法。

优点:

  • 基于组件的样式:样式是在组件内编写的,增强了代码组织和可重用性。

  • 动态样式:样式化组件启用基于组件道具或状态的动态样式。

  • Easy Theme Integration:主题可以轻松整合,在整个应用程序中提供一致的样式。

缺点:

  • 构建复杂性: CSS-in-JS 解决方案通常需要额外的构建工具和依赖项。

  • 性能影响:在运行时生成动态样式会影响应用程序的性能。

例子

npm install styled-components首先,通过运行或确保您的项目中安装了 Styled Components 库yarn add styled-components。

 import React from 'react';
 import styled from 'styled-components';
 ​
 const StyledDiv = styled.div`
   
   padding: 20px;
   border-radius: 5px;
   text-align: center;
 `;
 ​
 const StyledTitle = styled.h1`
   font-size: 24px;
   color: #333;
   margin-bottom: 10px;
 `;
 ​
 const StyledDescription = styled.p`
   font-size: 16px;
   color: #777;
 `;
 ​
 const StyledButton = styled.button`
   
   color: #fff;
   border: none;
   padding: 10px 20px;
   border-radius: 4px;
   cursor: pointer;
   transition: background-color 0.3s ease;
 ​
   &:hover {
     
   }
 `;
 ​
 const MyComponent = () => {
   return (
     <StyledDiv>
       <StyledTitle>Hello, World!</StyledTitle>
       <StyledDescription>This is a styled React component.</StyledDescription>
       <StyledButton>Click Me</StyledButton>
     </StyledDiv>
  );
 };
 ​
 export default MyComponent;

styled在此示例中,我们从库中导入函数styled-components。然后,我们通过将使用所需 HTML 元素调用的结果分配styled给变量 ( StyledDiv, StyledTitle, StyledDescription, StyledButton) 来创建样式组件。

在每个样式组件的反引号 (`) 中,我们定义了特定于该组件的 CSS 规则。

呈现时MyComponent,样式化的组件将用于代替常规的 HTML 元素。在各个样式组件中定义的样式将应用于相应的元素。

Styled Components 允许您直接在 JavaScript 代码中编写 CSS,从而轻松封装样式和创建可重用的组件。您还可以将道具传递给样式化组件,并在您的 CSS 规则中使用它们来创建动态样式。

在您的组件中使用它们之前,请确保styled从styled-components您的样式组件导入函数并定义它们。

请记住在您的项目中安装和配置 Styled Components,然后再使用它们。

如何使用组件库来设计你的 React 应用程序

Chakra UI、Material-UI和Bootstrap等组件库提供预构建和样式化的 React 组件以及随附的样式。这些库提供了一致且有凝聚力的 UI 设计语言。

优点:

  • 快速开发:即用型组件可加快开发过程。

  • 一致的样式:库中的组件遵循统一的设计系统,确保视觉一致性。

  • 广泛的文档:流行的组件库具有文档齐全的 API 和指南。

缺点:

  • 定制限制:虽然这些库提供定制选项,但它们可能无法满足所有设计要求。

  • 捆绑包大小:包含整个组件库会增加应用程序的捆绑包大小。

例子

npm install @mui/material首先,通过运行或确保您的项目中安装了 Material-UI yarn add @mui/material。

 import React from 'react';
 import { styled } from '@mui/system';
 import { Button, Paper, Typography } from '@mui/material';
 ​
 const StyledPaper = styled(Paper)(({ theme }) => ({
   backgroundColor: '#f2f2f2',
   padding: theme.spacing(2),
   borderRadius: theme.spacing(1),
   textAlign: 'center',
 }));
 ​
 const StyledTitle = styled(Typography)(({ theme }) => ({
   fontSize: 24,
   color: '#333',
   marginBottom: theme.spacing(1),
 }));
 ​
 const StyledDescription = styled(Typography)(({ theme }) => ({
   fontSize: 16,
   color: '#777',
 }));
 ​
 const StyledButton = styled(Button)(({ theme }) => ({
   backgroundColor: '#007bff',
   color: '#fff',
   borderRadius: theme.spacing(1),
   padding: theme.spacing(1, 2),
   transition: 'background-color 0.3s ease',
 ​
   '&:hover': {
     backgroundColor: '#0056b3',
  },
 }));
 ​
 const MyComponent = () => {
   return (
     <StyledPaper>
       <StyledTitle variant="h1">Hello, World!</StyledTitle>
       <StyledDescription variant="body1">This is a styled React component.</StyledDescription>
       <StyledButton variant="contained">Click Me</StyledButton>
     </StyledPaper>
  );
 };
 ​
 export default MyComponent;

Button在此示例中,我们从 Material-UI ( , Paper, Typography)导入必要的组件,并styled从 导入函数@mui/system。然后我们使用该函数创建样式组件styled,将结果分配给变量 ( StyledPaper, StyledTitle, StyledDescription, StyledButton)。

在传递给 的函数中styled,我们使用 Material-UI 主题对象 ( ) 定义特定于每个样式化组件的 CSS 规则,theme以实现一致的主题。

渲染时MyComponent,样式化的组件将用于代替常规的 Material-UI 组件。在各个样式组件中定义的样式将应用于相应的元素。

styledMaterial-UI 中的样式化组件遵循与样式化组件类似的方法,允许您使用函数和 Material-UI 主题对象将样式封装在组件中。

确保从 Material-UI 导入必要的组件和功能,并在您的组件中使用它们之前定义您的样式组件。

请记住在使用前在您的项目中安装和配置 Material-UI。

结论

根据我们所看到的,这里有一个快速比较表,用于设计 React 应用程序的不同选项:

选项主要特征优点缺点何时使用
纯CSS 使用全局 CSS 文件的传统方法 简单而熟悉 缺乏封装和类名冲突的可能性 小型项目或 CSS 自定义是主要焦点时
CSS 模块 具有局部作用域类名的 CSS 文件 作用域样式并防止类名冲突 需要导入和引用唯一的类名 需要样式封装的中型项目
CSS 预处理器(例如 Sass、Less) 使用变量、混合等增强 CSS 语法。 可重用的代码、模块化和可维护的风格 编译所需的构建过程 受益于增强的 CSS 语法的项目
顺风 CSS 基于实用程序的 CSS 框架 快速开发、一致的样式、广泛的实用程序类 由于实用程序类,文件较大 快速开发至关重要的原型制作或项目
CSS-in-JS 使用 Styled Components 或 Emotion 等库直接在 JavaScript 中编写 CSS 基于组件的样式、动态样式、基于道具的样式 增加的包大小,额外的学习曲线 具有复杂或动态样式要求的项目
组件库(例如 MUI、Chakra) 预先设置样式和可定制的 UI 组件 一致的设计、广泛的组件库、主题支持 有限的定制选项,更大的包大小 需要具有主题支持的即用型 UI 组件的项目

每个选项都有自己的优点和缺点,选择取决于具体的项目要求和偏好。以下是每个选项何时更方便的细分:

  • 纯 CSS:适用于小型项目或 CSS 自定义是主要焦点时。它简单而熟悉,但缺乏封装,在较大的项目中可能导致类名冲突。

  • CSS Modules:适用于需要样式封装的中型项目。它提供作用域样式,防止类名冲突,并需要导入和引用唯一的类名。

  • CSS 预处理器:推荐用于受益于具有变量、混合和其他功能的增强 CSS 语法的项目。它们提倡可重用和可维护的样式,但需要一个编译构建过程。

  • Tailwind CSS:非常适合快速开发和原型制作。它提供了一组广泛的实用程序类以实现一致的样式,但由于实用程序类的数量可能会导致文件过大。

  • CSS-in-JS:非常适合具有复杂或动态样式要求的项目。直接在 JavaScript 中编写 CSS 提供了基于组件的样式和动态样式功能,但它可能会增加包的大小并且具有额外的学习曲线。

  • 组件库:当您需要具有一致设计和主题支持的即用型 UI 组件时非常有用。它们提供了广泛的组件库,但可能具有有限的自定义选项并导致更大的捆绑包大小。

选择合适的样式选项时,请考虑项目的大小、样式需求、开发速度和自定义要求。还值得考虑团队对所选选项及其生态系统的熟悉程度。

大家好,一如既往,我希望你喜欢这篇文章并学到新东西。

(更多优质教程:java567.com,搜索"react")

标签:样式,应用程序,React,color,styled,组件,CSS
From: https://www.cnblogs.com/web-666/p/17460229.html

相关文章

  • vite + react + arco-design-mobile 使用 babel-plugin-import 实现按需加载
    0.什么是vite?vite是一种新型前端构建工具。一个开发服务器,它基于原生ES模块提供丰富的内建功能一套构建指令,它使用Rollup打包你的代码,可输出用于生产环境的高度优化过的静态资源1.什么是babel?babel是一个javasctipt编译器,他是一个工具链,主要用于在当前浏览器和旧浏览器......
  • 二、Spring Reactive Security自定义登录页
    添加配置类:@ConfigurationpublicclassMyReactiveSecurityConfig{@BeanpublicReactiveUserDetailsServicereactiveUserDetailsService(){UserDetailsuser=User.withUsername("user").password("12345")......
  • 一、Spring Reactive Security简单使用
    SpringReactiveSecurity是结合SpringWebFlux使用的。结合SpringBoot使用,简化了大量配置。 新建SpringBoot项目,添加依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId>......
  • 让Flutter 应用程序性能提高 10 倍的 10 个技巧
    Flutter应用程序以其精美的设计和流畅的功能而闻名,但性能问题会很快破坏用户体验。借助这10个优化性能的专家技巧,将您的应用提升到一个新的水平。使用WidgetsBindingObserver跟踪应用程序的生命周期使用“WidgetsBindingObserver”来跟踪您的应用程序的生命周期。此观察器允许......
  • React学习时,自己拟定的一则小案例(table表格组件,含编辑)
    某次在Uniapp群看到有人问uniapp如何操作dom元素。他想对这张表标红的区域,做dom元素获取,因为产品想让红色色块点击时,成为可编辑,渲染1~4月份之间的行程安排。于是,有小伙伴说让他用position定位这里,点击时使红色色块层级抬高,弄个input上去。但提问的小伙伴并没有决定这么做,随后......
  • 【React工作记录八十七】React+antDesign实现上传图片功能(类组件)
    前言大家好我是歌谣今天继续给大家带来工作中实战部分的一些代码的封装和认识需求实现1可以支持上传最多九张图片2图片支持预览替换删除3支持自定义上传文件大小格式未上传提示实现效果子组件封装UploadImage组件*@Description:公共上传图片*@param{Array}type图片......
  • 【React工作记录八十八】React+antDesign封装一个tab组件(类组件)
    前言我是歌谣放弃很容易但是坚持一定很酷喜欢我就一键三连哈微信公众号关注前端小歌谣在我们的工作生活中每次学习一个框架我们就不免要封装组件而具备封装一个完美组件的能力我称之为"优秀"简单的父子组件父组件<Geyao/>子组件importReact,{Component}from'react';......
  • Asp.NetCore Web应用程序中的请求管道和中间件
     你是否会迷惑当我们请求一个ASP.NetWeb应用程序以后,它是怎么处理这些请求的,后台是怎么工作的,今天就讲一下Asp.NetCoreWeb应用程序中的请求处理过程。    上一节,我们讲到,Startup文件中用来配置中间件(middleware),这个中间件就是用来处理请求的。那标题中的请求管道又是什么呢,......
  • Java应用程序和小程序的区别是什么?
    最近正在B站上看动力节点老杜的视频自学Java,整理了这篇文章Java应用程序和小程序的区别,也是新手入门需要了解的,方便大家后续的学习 应用程序是一个独立的Java程序,在客户端或服务器端的虚拟机支持下运行。Java应用程序旨在执行特定功能,以在任何与Java兼容的虚拟机上运行,而不管计......
  • 002_创建应用程序
     /*一:应用程序:1创建程序2注册程序,3定义模型,4注册模型5数据库迁移6创建admin*/ 一:应用程序:1创建程序1:输入命令: pythonmanage.pystartapplearning_logs'''pythonmanage.pystartapplearning_logs在Dj......