前端知识库(lizh)
  • README
  • Bugs
    • 前端调试随笔
    • 浏览器常见问题概览
    • 浏览器兼容问题概览
    • HTML常见问题概览
    • CSS常见问题概览
    • JS常见问题概览
    • 移动端兼容性问题概览
    • 微信小程序开发
    • NodeJs常见问题概览
    • Mac常见问题概览
    • 微信开发遇坑指南
    • Npm包常见问题概览
    • 其他问题汇总
  • Css探索系列
    • CSS基础知识
    • CSS常见问答
    • CSS常见问答02
    • CSS应用示例
    • CSS应用示例02
    • 由Z Index引发的层叠上下文思考
    • 由浮动塌陷引发的块级格式上下文思考
    • CSS探索系列 Flex布局
    • CSS探索系列 Margin
    • CSS探索系列 Auto关键字
    • CSS探索系列 Gradient
    • CSS探索系列 Line Height
    • CSS探索系列 元素居中
    • CSS探索系列 动画
    • 为什么使用PostCSS处理CSS?
    • 重新认识伪类与伪元素
    • 自定义表单伪元素样式
    • 如何理解Css中的Display属性
    • 视口和软键盘对视口的影响
    • 关于Css
  • Frontend
    • 00 关于Web前端
    • 01 前端知识概览
    • 02 常用前端库概览
    • 基础 00 前端常见问题01
    • 基础 01 浏览器缓存
    • 基础 02 浏览器工作原理
    • 基础 03 谈谈前端跨源问题及解决方法
    • 进阶 01 Web性能优化
    • 进阶 02 搜索引擎优化(SEO)
    • 进阶 03 前端模块化编程
    • 进阶 04 规范代码:Linter、Prettier、EditorConfig
    • 进阶 11 前端自动化测试
    • 高级 01 前端安全
    • Vue2.X原理篇
    • Vue3初步了解及迁移指南
    • 重读Vue教程
    • React17.X原理篇
    • 你必须知道的React问题
    • 重读React教程
    • 聊一聊Cookie的一些问题
    • 如何理解HTTP响应的状态码
    • HTTP的历史演变及概述
    • Webpack4.X原理篇
    • Webpack基础入门篇
    • Webpack构建优化篇
    • TypeScript使用指南
    • 代码规范
      • 前端规范
      • HTML
      • CSS
      • JS
  • Html探索系列
    • HTML基础知识
    • HTML基础知识02
    • HTML常见问答
    • HTML经典实践用例
    • HTML元素的宽高及位置详解
    • Video元素的使用和常见问题总结
    • Html探索系列 Meta标签
    • DOCTYPE:文档类型与浏览器模式
    • DHTML(动态网页)简介
    • HTML标签详解
    • HTML布局的几种方式
    • HTML全局属性
    • 关于Html
  • Js探索系列
    • 基础知识
    • 常见问答
    • 应用示例
    • 趣味示例
    • 基础篇 05 AJAX
    • 基础篇 06 Window对象
    • 基础篇 07 Error、JSON、Math、Console对象
    • 基础篇 08 History、URL、Screen、Navigator、Location对象
    • 基础篇 09 文档对象模型(DOM)
    • 基础篇 10 Document对象
    • 基础篇 11 Element对象
    • 基础篇 12 Event对象
    • 基础篇 13 键盘、鼠标、触摸事件
    • 基础篇 15 CSS对象模型(CSSOM)
    • 进阶篇 01 Prototype对象和继承
    • 进阶篇 02 Promise对象
    • 进阶篇 07 迭代器(Iterator)
    • 进阶篇 08 Generator和Async函数
    • 进阶篇 09 JavaScript异步编程
    • Date对象和日期时间字符串格式
    • Canvas基础入门篇
    • Canvas进阶篇
    • SVG基础入门篇
    • 四种判断数据类型方法的优缺点
    • 深入理解JavaScript的浅拷贝和深拷贝
    • 谈谈JavaScript的作用域和上下文
    • 复制内容到剪贴板
    • 关于Javascript
  • NodeJs
    • 关于Node.Js
    • Node.Js:三种调试方法
    • Npm包管理器简介及一些机制
    • NPM:Package.Json详解(中文)
    • NPM:从零开始,开发一个软件包
    • NPM:常用命令
    • Node.Js:Fs(文件系统)
    • Node.Js:Global(全局变量)
    • Node.Js:HTTP
    • Node.Js:Module(模块)
    • Node.Js:Path(路径)
    • Node.Js:Readline(逐行读取)
  • Research
    • 极细边框(1px边框)实现方式
    • 如何监控前端异常?
    • H5页面跳转和刷新
    • Web主题切换和个性化定制方法总结
    • Vue SSR(服务端渲染)的简单实现
    • 基于Create React App打造代码规范化的React+Ts项目
    • H5可视化编辑
    • Web常用功能
    • Javascript加密混淆
    • Vue如何导入TypeScript
    • 移动端PDF预览
    • 纯CSS绘制箭头
    • 网站性能测量和优化方法
  • Tech
    • GOOGLE浏览器的搜索技巧
    • Curl的用法指南
    • Sublime3插件篇
    • Charles安装及使用
    • Nginx基础使用
    • 排序算法(Javascript)
    • 代码整洁之道(摘录笔记)
    • Java的24种设计模式与7大原则
    • 观察者和发布订阅模式
  • Tools
    • Git
      • Git基础教程
      • Git常见问题
    • Gitbook
      • Gitbook入门篇
      • Gitbook插件篇
      • Gitbook进阶篇
