前端开发规范:CSS 代码规范指南

news/2024/7/8 7:18:03

CSS 代码规范指南

代码风格

代码格式化

样式书写一般有两种:一种是紧凑格式 (Compact)

.web{ display: block;width: 50px;}

一种是展开格式(Expanded)

.web {
  display: block;
  width: 50px;
}

团队约定: 统一使用展开格式书写样式

代码大小写

样式选择器,属性名,属性值关键字全部使用小写字母书写,属性字符串允许使用大小写。

/* 推荐 */
.web {
  display: block;
}

/* 不推荐 */
.web {
  display: BLOCK;
}

选择器

  • 尽量少用通用选择器 *
  • 不使用 ID 选择器
  • 不使用无具体语义定义的标签选择器
/* 推荐 */
.web {
}
.web li {
}
.web li p {
}

/* 不推荐 */
* {
}
#jdc {
}
.web div {
}

分号

每个属性声明末尾都要加分号;

.web {
  width: 100%;
  height: 100%;
}

代码易读性

颜色值 rgb() rgba() hsl() hsla() rect() 中不需有空格,且取值不要带有不必要的 0

/* 推荐 */
.web {
  color: rgba(255, 255, 255, 0.5);
}

/* 不推荐 */
.web {
  color: rgba(255, 255, 255, 0.5);
}

不要为 0 指明单位

/* 推荐 */
.web {
  margin: 0 10px;
}

/* 不推荐 */
.web {
  margin: 0px 10px;
}

CSS3 浏览器私有前缀写法

CSS3 浏览器私有前缀在前,标准前缀在后

.web {
  -webkit-border-radius: 10px;
  -moz-border-radius: 10px;
  -o-border-radius: 10px;
  -ms-border-radius: 10px;
  border-radius: 10px;
}

class 命名

  • 避免过度任意的简写。.btn 代表 button,但是 .s 不能表达任何意思。
  • class 名称应当尽可能短,并且意义明确。
  • 随着项目模块增多,防止因为不同页面或者组件中定义的 css 冲突,所以规范 css 语法也变得至关重要,推荐:BEM,分别代表着:Block(块)、Element(元素)、Modifier(修饰符)
.user-info {} # user-info 是一个块,我理解是一个模块
.user-info--feature {} # user-info--feature 是一个修饰符,用来表示这个块的不同状态
.user-info__title{} # user-info__title 是一个元素,属于userinfo模块下的,多个元素组成块
<div class="user-info">
  <div class="user-info__title">张三</div>
  <div class="user-info__age">18</div>
</div>

<div class="tabs">
  <div class="tab tab-active">选中的标签</div>
  <div class="tab ">标签二</div>
  <div class="tab ">标签三</div>
</div>

css 属性声明顺序

  1. Positioning
  2. Box model
  3. Typographic
  4. Visual
  5. Misc

由于定位(positioning)可以从正常的文档流中移除元素,并且还能覆盖盒模型(box model)相关的样式,因此排在首位。盒模型排在第二位,因为它决定了组件的尺寸和位置。

其他属性只是影响组件的 内部 或者是不影响前两组属性,因此排在后面。

.declaration-order {
  /* Positioning  定位和层级等属性*/
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 100;

  /* Box-model 盒子模型或者浮动相关*/
  display: block;
  float: right;
  width: 100px;
  height: 100px;

  /* Typography 字体配置*/
  font: normal 13px "Helvetica Neue", sans-serif;
  line-height: 1.5;
  color: #333;
  text-align: center;

  /* Visual 背景色边框等*/
  background-color: #f5f5f5;
  border: 1px solid #e5e5e5;
  border-radius: 3px;

  /* Misc 透明度和动画等*/
  opacity: 1;
  transition: all 0.5s;
}

SCSS 规范

我们开发将使用 SCSS 来作为 css 的预处理器

变量

可复用属性尽量抽离为页面变量,易于统一维护

// CSS
.web {
  color: red;
  border-color: red;
}

// SCSS
$color: red;
.web {
  color: $color;
  border-color: $color;
}

混合(mixin)

根据功能定义模块,然后在需要使用的地方通过 @include 调用,避免编码时重复输入代码段

// CSS
.web_1 {
  -webkit-border-radius: 5px;
  border-radius: 5px;
}
.web_2 {
  -webkit-border-radius: 10px;
  border-radius: 10px;
}

