English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

规范编码 CSS Bootstrap

grammaire

  • Replace tabs (tab) with two spaces -- This is the only method that can ensure consistent display in all environments.
  • When grouping selectors, place each individual selector on a separate line.
  • To improve code readability, add a space before the left curly brace of each declaration block.
  • The right curly brace of the declaration block should be on a separate line.
  • Each declaration statement's : doit insérer un espace.
  • Pour obtenir des rapports d'erreur plus précis, chaque déclaration doit être sur une ligne séparée.
  • Toutes les déclarations doivent se terminer par un point-virgule. Le point-virgule après la dernière déclaration est optionnel, mais, si ce point-virgule est omis, votre code peut être plus sujet aux erreurs.
  • Pour les valeurs des attributs séparées par des virgules, une espace doit être insérée après chaque virgule (par exemple,box-ombre)
  • Ne pas utiliser rgb(),rgba(),hsl(),hsla() ou rect() valeurintérieurInsérez un espace après la virgule suivante pour les valeurs des attributs, par exemple, insérez un espace après la virgule pour distinguer plusieurs valeurs de couleurs (seulement des virgules, pas d'espaces).
  • Pour les valeurs des attributs ou les paramètres de couleur, omettez la virgule après < 1 Le zéro avant la virgule décimale (par exemple,.5 au lieu de 0.5;-.5px au lieu de -0.5px)
  • Les valeurs hexadécimales doivent être toutes en minuscules, par exemple,#fff。Lors de la lecture du document, les caractères minuscules sont plus faciles à distinguer car leur forme est plus facile à différencier.
  • Utilisez au maximum les valeurs hexadécimales abrégées, par exemple, utilisez #fff au lieu de #ffffff
  • Ajoutez des guillemets doubles aux propriétés du sélecteur, par exemple,input[type="text"]est optionnel dans certains cas, mais, pour une cohérence du code, il est recommandé de les inclure toutes avec des guillemets doubles.
  • Évitez d'indiquer des unités pour les valeurs 0, par exemple, utilisez marge: 0; au lieu de marge: 0px;

Si vous avez des doutes sur les termes utilisés ici, veuillez consulter Wikipedia Feuille de style en cascade - grammaire

/* Mauvais CSS */
.selector, .selector-secondaire, .selector[type=text] {
  padding:15px;
  marge:0px 0px 15px;
  fond-color:rgba(0, 0, 0, 0.5);
  box-ombre:0px 1px 2px #CCC,inset 0 1px 0 #FFFFFF
}
/* Bon CSS */
.selector,
.selector-secondaire,
.selector[type="text"] {
  padding: 15px;
  marge-bas: 15px;
  fond-color: rgba(0,0,0,.5);
  box-shadow: 0 1px 2px #ccc, inset 0 1px 0 #fff;
}

Ordre des déclarations

Les déclarations associées aux propriétés devraient être regroupées et organisées dans l'ordre suivant :

  • Positionnement
  • Modèle de boîte
  • Typographique
  • Visuel
  • En raison de la localisation (positionnement), les éléments peuvent être supprimés du flux de document normal et peuvent également couvrir les styles liés au modèle de boîte (box model), donc ils sont classés en premier. Le modèle de boîte est classé deuxième, car il détermine la taille et la position des composants.

    d'autres propriétés n'affectent que les composantsinterneou qui n'affecte pas les deux premiers groupes d'attributs, donc ils sont placés à la fin.

    La liste complète des attributs et leur ordre d'arrangement peuvent être consultés Retrait

    .déclaration-order {
      /* Positionnement */
      position: absolu;
      haut: 0;
      droite: 0;
      bas: 0;
      gauche: 0;
      z-index: 100;
      /* Boîte-modèle */
      affichage: bloc;
      flottant: à droite;
      width: 100px;
      height: 100px;
      /* Typographie */
      police: normal 13px "Helvetica Neue", sans-serif;
      ligne-height: 1.5;
      couleur: #333;
      texte-align: center;
      /* Visuel */
      fond-couleur: #f5f5f5;
      border: 1px solide #e5e5e5;
      bordure-radius: 3px;
      /* Divers */
      opacity: 1;
    }
    

    Ne pas utiliser @import

    et <link> par rapport aux balises@import Les instructions sont beaucoup plus lentes, non seulement augmentent le nombre de requêtes supplémentaires, mais peuvent également entraîner des problèmes imprévisibles. Les alternatives suivantes incluent :

    • Utiliser plusieurs <link> Élément
    • Compilez plusieurs fichiers CSS en un fichier unique à l'aide de préprocesseurs CSS tels que Sass ou Less.
    • Fonctionnalité de fusion de fichiers CSS fournie par Rails, Jekyll ou d'autres systèmes.

    Veuillez consulter Article de Steve SoudersEn savoir plus.

    <!-- Utiliser des éléments link -->
    <link rel="stylesheet" href="core.css">
    <!-- Éviter @imports -->
    <style>
      @import url("more.css");
    </style>
    

    Emplacement de la requête media (Media query)

    Placez les requêtes media à proximité des règles les plus pertinentes. Ne les regroupez pas dans un fichier de style unique ou à la fin du document. Si vous les séparez, ils seront bientôt oubliés. Voici un exemple typique.

    .element { ... }
    .element-avatar { ... }
    .element-selected { ... }
    @media (min-width: 480px) {
      .element { ...}
      .element-avatar { ... }
      .element-selected { ... }
    }
    

    Attributs précédés d'un préfixe

    Lorsque vous utilisez des attributs précédés d'un préfixe spécifique de fabricants, alignez chaque valeur d'attribut verticalement par indentation pour faciliter l'édition multiligne.

    Dans Textmate, utiliser Text → Edit Each Line in Selection (⌃⌘A). Dans Sublime Text 2 dans, utiliser Sélection → Ajouter une ligne précédente (⌃⇧↑) et Sélection → Ajouter une ligne suivante (⌃⇧↓)).

    /* Propriétés préfixées */
    .selector {
      -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.15);
              box-shadow: 0 1px 2px rgba(0,0,0,.15);
    }
    

    déclaration de règle en ligne unique

    PourNe contient qu'une seule déclarationdes styles, pour améliorer la lisibilité et faciliter la modification rapide, il est recommandé de placer les instructions sur la même ligne. Pour les styles avec plusieurs déclarations, il est toujours préférable de les diviser en plusieurs lignes.

    Cet objectif principal est la détection des erreurs -- Par exemple, le vérificateur CSS indique que dans 183 La ligne a une erreur de syntaxe. Si c'est une déclaration unique sur une ligne, vous ne passerez pas cette erreur ; si c'est plusieurs déclarations sur une ligne, vous devez analyser attentivement pour éviter de manquer des erreurs.

    /* Déclarations uniques sur une ligne */
    .span1 { width: 60px; }
    .span2 { width: 140px; }
    .span3 { width: 220px; }
    /* Déclarations multiples, une par ligne */
    .sprite {
      display: inline-block;
      width: 16px;
      height: 15px;
      fond-image: url(../img/sprite.png);
    }
    .icon           { background-position: 0 0; }
    .icon-home      { background-position: 0 -20px; }
    .icon-account   { background-position: 0 -40px; }
    

    Déclarations de propriétés de court format

    Lorsque vous devez définir toutes les valeurs explicitement, il est préférable de limiter l'utilisation des propriétés de court format. Les cas courants d'utilisation abusive des propriétés de court format sont les suivants :

    • padding
    • marge
    • font
    • fond
    • bordure
    • bordure-radius

    Dans la plupart des cas, nous n'avons pas besoin de spécifier toutes les valeurs pour les propriétés de court format. Par exemple, l'élément de titre HTML nécessite uniquement la définition des marges supérieure et inférieure (marge), donc, au besoin, il suffit de couvrir ces deux valeurs. L'utilisation excessive des propriétés de court format peut entraîner un code en désordre et entraîner des couvertures inutiles des valeurs des propriétés, ce qui peut causer des effets secondaires imprévus.

    MDN (Mozilla Developer Network) un excellent article surpropriétés de court format de l'article, est très utile pour les utilisateurs qui ne sont pas familiers avec les propriétés de court format et leur comportement.

    /* Mauvais exemple */
    .element {
      margin: 0 0 10px;
      background: red;
      fond: url("image.jpg");
      bordure-radius: 3px 3px 0 0;
    }
    /* Bon exemple */
    .element {
      marge-bas: 10px;
      fond-couleur: rouge;
      fond-image: url("image.jpg");
      bordure-haut-gauche-radius: 3px;
      bordure-haut-droite-radius: 3px;
    }
    

    Nesting dans Less et Sass

    Évitez les enchaînements inutiles. Cela est dû au fait que bien que vous puissiez utiliser des enchaînements, cela ne signifie pas que vous devriez utiliser des enchaînements. Utilisez les enchaînements uniquement lorsque vous devez limiter les styles à l'élément parent (c'est-à-dire les sélecteurs descendance) et qu'il existe plusieurs éléments nécessitant un enchaînement.

    // Sans nesting
    .table > thead > tr > th { … }
    .table > thead > tr > td { … }
    // Avec le nesting
    .table > thead > tr {
      > th { … }
      > td { … }
    }
    

    Commentaires

    Le code est écrit et entretenu par des humains. Assurez-vous que votre code est auto-descriptif, bien commenté et facile à comprendre pour d'autres. De bons commentaires de code peuvent transmettre des relations contextuelles et des objectifs du code. Ne répétez pas simplement les noms de composants ou de classes.

    Pour les commentaires longs, écrivez des phrases complètes ; pour les annotations générales, vous pouvez utiliser des phrases concises.

    /* Mauvais exemple */
    /* En-tête modal */
    .modal-header {
      ...
    }
    /* Bon exemple */
    /* Élément enveloppe pour .modal-titre et .modal-fermer */
    .modal-header {
      ...
    }
    

    Nom des classes

    • Les noms de classe ne peuvent contenir que des caractères minuscules et des tirets (dashe) (pas de traits de soulignement, ni de notation en camelCase). Les tirets doivent être utilisés pour nommer des classes liées (comme des espaces de noms) (par exemple,.btn et .btn-dangereux)
    • Évitez les abréviations trop arbitraires..btn représente boutonMais .s Ne doivent pas exprimer de sens.
    • Les noms de classe devraient être aussi courts que possible et clairs.
    • Utilisez des noms significatifs. Utilisez des noms organisés ou clairement définis, évitez les noms présentatifs (presentational).
    • Utilisez la classe parente la plus récente ou la classe de base (base) comme préfixe pour la nouvelle classe.
    • Utilisez .js-* Utilisez la classe pour identifier les comportements (par opposition aux styles) et n'incluez pas ces classes dans les fichiers CSS.

    Vous pouvez également vous référer aux normes énumérées ci-dessus pour nommer les variables Sass et Less.

    /* Mauvais exemple */
    .t { ... }
    .red { ... }
    .header { ... }
    /* Bon exemple */
    .tweet { ... }
    .important { ... }
    .tweet-header { ... }
    

    Sélecteurs

    • Utilisez des classes pour les éléments génériques pour optimiser les performances de rendu.
    • Évitez les sélecteurs attributaires pour les composants fréquents (par exemple,[class^="..."]). Les performances du navigateur peuvent être affectées par ces facteurs.
    • Les sélecteurs doivent être le plus courts possible et limiter au maximum le nombre d'éléments composant le sélecteur, il est recommandé de ne pas dépasser 3 。
    • SeulementLimitez les classes à l'élément parent le plus proche uniquement lorsque nécessaire (c'est-à-dire les sélecteurs descendants), par exemple, sans utiliser de class avec préfixe -- Les préfixes sont similaires aux espaces de noms).

    Lecture complémentaire :

    /* Mauvais exemple */
    span { ... }
    .page-container #stream .stream-item .tweet .tweet-header .username { ... }
    .avatar { ... }
    /* Bon exemple */
    .avatar { ... }
    .tweet-header .username { ... }
    .tweet .avatar { ... }
    

    Organisation du code

    • Organisez le code en fonction des composants.
    • Établissez une norme uniforme pour les commentaires.
    • Séparez le code en blocs avec des espaces blancs uniformes pour faciliter la lecture des documents volumineux.
    • Si plusieurs fichiers CSS sont utilisés, séparez-les en fonction des composants plutôt que des pages, car les pages seront restructurées, tandis que les composants ne seront que déplacés.
    /*
     * Titre de section du composant
     */
    .element { ... }
    /*
     * Titre de section du composant
     *
     * Parfois, vous devez inclure un contexte optionnel pour tout le composant. Faites-le ici si cela est important.
     */
    .element { ... }
    /* sous-composant contextuel-component ou modificateur */
    .element-heading { ... }
    

    Configuration de l'éditeur

    Configurez votre éditeur selon les paramètres suivants pour éviter les incohérences et les différences courantes dans le code :

    • Remplacez les tabulations par deux espaces (soft tab).-tab représente l'espacement avec des espaces).
    • Supprimez les espaces blancs à la fin du fichier lors de l'enregistrement
    • Définissez l'encodage du fichier en UTF-8。
    • Ajoutez une ligne blanche à la fin du fichier.

    Référez-vous au document et ajoutez ces informations de configuration au .editorconfig dans le fichier. Par exemple :Exemple .editorconfig dans Bootstrapà propos EditorConfig