由 GitBook 提供支持
在本页
  • 命名规范
  • 四种基本的编程命名规范
  • 一般命名规则
  • 下划线还是中划线命名?
  • 推荐

这有帮助吗?

  1. Frontend
  2. 代码规范

前端规范

命名规范

四种基本的编程命名规范

驼峰式命名:第一个单词首字母小写,后面其他单词首字母大写。

匈牙利命名:前缀字母用变量类型的缩写,其余部分用变量的英文或英文的缩写,单词第一个字母大写。

帕斯卡命名法:又叫大驼峰式命名法。每个单词的第一个字母都大写。

下划线命名法:以字母开头,单词全部采用小写方式,以下划线分隔。

一般命名规则

命名规则没有谁对谁错,在项目中保持一致才是关键。

文件夹中/文件名:下划线命名法,如,my_project_name。

**图片命名:**下划线命名法,如,project_list_icon@3x.jpg。

图片功能:icon | logo | btn | bg | cont

模块名称: list | info | avatar

图片精度: @1x | @2x | @3x

**CSS选择器命名:**下划线命名法。

  • 下划线命名法,应该尽量精短、明确,

  • 在子孙模块数量可预测的情况下,严格继承祖先模块的命名前缀。当子孙模块超过4级或以上的时候,可以考虑在祖先模块内具有识辨性的独立缩写作为新的子孙模块

  • 常用命名推荐

type
name

文字

description、info、information、details、feature、msg、message、txt、text、tips、title、

图片

avatar、logo、arrow、thumbnail

标签

bar、btn、branding、links、more、nav、navigation、pop、popup、nub、promotion、subscribe、summary、crumb、breadcrumbs、category、col、column

功能类

clearfix、copyright、comment、forum、help、login、logout、menu、pagination、output、preview、progress、reg、register、save、search、share、show、sort、submit

容器

container、wrap、wrapper、module

内容

content、slide、main、body、section

状态

current、disabled、active、error、fail、default、hightlight、fewer、hide、off、on、selected、checked、success

层级

primary、secondary、sub

序列

even、odd、first、last、previous、next

下划线还是中划线命名?

文件名首先肯定不能使用空格,然后一般在中划线(或称连字符) - 和下划线 _ 中做选择。

文件是否需要被搜索引擎搜索

通常公布到网络时文件名作为 URL 的一部分。

然而 Google 搜索引擎会将 _ 连接的单词作为一个单词。比如:搜索 web_site 实际上只会找关键词 website;而 web-site 会分为 web 和 site 来查找。即:

  • This_is_a_single_word

  • This-is-a-sentence-with-multiple-words

所以这是个 SEO 问题。如果要考虑到搜索引擎,那么就用 -。

注:过去,Google 不会将下划线视为单词分隔符,但现在可以了。

文件名能否被环境解析

比如 Java、Python、Go 语言:

命名源文件和目录不可以用连字符,否则不能被 Python 或 Java import,因为他们要求目录和文件名都是像变量名那样的标识符。命名变量当然也不可以用连字符。所以其实是统一的。

这就是为什么 Go 语言的 import 要用字符串 “fmt” 的原因了。

对于 Java,这进一步影响了公司的域名。例如 com.chenshuo.rpc 是合法的 package 名字,但是 com.china-pub.rpc 和 com.163.rpc 就不合法了。再引申一下,如果目录名是域名的一部分,恐怕也应该避免下划线,因为域名里通常没有下划线。

LaTeX 的源文件(包括图片)不要有下划线,否则 include 会出错。

英文文法

如果既不需要关心搜索引擎,也不需要关心编程语言环境的问题。那么就考虑英文文法。 连字符在英文里是有意义的,比如复合词:

upper-case letter
non-English-speaking peoples
the post–World War II years
a hospital–nursing home connection
a nursing home–home care policy
a quasi-public–quasi-judicial body

为了保留连字符在复合词的作用,那么文件命名时,就应该使用下划线来代替空格。

推荐

个人推荐文件名、CSS 选择器等使用下划线连接。原因:

  • 更符合编程语言中变量的命名规范。在某些情况下可能需要以变量形式访问命名。比如:React 常以这种方式使用选择器:

    import styles from './index.less'
    <div className={styles.acticle_body}></div>
  • 用下划线连接的词,双击鼠标可以直接选择所有单词;

  • 正则表达式: /w 表示单词字符,包括 a-z、A-Z、0-9,以及下划线。

上一页代码规范下一页HTML

最后更新于1年前

这有帮助吗?