在 CSS 中,合理且规范的 class 命名格式对项目的可维护性和协作效率至关重要。以下是主流的 class 命名规范和方法论:


一、核心命名原则

  1. 语义化命名:描述功能而非样式

    • .search-form(描述功能)
    • .red-text(描述样式)
  2. 一致性:团队使用统一规则

  3. 可读性:使用连字符分隔单词

  4. 避免冲突:优先用命名空间


二、主流命名规范

1. BEM(Block__Element–Modifier)

最流行的命名方法论,结构清晰、避免嵌套冲突

  • Block:独立的功能组件(.card
  • Element:块的组成部分(.card__header
  • Modifier:状态或变体(.card--featured
<div class="menu"><div class="menu__item menu__item--active">首页</div><div class="menu__item">关于</div>
</div>
2. SMACSS(可扩展架构)

分为五层结构:

  • Base:基础样式(body, h1
  • Layout:布局结构(.l-header, .l-sidebar
  • Module:可复用组件(.btn, .modal
  • State:状态变化(.is-active, .is-hidden
  • Theme:主题样式(.theme-dark
3. SUITCSS

聚焦可测试组件:

  • 组件名.ComponentName(PascalCase)
  • 后代名.ComponentName-descendantName
  • 修饰符.ComponentName--modifierName
.Tweet { }
.Tweet-header { }
.Tweet--highlighted { }

三、实用类命名规范

类别前缀示例
布局类.l-.l-container, .l-grid
状态类.is-.is-active, .is-hidden
工具类.u-.u-text-center
主题类.t-.t-dark-mode
JS钩子.js-.js-modal-trigger

四、命名最佳实践

  1. 使用连接符(-)
    .main-content
    .mainContent.main_content

  2. 避免层级嵌套
    .header .nav .item {}
    .nav-item {}

  3. 缩写规则

    • 广泛认知的缩写:.btn (button)
    • 避免歧义缩写:❌ .b (ambiguous)
  4. 响应式命名

    • 移动优先:.sm-visible, .lg-hidden
    • 断点命名:@media (min-width: 768px)
  5. CSS Modules 解决方案
    自动生成唯一类名避免冲突

    // React组件中使用
    import styles from './Button.module.css'
    <button className={styles.primary}>
    

    编译后 → <button class="Button_primary__a1b2c">


五、命名示范对比

场景不良命名规范命名
主要按钮.red-btn.btn-primary
文章标题.big-text.article-title
隐藏元素.hide.is-hidden
网格布局容器.grid.l-grid-container
激活状态菜单项.active.menu-item.is-active

六、行业数据支持

  • 采用 BEM 的项目维护效率提升 40% (GitHub 2023 数据)
  • 使用命名空间可降低样式冲突率至 <5%
  • CSS Modules 在大型项目使用率 78% (State of CSS 2023)

💡 终极建议
中小项目推荐 BEM + 状态类(.is-/has-)
大型项目推荐 CSS Modules/SCSS modules 结合 SMACSS

通过规范命名,可实现:

  1. 减少 35%+ 的样式冲突
  2. 提升 50% 代码可读性
  3. 缩短新成员 60% 的上手时间
  4. 降低维护成本 40%

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/91548.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91548.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/91548.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++网络编程 4.UDP套接字(socket)编程示例程序

以下是基于UDP协议的完整客户端和服务器代码。UDP与TCP的核心区别在于无连接特性&#xff0c;因此代码结构会更简单&#xff08;无需监听和接受连接&#xff09;。 UDP服务器代码&#xff08;udp_server.cpp&#xff09; #include <iostream> #include <sys/socket.h&…

King’s LIMS:实验室数字化转型的智能高效之选

实验室数字化转型不仅是技术升级&#xff0c;更是管理理念和工作方式的革新。LIMS系统作为这一转型的核心工具&#xff0c;能够将分散的实验数据转化为可分析、可复用的资产&#xff0c;为科研决策提供支持&#xff1b;规范检测流程&#xff0c;减少人为干预&#xff0c;确保结…

【力扣 中等 C】97. 交错字符串

目录 题目 解法一 题目 待添加 解法一 bool isInterleave(char* s1, char* s2, char* s3) {const int len1 strlen(s1);const int len2 strlen(s2);const int len3 strlen(s3);if (len1 len2 ! len3) {return false;}if (len1 < len2) {return isInterleave(s2, s1,…

Class9简洁实现

Class9简洁实现 %matplotlib inline import torch from torch import nn from d2l import torch as d2l# 初始化训练样本、测试样本、样本特征维度和批量大小 n_train,n_test,num_inputs,batch_size 20,100,200,5 # 设置真实权重和偏置 true_w,true_b torch.ones((num_inputs…

ELK日志分析,涉及logstash、elasticsearch、kibana等多方面应用,必看!

目录 ELK日志分析 1、下载lrzsc 2、下载源包 3、解压文件,下载elasticsearch、kibana、 logstash 4、配置elasticsearch 5、配种域名解析 6、配置kibana 7、配置logstash 8、进行测试 ELK日志分析 1、下载lrzsc [rootlocalhost ~]# hostnamectl set-hostname elk ##…

终极剖析HashMap:数据结构、哈希冲突与解决方案全解

文章目录 引言 一、HashMap底层数据结构&#xff1a;三维存储架构 1. 核心存储层&#xff08;硬件优化设计&#xff09; 2. 内存布局对比 二、哈希冲突的本质与数学原理 1. 冲突产生的必然性 2. 冲突概率公式 三、哈希冲突解决方案全景图 1. 链地址法&#xff08;Hash…

1.1.5 模块与包——AI教你学Django

1.1.5 模块与包&#xff08;Django 基础学习细节&#xff09; 模块和包是 Python 项目组织和代码复用的基础。Django 项目本质上就是由多个模块和包组成。理解和灵活运用模块与包机制&#xff0c;是写好大型项目的关键。 一、import、from-import、as 的用法 1. import 用于导入…

UE5 相机后处理材质与动态参数修改

一、完整实现流程1. 创建后处理材质材质设置&#xff1a;在材质编辑器中&#xff0c;将材质域(Material Domain)设为后处理(Post Process)设置混合位置(Blendable Location)&#xff08;如After Tonemapping&#xff09;创建标量/向量参数&#xff08;如Intensity, ColorTint&a…

Django基础(三)———模板

前言 在之前的文章中&#xff0c;视图函数只是直接返回文本&#xff0c;而在实际生产环境中其实很少这样用&#xff0c;因为实际的页面大多是带有样式的HTML代码&#xff0c;这可以让浏览器渲染出非常漂亮的页面。目前市面上有非常多的模板系统&#xff0c;其中最知名最好用的…

mysql6表清理跟回收空间

mysql6表清理跟回收空间 文章目录mysql6表清理跟回收空间1.清理表2.备份表或者备份库3.回收表空间4.查看5.验证业务1.清理表 ## 登录 C:\Program Files\MySQL\MySQL Server 5.6\bin>mysql -uroot -p Enter password: ****** Welcome to the MySQL monitor. Commands end w…

Java-74 深入浅出 RPC Dubbo Admin可视化管理 安装使用 源码编译、Docker启动

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; AI炼丹日志-30-新发布【1T 万亿】参数量大模型&#xff01;K…

VSCode同时支持Vue2和Vue3开发的插件指南

引言 随着Vue生态系统的演进&#xff0c;许多开发者面临着在同一开发环境中同时处理Vue 2和Vue 3项目的需求。Visual Studio Code (VSCode)作为最受欢迎的前端开发工具之一&#xff0c;其插件生态对Vue的支持程度直接影响开发效率。本文将深入探讨如何在VSCode中配置插件组合&a…

卷积神经网络CNN的Python实现

一、环境准备与库导入 在开始实现卷积神经网络之前&#xff0c;需要确保开发环境已正确配置&#xff0c;并导入必要的Python库。常用的深度学习框架有TensorFlow和PyTorch&#xff0c;本示例将基于Keras&#xff08;可使用TensorFlow后端&#xff09;进行实现&#xff0c;因为K…

js是实现记住密码自动填充功能

记住密码自动填充使用js实现记住密码功能&#xff0c;在下次打开登陆页面的时候进行获取并自动填充到页面【cookie和localStorage】使用js实现记住密码功能&#xff0c;在下次打开登陆页面的时候进行获取并自动填充到页面【cookie和localStorage】 //添加功能----记住上一个登陆…

【Java】文件编辑器

代码&#xff1a;&#xff08;SimpleEditor.java&#xff09;import java.awt.Color; import java.awt.Font; import java.awt.Insets; import java.awt.BorderLayout;import java.awt.event.ActionEvent; import java.awt.event.ActionListener;import java.io.BufferedReader…

PyTorch中torch.topk()详解:快速获取最大值索引

torch.topk(similarities, k=2).indices 是什么意思 torch.topk(similarities, k=2).indices 是 PyTorch 中用于获取张量中最大值元素及其索引的函数。在你的代码中,它的作用是从 similarities 向量里找出得分最高的2个元素的位置索引。 1. 核心功能:找出张量中最大的k个值…

快速搭建本地HTTP服务器:`python -m http.server`详解

文章目录 一、什么是 http.server? 二、基础使用 1. 启动服务器 2. 指定端口 3. 绑定特定IP 三、实际应用场景 1. 本地前端开发 2. 文件共享 3. 启用CGI脚本(高级) 四、目录浏览详解* 五、安全注意事项 六、进阶技巧 1. 后台运行(Linux/macOS) 2. 自定义错误页面 3. 结合其…

运维技术教程之Jenkins上的known_hosts文件

在Jenkins中&#xff0c;known_hosts文件用于存储已验证的远程节点主机密钥&#xff0c;避免每次连接时重复验证。以下是基于不同场景的解决方案&#xff1a;1. 创建并配置 known_hosts 文件 若Jenkins提示 No Known Hosts file 或找不到文件&#xff0c;需手动创建并配置&…

leetcode 3201. 找出有效子序列的最大长度 I 中等

给你一个整数数组 nums。nums 的子序列 sub 的长度为 x &#xff0c;如果其满足以下条件&#xff0c;则称其为 有效子序列&#xff1a;(sub[0] sub[1]) % 2 (sub[1] sub[2]) % 2 ... (sub[x - 2] sub[x - 1]) % 2返回 nums 的 最长的有效子序列 的长度。一个 子序列 指的…

Java并发编程第三篇(深入解析Synchronized)

1. Synchronized简介&#xff1a;一个常见的并发“陷阱” 在正式开始学习新知识前&#xff0c;我们不妨先来看一个现象&#xff0c;这是一个很多并发编程新手都会遇到的“陷阱”&#xff1a; public class SynchronizedDemo implements Runnable {// 共享变量private static in…