本文介绍: 随着 reactvue基于模块化框架的普及使用我们编写源生 css 的机会也越来越少。我们常常将页面拆分成许多个小组件,然后像搭积木一样将多个小组件组成最终呈现页面。但是我们知道css 是根据类名匹配元素的,如果有两个组件使用一个相同类名,后者就会把前者的样式覆盖掉,看来解决样式命名冲突是个大问题。为了解决这个问题,产生出了 CSS 模块化概念

说起css模块化,那么先来看看它的发展吧!

发展历程

从Web技术来讲

  1. Web 1.0:Web 起源于上世纪 90 年代,当时主要是静态页面内容呈现形式单一,浏览器技术比较简单。Web 1.0 的网站主要提供信息传递查找功能用户只能被动浏览

  2. Web 2.0:Web 2.0 的出现标志着 Web 技术从单向传递信息向多向交互转变。用户可以自由发布信息和进行交互,网站呈现方式更为多样化,例如社交网络在线协作工具等。Web 2.0 的技术特点包括 Ajax、富媒体应用程序、RESTful API 等。

  3. Web 3.0:Web 3.0 是指下一代 Web 技术,也称为语义 Web”。它的主要目标是为机器人人类用户提供更加智能化的 Web 体验实现 Web 内容智能化组织查询。Web 3.0 的技术特点包括语义 Web 技术、人工智能区块链等。

  4. Web 4.0:Web 4.0 是指未来 Web 技术的发展方向,目前还处于探索阶段。它的主要特点是将 Web 技术与真实世界相结合,实现一种更加深入的融合。Web 4.0 的技术特点包括增强现实、虚拟现实智能联网等。

总的来说,Web 技术经历了从静态页面到多向交互再到智能化 Web 的发展过程,不断提升着用户体验应用场景。未来,随着技术的不断进步,Web 技术还将继续推动着数字世界的发展