// SCSS
@mixin radius($radius: 5px) {
  -webkit-border-radius: $radius;
  border-radius: $radius;
}
.web_1 {
  @include radius; //参数使用默认值
}
.web_2 {
  @include radius(10px);
}

// CSS
.web_1 {
  background: url(/img/icon.png) no-repeat -10px 0;
}
.web_2 {
  background: url(/img/icon.png) no-repeat -20px 0;
}

// SCSS
@mixin icon($x: 0, $y: 0) {
  background: url(/img/icon.png) no-repeat $x, $y;
}
.web_1 {
  @include icon(-10px, 0);
}
.web_2 {
  @include icon(-20px, 0);
}

function 函数

@function pxToRem($px) {
  @return $px / 10px * 1rem;
}
.web {
  font-size: pxToRem(12px);
}

运算规范

运算符之间空出一个空格

.web {
  width: 100px - 50px;
  height: 30px / 5;
}

注意运算单位,单位同时参与运算,所以 10px 不等于 10,乘除运算时需要特别注意

// 正确的运算格式
.web {
  width: 100px - 50px;
  width: 100px + 50px;
  width: 100px * 2;
  width: 100px / 2;
}

http://lihuaxi.xjx100.cn/news/76853.html

相关文章

Go基础 数组 切片 Map

数组 数组介绍 数组可以存放多个同一类型数据 数组也是一种数据类型 在Go 中数组是指类型 案例 package mainimport "fmt"func main() {// 计算 6个人 平均体重 以及体重总和var person [6]float64person[0] 98person[1] 90person[2] 91person[3] 3person[4]…

MPLS 配置LDP本地会话实验 详解

MPLS 配置LDP本地会话 组网需求 在如图1所示&#xff0c;LSRA、LSRC为IP/MPLS骨干网的PE设备。LSRA和LSRC上需要部署MPLS L2VPN或L3VPN业务来实现VPN站点的互联&#xff0c;因此LSR间需要配置本地LDP会话来建立LDP LSP&#xff0c;实现承载VPN业务。 图1 配置LDP本地会话组网…

C/C++函数传参详解

问题引出 在编码过程中&#xff0c;新手经常会遇到的一个问题是&#xff0c;我明明在函数中交换了数据&#xff0c;为什么函数外面显示的不对&#xff0c;最常见的例子就是swap()函数。先看两个代码&#xff1a; 代码一&#xff1a; #include <stdio.h> void swap(int…

Jenkins+git+maven持续集成持续部署java项目(CI/CD)

文章目录一. jenkins的作用二.安装三.maven安装四.git安装五. jenkins官方中文文档六. 集成七.配置自动化发布测试八.端口冲突解决九.构建触发器十.邮件通知一. jenkins的作用 二.安装 官网下载地址: https://www.jenkins.io/download/ 本人采用下载war,上传服务器直接运行方式…

Node.js——初识Node.js

系列文章目录 文章目录系列文章目录一、什么是 Node.js二、下载和安装 Node.js1、普通方式2、使用 nvm 安装三、Node.js 和 JavaScript 的区别1、ECMScript2、JavaScript3、node.js四、commonjs1、什么是 commonjs2、安装 lodash五、debugger六、server 开发和前端开发的区别一…

一个nginx部署多个应用及nginx总结

一、背景知识 1、Nginx是什么&#xff1f; &&#xff1a;Web服务器&#xff0c;静态文件保存、响应http请求。 同时可以提供代理、负载均衡的功能。 2、为什么使用&#xff1f; &&#xff1a;主要是轻量级和高性能&#xff0c;在一般行业不明显&#xff0c;但在互联…

使用docker快速搭建运维神器-spug

大家好&#xff0c;我是早九晚十二&#xff0c;目前是做运维相关的工作。写博客是为了积累&#xff0c;希望大家一起进步&#xff01; 我的主页&#xff1a;早九晚十二 什么是spug&#xff1f; 面向中小型企业设计的轻量级无 Agent 的自动化运维平台&#xff0c;整合了主机管理…

C++泛型编程:可变参数模板

最近在看有关智能指针源码的时候make_unique,make_shared(用来创建管理一个新对象)模板都是这么定义的 template<typename T, typename... Ts> std::unique_ptr<T> make_unique(Ts&&... params) {return std::unique_ptr<T>(new T(std::forward<…