适用于大型项目和团队协作的CSS开发方法——原子CSS

602 阅读7分钟

前言

原子CSS(Atomic CSS)是一种CSS编码方法,它将样式分解为最小的可重用单元,即“原子”。这种方法通常与BEM(Block Element Modifier)命名方法相结合使用,以创建高度模块化和可维护的CSS代码。

正文

原子CSS编程的介绍

  1. 最小化样式:原子CSS中的每个样式规则都是独立的,只包含一个或少数几个属性。例如,.btn 可能只定义了按钮的宽度和高度,而 .btn--primary 则定义了按钮的颜色和边框。
  2. 命名约定:原子CSS通常使用功能性的命名约定,如 .mr1(外边距右侧1个单位),.bg-red(背景颜色为红色)等,这些命名直观且易于理解。
  3. 可组合性:由于样式规则是独立的,它们可以很容易地组合在一起,以创建复杂的布局和组件,而不需要编写大量的定制CSS。
  4. 工具和库:原子CSS可以通过工具如Tachyons或Tailwind CSS实现,这些工具提供了一套预定义的原子类,可以快速地应用于HTML元素。

传统的CSS编程是这种形式的

<style lang="css" scoped>
.container{
    min-height: 100vh;
    background-color: #000000;
    /* background-image: url('E:\VS code\thq-aigc\vue\weather\src\assets\IMG_0241.JPG');
    background-size: cover; */
    opacity: 0.7;
    color: #f5f5f5;
}
.nav{
    display: flex;
    justify-content: space-between;
    padding: 20px;
}
.city-info{
    text-align: center;
}
p{
    margin: 20px;
}
.temp{
    font-size: 34px;
    margin: 10px;
    em{
        font-size: 50px;
    }
}
.future{
    margin-top: 40px;
    padding: 0 10px;
    .group{
        height: 44px;
        line-height: 44px;
        background-color: rgb(255, 255, 255,0.5);
        padding: 0 10px;
        margin-bottom: 10px;
        border-radius: 20px;
    }
}
.echarts-wrap{
    width: 100%;
    height: 50vh
}
</style>

这是原子化css编程

<div class="flex flex-col h-screen">
        <div class="flex flex-nowrap fixed w-full 
        items-baseline top-0 px-6 py-4 bg-gray-100">
            <div class="text-2xl font-bold">
                Chatgpt
            </div>
            <div class="ml-4 text-sm text-gray-500">
                基于OpenAI的ChatGPT自然语言模型人工智能对话
            </div>
            <div class="ml-auto px-4 py-2 text-sm cursor-pointer hover:bg-gray-200 rounded-md"
            @click="clickConfig()">
                设置
            </div>
        </div>

        <div class="sticky bottom-0 w-full p-6 pb-8 bg-gray-100"> <!-- 粘连在底部 -->
            <div class="mb-2 text-sm text-gray-500">
                请输入API KEY
            </div>
            <div class="flex">
                <input type="text" class="input flex-1"
                 placeholder="API KEY" 
                 v-model="messageContent"
                 @keydown.enter="save()">
                </input>
                <button class="btn" @click="save()">保存</button>
            </div>
        </div>
    </div>

分析优劣

对比一下可以分析出他们的优劣:

1、可维护性:

  • 传统CSS:随着项目的增长,传统CSS可能会变得难以维护,特别是当样式依赖于嵌套选择器和复杂的继承结构时。
  • 原子CSS:由于其模块化和功能性的类名,原子CSS更容易理解和维护。

2、 在开发速度上:

  • 传统CSS:开发者可能需要花费时间编写和调试CSS代码,尤其是在创建复杂组件时。
  • 原子CSS:预定义的类和组合性可以加快开发速度,因为开发者可以快速地应用和组合样式。

省去了大量的css样式的编写,在编写html时便一步到位了

      <div class="ml-4 text-sm text-gray-500">
          基于OpenAI的ChatGPT自然语言模型人工智能对话
      </div>

3、 响应式设计:

  • 传统CSS:实现响应式设计可能需要编写大量的媒体查询和条件样式,这可能增加代码的复杂性。
  • 原子CSS:可以更容易地与媒体查询结合使用,实现响应式设计,因为样式是独立的,可以按需应用。

比如原子css编写的设置按钮 这个div是一个设置按钮,位于导航栏的右侧,具有悬停效果和点击事件。

<div class="ml-auto px-4 py-2 text-sm cursor-pointer hover:bg-gray-200 rounded-md"
@click="clickConfig()">
   设置
</div>