书写css来讲

  1. 初始阶段:在 Web 发展的早期阶段,CSS 的应用比较有限,主要用于简单样式设置例如基本文本样式背景颜色等。这个阶段的 CSS 书写比较简单,主要是针对页面元素进行基本的样式设计

  2. 表现与内容分离:随着 Web 标准推广浏览器的发展,人们开始意识到将内容与表分离的重要性,这一概念也被称为“Web 2.0 时代”,CSS 的角色变得更加重要。开发者开始更注重语义化的 HTML 结构,将样式与内容分离,这样不仅提高网站可维护性,也使得页面结构更加清晰。

  3. 响应设计移动优先:随着移动设备的普及,响应设计成为一个重要的方向开发者需要通过媒体查询等技术来实现不同屏幕尺寸下的布局和样式调整。同时,移动优先的理念也逐渐被提出,即首先针对移动设备进行设计开发然后再逐步扩展桌面端。

  4. 模块化预处理:随着前端项目变得越来越复杂,CSS 的模块化成为一个重要的趋势。开发者开始使用 CSS 预处理器(如 Sass、Less)来实现变量混合嵌套功能以便更好组织管理样式代码。同时,CSS 模块化思想也逐渐被引入例如 BEM(Block-Element-Modifier命名规范等。

  5. 组件化与 CSS-in-JS:随着前端框架的发展,组件化成为开发的主流模式。在这种情况下,CSS 也需要与组件一起进行模块化组合。因此,出现了一些 CSS-in-JS 的解决方案(如 styledcomponents),将 CSS 与组件直接关联起来,实现更加灵活和独立的样式管理

CSS 的书写经历了从简单的样式设置到内容与表现分离,再到响应设计模块化、组件化的发展过程。未来随着前端技术的不断演进,CSS 的书写方式可能会继续发生变化。

概念理解

CSS 模块化是一种将 CSS 代码分为独立、可复用模块方法。它的目标提高代码的可维护性可扩展性和重用性。以下是对 CSS 模块化的理解:

综上所述,CSS 模块化通过分离关注点、组件化开发、命名约定、可重用性和构建工具支持方式提高了 CSS 代码的可维护性可扩展性。它是一种有助于管理和组织大型项目复杂样式的有效方法

实现方式

  1. 命名约定:使用一定的命名约定来实现 CSS 的模块化。例如,BEM(Block-Element-Modifier)命名规范将样式类名分为块、元素修饰符通过命名的方式来表示各个组件或模块之间的关系
//使用 BEM 命名规范
<div class="block">
  <div class="block__element"&gt;
    <span class="block__element--modifier"&gt;Hello, CSS Modules!</span&gt;
  </div&gt;
</div&gt;

.block {
  /* 块级样式 */
}

.block__element {
  /* 元素级样式 */
}

.block__element--modifier {
  /* 修饰符样式 */
}
  1. 命名空间:使用命名空间来区分不同模块的样式。可以在样式类名添加一个特定的前缀,以确保样式只应用于特定模块。这样可以避免样式冲突,并提供更好可维护性
<div class="moduleA"&gt;
  <span class="moduleA__text"&gt;Module A</span>
</div>

<div class="moduleB">
  <span class="moduleB__text">Module B</span>
</div>


.moduleA {
  /* Module A 样式 */
}

.moduleA__text {
  /* Module A 文本样式 */
}

.moduleB {
  /* Module B 样式 */
}

.moduleB__text {
  /* Module B 文本样式 */
}
  1. CSS 预处理器:使用 CSS 预处理器(如 Sass、Less)来实现 CSS 的模块化。预处理器提供了变量混合嵌套功能,可以更好地组织和管理样式代码。通过将样式代码拆分为多个文件,并使用导入机制,可以实现模块化的样式管理。
//使用Sass
// _module.scss

.module {
  /* 模块样式 */
}

.module__item {
  /* 模块子元素样式 */
}

.module--highlight {
  /* 模块高亮样式 */
}


// main.scss

@import 'module';

.container {
  /* 容器样式 */
  
  .module {
    /* 使用模块样式 */
  }
}
  1. CSS-in-JS:使用 CSS-in-JS 解决方案(如 styledcomponents、Emotion)来实现 CSS 的模块化。这种方式将样式直接与组件关联起来,通过 JavaScript 的方式动态生成样式,从而实现更加灵活和独立的样式管理。
//使用 styled-components
import styled from 'styled-components';

const Module = styled.div`
  /* 模块样式 */
`;

const Item = styled.span`
  /* 子元素样式 */
`;

const HighlightedModule = styled(Module)`
  /* 高亮模块样式 */
`;
  1. CSS Modules:CSS Modules 是一种将 CSS 文件作为模块导入并进行隔离的方式。通过在 CSS 类名添加哈希值,可以确保样式的唯一性,避免样式冲突。CSS Modules支持局部作用域和类似于变量功能,使得样式的模块化更加直观。
import styles from './module.css';

function Component() {
  return (
    <div className={styles.module}>
      <span className={styles.item}>Module</span>
    </div>
  );
}

不同模块化的实现利弊也有所不同

命名约定:

优点:

缺点:

命名空间

优点:

缺点:

CSS 预处理器

优点:

缺点:

CSS-in-JS:

优点:

缺点:

CSS Modules

优点:

缺点:

根据具体的项目需求团队情况,可以选择最适合的 CSS 模块化实现方式。有些项目可能更适合简单的命名约定,而对于大型项目或团队协作采用 CSS 预处理器CSS Modules 可能更合适。CSS-in-JS 则适用于那些更喜欢将样式与组件紧密耦合开发者

当然,不同模块化的实现使用场景也有所不同

需要根据项目的规模、团队的需求以及开发个人偏好来选择合适的 css 模块化实现方式,有的情况下,也可以结合不同的方式来组合使用,来满足具体的需求

  1. 命名约定
  1. 命名空间
  1. CSS 预处理器
  1. CSS-in-JS
  • 适用于以组件为中心的开发模式,样式与组件紧密耦合。
  • 对于喜欢将样式与组件一起编写,并希望通过 JavaScript 来管理和操作样式的开发者来说,CSS-in-JS 是一个不错的选择
  • 尤其在使用 React 或类似的组件化框架时,CSS-in-JS 可以更好地实现组件的封装和复用。
  1. CSS Modules
  • 适用于中大型项目或需要更好地管理样式作用域的项目。
  • 当项目需要避免全局样式冲突、确保样式唯一性,并且需要灵活地使用类似变量功能时,可以选择使用 CSS Modules。
  • CSS Modules 还能提供局部作用域,使样式与组件紧密关联,提高代码的可维护性和可读性。

总结

在这里插入图片描述

原文地址:https://blog.csdn.net/He_9a9/article/details/134777860

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_42766.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注