Convention générale


Conventions générales

Organisation du code

  • Organiser les segments de code en unités de composants ;
  • Développer des spécifications de commentaires cohérentes
  • Blocs de composants et blocs de sous-composants et Blocs de déclaration< ; /code> Code> est séparé par une ligne vide et les blocs de sous-composants sont séparés par trois lignes vides 组件块和子组件块以及声明块之间使用一空行分隔,子组件块之间三空行分隔;
  • 如果使用了多个 CSS 文件,将其按照组件而非页面的形式分拆,因为页面会被重组,而组件只会被移动;

良好的注释是非常重要的。请留出时间来描述组件(component)的工作方式、局限性和构建它们的方法。不要让你的团队其它成员 来猜测一段不通用或不明显的代码的目的。

提示:通过配置编辑器,可以提供快捷键来输出一致认可的注释模式。

/* ==========================================================================
   组件块
 ============================================================================ */

/* 子组件块
 ============================================================================ */
.selector {
  padding: 15px;
  margin-bottom: 15px;
}

/* 子组件块
 ============================================================================ */
.selector-secondary {
  display: block; /* 注释*/
}

.selector-three {
  display: span;
}

Class 和 ID

  • 使用语义化、通用的命名方式;
  • 使用连字符 - 作为 ID、Class 名称界定符,不要驼峰命名法和下划线;
  • 避免选择器嵌套层级过多,尽量少于 3 级;
  • 避免选择器和 Class、ID 叠加使用;

出于性能考量,在没有必要的情况下避免元素选择器叠加 Class、ID 使用。

元素选择器和 ID、Class 混合使用也违反关注分离原则。如果HTML标签修改了,就要再去修改 CSS 代码,不利于后期维护。

/* Not recommended */
.red {}
.box_green {}
.page .header .login #username input {}
ul#example {}

/* Recommended */
#nav {}
.box-video {}
#username input {}
#example {}

声明块格式

  • 选择器分组时,保持独立的选择器占用一行;
  • 声明块的左括号 { 前添加一个空格;
  • 声明块的右括号 } 应单独成行;
  • 声明语句中的 : 后应添加一个空格;
  • 声明语句应以分号 ; 结尾;
  • 一般以逗号分隔的属性值,每个逗号后应添加一个空格;
  • rgb()rgba()hsl()hsla() 或 rect() 括号内的值,逗号分隔,但逗号后不添加一个空格;
  • 对于属性值或颜色参数,省略小于 1 的小数前面的 0 (例如,.5 代替 0.5-.5px 代替-0.5px);
  • 十六进制值应该全部小写和尽量简写,例如,#fff 代替 #ffffff
  • 避免为 0 值指定单位,例如,用 margin: 0; 代替 margin: 0px;
  • Si plusieurs fichiers CSS sont présents ; utilisé, divisez-le en composants plutôt qu'en pages, car les pages seront réorganisées et les composants seront uniquement déplacés

Les bons commentaires sont très importants ; Veuillez prévoir du temps pour décrire le fonctionnement des composants, leurs limites et comment les construire. Ne laissez pas les autres membres de votre équipe deviner le but d'un morceau de code qui n'est ni général ni évident.

Astuce : en configurant l'éditeur, des touches de raccourci peuvent être fournies pour générer des modèles de commentaires convenus.

/*  Not recommended  */
.selector, .selector-secondary, .selector[type=text] {
  padding:15px;
  margin:0px 0px 15px;
  background-color:rgba(0, 0, 0, 0.5);
  box-shadow:0px 1px 2px #CCC,inset 0 1px 0 #FFFFFF
}

/* Recommended */
.selector,
.selector-secondary,
.selector[type="text"] {
  padding: 15px;
  margin-bottom: 15px;
  background-color: rgba(0,0,0,.5);
  box-shadow: 0 1px 2px #ccc, inset 0 1px 0 #fff;
}

Classe et ID

Utilisez une dénomination sémantique et universelle ;

Utilisez des traits d'union - comme délimiteurs d'ID et de nom de classe, n'utilisez pas de dénomination en casse chameau et de traits de soulignement ;