4、 在代码重复的问题上上:

  • 传统CSS:开发者可能会在多个地方重复相同的样式,导致代码冗余和不一致。
  • 原子CSS:通过使用预定义的原子类,可以避免重复代码,提高代码的一致性。

5、 可扩展性:

  • 传统CSS:扩展样式可能需要修改多个选择器,这可能导致难以追踪的依赖关系和意外的影响。
  • 原子CSS:由于样式的独立性,扩展和修改样式更加直接和可控。
.future{
    margin-top: 40px;
    padding: 0 10px;
    .group{
        height: 44px;
        line-height: 44px;
        background-color: rgb(255, 255, 255,0.5);
        padding: 0 10px;
        margin-bottom: 10px;
        border-radius: 20px;
    }
}

6、 样式冲突:

  • 传统CSS:CSS的选择器特异性和层叠规则可能导致样式冲突,尤其是在大型项目中。
  • 原子CSS:由于样式的独立性,减少了特异性问题,使得样式冲突更易于管理和解决。

7、 在大型项目的团队协作中:

  • 传统CSS:在团队中,不同的开发者可能有不同的编码风格和习惯,这可能导致代码不一致。
  • 原子CSS:统一的命名约定和编码风格可以减少团队协作中的不一致性。

8、 在性能方面:

  • 传统CSS:大型的CSS文件可能会影响页面加载速度,尤其是在没有适当优化的情况下。
  • 原子CSS:由于样式的精简和模块化,生成的CSS文件通常更小,有助于提高页面性能。

9、 学习曲线上:

  • 传统CSS:对于新手开发者来说,理解CSS的选择器、继承和层叠规则可能需要一定的时间。
  • 原子CSS:虽然需要记忆大量的类名,但其直观的命名和组合性可能更容易上手。

使用Tailwind CSS

Tailwind CSS 就是一个原子CSS 框架,它提供了一套丰富的实用工具类,允许开发者快速构建自定义设计,而不受预定义组件的限制。

Tailwind CSS - 只需书写 HTML 代码,无需书写 CSS,即可快速构建美观的网站。 | TailwindCSS中文文档 | TailwindCSS中文网

ec7258cab06c7a8ca91cc1a2c9be748.png

1、安装和初始化Tailwind CSS

  • 安装:在终端中输入npm install -D tailwindcss postcss autoprefixer
  • 初始化:在终端中输入npx tailwindcss init -p

2、配置模板文件的路径

在 tailwind.config.js 配置文件中添加所有模板文件的路径。 4285f32e8e545f9dac63c50aedaf738.png

**/:这是一个通配符,表示任何深度的子目录。这意味着任何在src目录下的文件,无论嵌套多深,都将被包含

*.{js,vue,jsx,tsx}:这指定了文件扩展名。*表示任何文件名,而{js,vue,jsx,tsx}是一个扩展名的列表。这意味着所有.js、.vue、.jsx和.tsx文件都将被处理

3、将加载 Tailwind 的指令添加到你的 CSS 文件中

在你的主 CSS 文件中通过 @tailwind 指令添加每一个 Tailwind 功能模块。

@tailwind base;
@tailwind components;
@tailwind utilities;

在main.js中引入该样式

import './assets/tailwind.css'
6ec6fd2eb96d58159c4dc3b0739e18b.png

4、 接下来就可以开始在代码中使用原子化css啦

结语

原子CSS的优势

  1. 提高开发速度:由于样式是预定义的,开发者可以快速地应用样式,而不需要编写新的CSS代码。
  2. 增强可读性和可维护性:原子CSS的命名约定直观,使得代码易于理解和维护。
  3. 促进代码重用:由于样式是独立的,它们可以在不同的组件和项目中重用,减少了重复代码。
  4. 减少CSS体积:由于每个样式规则只包含必要的属性,生成的CSS文件通常比传统的CSS文件更小。
  5. 易于定制:原子CSS允许开发者轻松地覆盖或扩展预定义的样式,以适应特定的设计需求。
  6. 支持响应式设计:原子CSS可以很容易地与媒体查询结合使用,以实现响应式设计。
  7. 避免CSS特异性问题:由于样式是独立的,开发者可以更好地控制样式的层叠和特异性,避免CSS的继承和层叠导致的意外结果。

原子CSS是一种现代的CSS开发方法,尤其适用于大型项目和团队协作,它通过简化样式的应用和维护,提高了开发效率和代码质量。然而,它也可能带来一些挑战,如需要记忆大量的类名,以及在初期可能需要更多的时间来适应这种编程风格。