🎜Évitez trop de niveaux imbriqués de sélecteurs. plus de 3 niveaux ; 🎜🎜Évitez l'utilisation de sélecteurs avec classe et identifiant 🎜🎜🎜Pour Considérations sur les performances, évitez d'utiliser des sélecteurs d'éléments superposés à la classe et à l'ID lorsque cela n'est pas nécessaire. 🎜🎜L'utilisation mixte de sélecteurs d'éléments, d'identifiants et de classes viole également le principe de séparation des préoccupations. Si la balise HTML est modifiée, le code CSS doit être à nouveau modifié, ce qui n'est pas propice à une maintenance ultérieure. 🎜
.declaration-order {
  /* Positioning */
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 100;

  /* Box model */
  display: block;
  box-sizing: border-box;
  width: 100px;
  height: 100px;
  padding: 10px;
  border: 1px solid #e5e5e5;
  border-radius: 3px;
  margin: 10px;
  float: right;
  overflow: hidden;

  /* Typographic */
  font: normal 13px "Helvetica Neue", sans-serif;
  line-height: 1.5;
  text-align: center;

  /* Visual */
  background-color: #f5f5f5;
  color: #fff;
  opacity: .8;

  /* Other */
  cursor: pointer;
}
🎜Format du bloc de déclaration🎜🎜🎜Lors du regroupement des sélecteurs, gardez les sélecteurs indépendants occupant une ligne ; 🎜🎜Ajoutez un espace avant le crochet gauche du bloc de déclaration { ; le bloc } doit être sur une ligne séparée ; 🎜🎜Un espace doit être ajouté après : dans l'instruction de déclaration 🎜🎜L'instruction de déclaration doit se terminer par un point-virgule ; ;; 🎜 🎜Généralement, pour les valeurs d'attribut séparées par des virgules, un espace doit être ajouté après chaque virgule 🎜🎜rgb(), rgba(), hsl(), hsla() ou rect() Valeurs entre parenthèses, séparées par des virgules, mais sans ajouter d'espace après la virgule ; 🎜🎜Pour les valeurs d'attribut ou les paramètres de couleur, omettez 0 devant les décimales inférieures à 1 (par exemple, .5 au lieu de 0.5 ; -.5px au lieu de -0.5px ); 🎜🎜Les valeurs hexadécimales doivent être toutes en minuscules et abrégées autant que possible, par exemple #fff > au lieu de #ffffff ; 🎜🎜Évitez de spécifier des unités pour les valeurs 0, par exemple, avec margin : 0 ; au lieu de margin : 0px ; 🎜🎜
/* Not recommended */
@import url(//www.google.com/css/maia.css);

html {
  font-family: 'open sans', arial, sans-serif;
}

/* Recommended */
@import url("//www.google.com/css/maia.css");

html {
  font-family: "open sans", arial, sans-serif;
}

.selector[type="text"] {

}
🎜Ordre de déclaration🎜🎜Les attributs associés doivent être un groupe, ordre d'écriture de style recommandé🎜🎜1.Positionnement🎜 🎜2.Modèle de boîte🎜🎜3.Typographique🎜🎜4.Visuel🎜

Ceci est classé en premier car le positionnement peut supprimer des éléments du flux normal de documents et peut également remplacer les styles liés au modèle de boîte. Le modèle de boîte détermine la taille et l’emplacement des composants et vient donc en deuxième position.

Les autres propriétés n'affectent que l'intérieur du composant ou n'affectent pas les deux premiers groupes de propriétés, elles sont donc classées derrière.

.element { ... }
.element-avatar { ... }
.element-selected { ... }
@media (max-width: 768px) {
  .element { ...}
  .element-avatar { ... }
  .element-selected { ... }
}

Utilisez

url() pour les guillemets, les sélecteurs d'attributs et les valeurs d'attribut utilisant des guillemets doubles. Référence Citer la valeur de url() est-il vraiment nécessaire ?url() 、属性选择符、属性值使用双引号。 参考 Is quoting the value of url() really necessary?

rrreee

媒体查询(Media query)的位置

将媒体查询放在尽可能相关规则的附近。不要将他们打包放在一个单一样式文件中或者放在文档底部。如果你把他们分开了,将来只会被大家遗忘。

rrreee

不要使用 @import

与 <link> 相比,@import 要慢很多,不光增加额外的请求数,还会导致不可预料的问题。

替代办法:

  • 使用多个 元素;
  • 通过 Sass 或 Less 类似的 CSS 预处理器将多个 CSS 文件编译为一个文件;
  • 其他 CSS 文件合并工具;

参考 don’t use @import;

链接的样式顺序:

a:link -> a:visited -> a:hover -> a:active(LoVeHAte)

rrreee

Position de la requête média

Placez les requêtes média aussi près que possible des règles pertinentes. Ne les regroupez pas dans un seul fichier de style et ne les placez pas au bas du document. Si vous les séparez, ils ne seront oubliés de tous qu’à l’avenir.

  • Utilisez plusieurs éléments ;
  • Compilez plusieurs fichiers CSS en un seul fichier via un préprocesseur CSS comme Sass ou Less
  • Autres outils de fusion de fichiers CSS ; ;
La référence n'utilise pas @import;


Ordre de style des liens :

🎜a:link -> a:visited a: hover -> actif (LoVeHAte)🎜🎜Pas besoin d'ajouter le préfixe du fournisseur du navigateur🎜🎜Utilisez 🎜Autoprefixer🎜 pour ajouter automatiquement le préfixe du fournisseur du navigateur lors de l'écriture du CSS, utilisez directement le CSS standard. 🎜🎜Autoprefixer ajoute le préfixe du fournisseur du navigateur au code CSS correspondant en fonction des exigences de compatibilité via 🎜Puis-je utiliser🎜. 🎜🎜🎜🎜🎜🎜