Opium.Fill - standardisation de la palette de couleurs à travers les yeux du programmeur

Visage bleu, les champignons poussent des yeux

Hey. Aujourd'hui, je vais vous montrer la palette de couleurs que j'utilise depuis 2 ans. Il a été inventé pour se débarrasser d'un grand nombre de variables en CSS sur un projet problématique. Et puis il s'est avéré que ces principes peuvent être appliqués à presque tous les projets.

En général, je vais essayer d'expliquer comment les concepteurs utilisent la couleur dans l'interface utilisateur et comment tout cela peut être «tapé» sans pousser les concepteurs dans des cadres serrés. Je vais donner des exemples d'implémentation sur React JS (pour le développeur) et sur Figma (pour le designer). Le schéma n'a pas de liaisons avec React et Figma, c'est juste que je les connais mieux.

Il n'y a rien de rusé et unique dans le schéma (peut-être juste un nom). Toutes les idées pendent dans l'air. Vous pouvez le considérer comme ma meilleure pratique pour travailler avec la couleur dans les applications. Opium.Fill - ce sont des principes généraux combinés avec l'amour pour donner des noms à tout.

Le système peut être utilisé conjointement avec Material Design.

L'article est écrit pour le développeur front-end et un peu pour le designer.

Table des matières


  1. Quels problèmes résolvons-nous
  2. Idéologie Opium.Fill
  3. Hypothèses de base
  4. Bloc n ° 1. Couleurs parentales
  5. Bloc n ° 2. Substitution
  6. Bloc n ° 3. Quartiers
  7. Inversion de couleur
  8. En utilisant
  9. Quand cela n'a aucun sens d'utiliser
  10. Critique
  11. Conclusion

Toutes les photos sont cliquables

1. Quels problèmes résolvons-nous?


1.1. 50 nuances de Grey


Tout le monde connaît probablement ce problème. Le plus souvent, il peut être vu sur des nuances de gris, mais avec d'autres couleurs (par exemple, le bleu), cela se produit. Où mettre, où utiliser? Même les concepteurs sont confus à ce sujet.

1.2. Le créateur joue avec les fleurs


Parfois, un designer peut livrer une nouvelle couleur simplement parce que l'ancienne est fatiguée et détestée (ou parce qu'il a raté une pipette). Il n'y a rien de mal à cela, vous n'avez pas besoin de blâmer le concepteur. Mais le problème est que le développeur n'est pas toujours au courant des changements.

Dans ce cas, de nombreuses variables de couleur s'accumulent. Après tout, le développeur ne comprend pas s'il est nécessaire de supprimer les anciennes couleurs ou si elles sont toujours utilisées quelque part. Parmi les projets que j'ai vus, le record est de 273 variables de couleur uniquement.

Une situation similaire peut se produire sur tous les projets où le travail est effectué sur Agile et la conception change simultanément avec le développement.

1.3. Thèmes nocturnes et design de marque


Ce problème découle du précédent. Si le projet comporte un grand nombre de variables désordonnées, il est difficile d'introduire de nouveaux schémas de couleurs.

Par exemple, vous travaillez sur la création de CRM. Et votre CRM donne au client la possibilité d'ajuster sa palette de couleurs à l'identité d'entreprise du client. Si vous n'avez pas de jeu de couleurs clair, ce sera difficile à faire.

Mais que faire si vous avez besoin d'un thème sombre pour l'application? Ensuite, la phrase «Vasily, prenons nos 273 variables et les systématisons» conduit au fait que Vasily a cassé le formulaire à la 10ème étape de remplissage de la candidature, s'est disputé avec le développeur du département voisin et est devenu fou une semaine plus tard.

2. L'idéologie de l'opium. Remplir


2.1. Ne dérangez pas le designer de travailler


Opium.Fill a été inventé pour «déchiffrer» le design, et non pour charger le designer. Le concepteur n'a pas besoin de connaître l'existence d'Opium.Fill pour tout faire selon le schéma.

Vous ne devez pas imposer un schéma de couleurs au concepteur et il vaut mieux attendre qu'il ait fini de dessiner le concept principal de l'application. Ce n'est qu'après cela qu'il est utile de lui montrer si quelque chose ne correspond pas au schéma de couleurs et de clarifier si ces endroits peuvent être corrigés. Sur 9 de ces questions sur 10, les concepteurs disent "Pf, ce n'est pas un problème, remplaçons-le" ou "Oh, et c'est généralement mon biseautage, merci de l'avoir remarqué."

2.2. Définissez les couleurs "à l'oeil"


Selon le tableau périodique, il est possible de prédire l'existence d'éléments non encore découverts. Pour cela, des cellules vides ont été pré-allouées. Nous utiliserons ce principe pour notre palette de couleurs. Faites un tableau et laissez certaines cellules vides. Mais pour le reste des paramètres, vous comprendrez même à l'oeil quelle couleur devrait être là.

tableau périodique


2.3. Ne vous découragez pas si tout ne se passe pas


Notre tâche consiste à optimiser la plus grande partie de la routine de travail avec la couleur. Si, en indiquant la couleur lors du développement de l'application, 1 fois sur 100 vous rencontrez quelque chose qui ne rentre pas dans le circuit, cela n'est pas considéré comme un problème.

3. Hypothèses de base


3.1. Pour chaque couleur - une paire


Nous pensons que chaque couleur a deux «incarnations». Le premier est saturé (conditionnellement fort). La seconde est insaturée (conditionnellement faible). Si nous voyons du bleu, en plus d'être bleu, nous devons le définir comme fort ou faible. Est-il saturé ou insaturé?

3.2. Divisez les couleurs par fonctionnalité


Oubliez "bleu ciel", "or", "noir de jais" et similaires dans les noms des couleurs. Le nom de la couleur doit refléter sa fonctionnalité, pas son hex. Maintenant, nous travaillons avec les noms suivants: Base, Faint, Accent, Complement, Critic, Warning, Success.

3.3. Trois blocs


Le bloc n ° 1 est le plus important. Le bloc numéro 3 est le plus insignifiant. Ci-dessous, je décrirai chacun des blocs. Cette séparation est nécessaire pour que les couleurs moins importantes pour dessiner l'interface nous distraient moins.

4. Numéro de bloc 1. Couleurs des parents


4.1. Noms


Retour à nos nouveaux noms de couleurs. Base, faible, accent, complément, critique, avertissement, succès. Prenons-le un à la fois.

Base


Il est noir et blanc. Ou ces couleurs qui leur sont semblables à un certain degré de confusion. Ils sont basiques pour le texte et l'arrière-plan.

Couleurs noir et blanc


Perdre connaissance


Nous appelons donc des nuances de gris. Un texte d'arrière-plan ou un arrière-plan grisâtre est pâle. Le noir avec transparence (s'il est perçu comme gris) est également inclus ici.

Couleur grise ajoutée


Accent


Il s'agit de la couleur d'entreprise principale ou de la couleur qui met en évidence les éléments les plus importants de l'interface. Par exemple, si vous regardez les banques russes, alors: Sberbank est vert, VTB est bleu (ou rouge, comme vous pouvez le voir), Tinkoff est jaune, Alpha est rouge. Pour plus de commodité, faisons référence aux nuances de bleu dans notre tableau sous Accent.

Couleur bleue ajoutée


Complément


Il s'agit d'une couleur d'accent en option. Tout le monde ne l'a pas. Regardons Airbnb - je dirais qu'il est vert foncé: pour notre commodité, je vais indiquer Complément en violet, il nous sera utile dans les exemples de design que je vais montrer ci-dessous.

Violet ajouté




Screen Airbnb


Critique


Couleur pour mettre en évidence les erreurs et autres informations extrêmement importantes. Habituellement quelque chose de rouge.

Couleur rouge ajoutée



Attention


Si vous souhaitez partager des informations critiques avec une autre, également importante, mais pas mortelle, un avertissement est nécessaire. Habituellement, c'est une sorte de jaune-orange.

Couleur orange ajoutée


Succès


Parfois, une action réussie suffit pour montrer la couleur Accent. Mais si Accent est d'une couleur inhabituelle (rouge) ou pour une raison quelconque, vous souhaitez introduire une nouvelle couleur, voici le succès. Très probablement, il se révélera verdâtre. 7 noms de couleurs de base ont été publiés. Il n'est pas nécessaire de les utiliser tous. Et bien sûr, vous pouvez compléter l'ensemble si vous avez une raison sérieuse à cela.

Vert ajouté




4.2. Familles de couleurs


Vous avez probablement déjà remarqué que lorsque je parle de couleur, je n’indique pas de signification spécifique, mais j’utilise les mots «nuances de gris», «quelque chose de rouge», «verdâtre», etc. Ce n’est pas juste comme ça. Introduisons le concept de «famille de couleurs».

Comme je l'ai dit ci-dessus, nous divisons les couleurs par paires. Just Accent ne peut pas exister. Assurez-vous d'avoir Accent fort et Accent faible. Ce sont toujours exactement les deux couleurs qui forment la base de la famille. Comme papa et maman. Imaginons un instant que nos couleurs soient un couple marié. Supposons que le sexe des parents importe peu, l'essentiel est que l'un soit fort (fort) et le second - faible (faible). Et nous accepterons également que la force et la faiblesse sont des traits de caractère, comme le tempérament rapide et le calme.

Gauche fort, droit faible




Alors voilà. Papa est colérique. Il est souvent nerveux dans les embouteillages et donne des coups de pied aux hérissons dans la forêt. Maman est calme. Elle travaille comme psychologue et joue au poker. C'est la base de notre palette de couleurs.

Les couleurs de base sont déjà divisées (noir et blanc). Répartissez le reste en familles:

Toutes les couleurs sont divisées en 2. L'une est saturée, la seconde est à peine perceptible.


5. Bloc n ° 2. Remplacement


5.1. Le contexte


Jetez un œil à Bitbucket. Ensuite, le concepteur a considéré que la couleur bleue, qui est à l'arrière gauche, est un peu sombre pour le texte. Et donc il l'a éclairé. Maintenant, tout le texte, bien qu'il ait l'air bleu (comme un menu latéral), a en fait une signification différente en hexadécimal: Toute couleur a un contexte dans lequel elle est utilisée. La couleur peut être appliquée à l'arrière-plan, au texte, aux lignes, aux icônes. C'est ce que nous appelons le contexte. Dans tous ces cas, la couleur peut devoir être modifiée d'une manière ou d'une autre, afin de mieux s'adapter au contexte. Nous appelons ce changement la substitution . Nous sélectionnons une place dans le tableau pour les substitutions. Chaque nouvelle ligne est un contexte auquel nous pouvons ajouter des substitutions. Par défaut, il y aura des cellules vides:

Écran Bitbucket






La même liste de couleurs, divisée en deux, mais des lignes supplémentaires ont été ajoutées en dessous.  Nous l'appellerons une table.


Nous avons ajouté des cellules de substitution uniquement pour les couleurs fortes. Les couleurs faibles du bloc 2 montrent à quoi ressemble cette couleur sur un fond sombre. Nous ne les toucherons pas, mais à la fin, nous y reviendrons.

Si la substitution n'est pas remplie, la couleur du texte, des icônes et de tout le reste
est extraite du bloc n ° 1.
Remarque. Nous ne pouvons remplacer les couleurs que dans les éléments de conception primitifs. Cet ensemble est pris près de 1: 1 des éditeurs graphiques utilisés par les designers. Là, vous pouvez dessiner un rectangle (arrière-plan), ajouter un bloc de texte, tracer une ligne ou ajouter une forme inhabituelle, comme un astérisque (lire l'icône).

5.2. Fantaisie


Il existe un autre type spécial de substitution - la substitution du gradient. Nous appelons les dégradés le mot fantaisie - contexte pour une «occasion spéciale». La fantaisie est un pour tous. Il ne peut pas y avoir de dégradé séparé pour le texte, les icônes, etc. (en théorie, bien sûr, cela peut, mais cela ne vaut pas la peine de rendre le tableau plus difficile à cause d'un cas aussi rare). Soulignons la place en bas du tableau pour Fancy: Nous nous sommes préparés aux changements en fonction du contexte, les concepteurs le font à 100%. Les cellules vides nous donnent une certaine flexibilité. Parfois, les substitutions doivent être effectuées plus souvent, parfois moins souvent. Si le bloc numéro 2 reste presque vide, c'est normal (le designer essaie aussi de réduire le nombre de couleurs).

Une autre ligne ajoutée au tableau




6. Numéro de bloc 3. Quart de travail


Parfois, la couleur doit être légèrement assombrie ou éclaircie. Mais ce n'est pas parce que le contexte a changé, mais simplement que chaque couleur a deux états supplémentaires: "plus sombre" et "plus clair". Le plus souvent, les concepteurs l'utilisent pour effectuer une réaction de survol. Nous appelons ce changement de couleur Shift. Vous pouvez faire un décalage vers le haut (plus sombre) ou vers le bas (plus clair). Une table vide ressemble maintenant à ceci:

Ci-dessus est une couleur sombre.  Down - light




Tableau, mais maintenant chaque couleur a des cellules supplémentaires en haut et en bas


7. Inversion des couleurs


Je n'en ai pas délibérément parlé tout de suite, car c'est rare et tout le monde n'en a pas besoin. Parfois, vous voulez écrire quelque chose sur un substrat sombre, mais toutes les couleurs ne sont pas adaptées à cela. Regardons un exemple de l'un de nos modèles: il y a du texte sur une plaque bleue, qui est subjectivement perçu comme faible. Et il y a des cercles sous les icônes que je définirais également dans la famille Faint.  Si le dé était léger, ces deux éléments seraient très probablement gris. Mais le dé est sombre. Il n'y a pas de couleurs assorties dans notre tableau, vous pouvez les ajouter. Juste pour cela, vous avez besoin de la colonne Faible dans le bloc n ° 2. Pour cette disposition, le tableau ressemble à ceci:

Conception d'applications bancaires mobiles








Dans le tableau, une autre partie des cellules est remplie, la majorité reste vide


Veuillez noter que maintenant les lignes seront dessinées avec un briquet Faint Strong plus léger, cela se reflète également dans le tableau. Également ajouté des dégradés pour Accent et des décalages pour le parent Faint (ils sont utiles pour dessiner un champ de recherche).
Remarque. Pas besoin de confondre inversion et thème nocturne. Le thème de la nuit a beaucoup de ses nuances de couleur. Il est donc préférable de créer un tableau séparé pour celui-ci.

8. Utilisation


8.1. CSS, React


Essayons de dessiner un tel bouton. En CSS pur, les variables peuvent être organisées comme suit:

Bouton




:root {
  /*   */

  --base-strong: #000;
  --base-weak: #fff;

  --faint-strong: #8994A6;
  --faint-weak: #F6F8FB;

  --accent-strong: #0070FF;
  --accent-weak: #EBF4FF;

  --complement-strong: #8889E2;
  --complement-weak: #EEECFD;

  --critic-strong: #F74545;
  --critic-weak: #FDEDED;

  --warning-strong: #F8AE4F;
  --warning-weak: #FCEBCF;

  --success-strong: #27AE60;
  --success-weak: #DEF8E9;

  /* C   */
  --faint-strong-down: #A5ADBB;
  --faint-weak-up: #ECEEF5;
}

/*  */
/*      */

.back {
  --faint-weak: rgba(255, 255, 255, 0.15);
}

.text {
  --faint-weak: rgba(237, 241, 247, 0.5);
}

.line {
  --faint-strong: #EDEFF2;
}

.icon {}

.fancy {
  --accent-strong: linear-gradient(132deg, #3F89EE, #5447FF);

  /*  */
  --accent-strong-down: linear-gradient(132deg, #448FF3, #594CFF);
}


/*   */

.button {
  background: var(--accent-strong);
  color: var(--base-weak);
  /*    */
}

.button:hover {
  background: var(--accent-strong-down);
}

Et puis, pour créer un bouton en HTML, vous devrez ajouter un tel balisage:

<button class="fancy button">
  <div class="text">
    Hello Button
  </div>
</button>

Il n'y a aucun moyen en CSS pour suivre nativement un contexte, et vous devez ensuite le spécifier manuellement via les classes. Vous pouvez, bien sûr, essayer de comprendre le contexte des balises utilisées, mais cette décision n'est pas pour tout le monde.

Sur React, le code pourrait ressembler à ceci:

class Button extends React.Component {
  render() {
    return (
      <Box fill="accentStrong" fancy className="button">
        <Font fill="baseWeak">Hello Button</Font>
      </Box>
    )
  }
}

//   
class Button extends React.Component {
  render() {
    return (
      <Box.Accent fancy className="button">
        <Font>Hello Button</Font>
      </Box.Accent>
    )
  }
}

// Box  Font —    ,     

//        Strong  Weak (      )
//       
//      

//    ,   
// ,    
//     ,     Opium.Fill
//       

//   'button'     
//      

Afin de ne pas être lié au CSS (vous ne faites pas que des applications pour le navigateur), les variables de couleur peuvent être stockées dans json:

{
  "color": {
    "parents": {
      "baseStrong": "#000",
      "baseWeak": "#fff",

      "faintStrong": {
        "default": "#8994A6",
        "shiftDown": "#A5ADBB"
      },
      "faintWeak": {
        "default": "#F6F8FB",
        "shiftUp": "#EDEFF2"
      },

      "accentStrong": "#0070FF",
      "accentWeak": "#EBF4FF",

      "complementStrong": "#8889E2",
      "complementWeak": "#EEECFD",

      "criticStrong": "#F74545",
      "criticWeak": "#FDEDED",

      "warningStrong": "#F8AE4F",
      "warningWeak": "#FCEBCF",

      "successStrong": "#27AE60",
      "successWeak": "#DEF8E9"
    },

    "context": {
      "back": {
        "faintWeak": "rgba(255, 255, 255, 0.15)"
      },

      "text": {
        "faintWeak": "rgba(237, 241, 247, 0.5)"
      },

      "line": {
        "faintStrong": "#EDEFF2"
      },

      "icon": {},

      "fancy": {
        "accentStrong": {
          "default": "linear-gradient(132deg, #3F89EE, #5447FF)",
          "shiftDown": "linear-gradient(132deg, #448FF3, #594CFF)"
        }
      }
    }
  }
}

8.2. Jeu de couleurs dans Figma


Il me semble qu'il sera juste de diviser les couleurs en contextes pour que les noms de contexte soient visibles. Et ajoutez des décalages à la toute fin de ces blocs. Si le changement n'est vraiment utilisé que pour le haver, vous ne devriez même pas l'ajouter à la palette afin qu'il ne vous distrait pas une fois de plus.

Liste des couleurs Figma


9. Quand cela n'a aucun sens d'utiliser le système


9.1. Projet de conception inhabituel


Opium.Fill est conçu pour que les couleurs de base soient en noir et blanc (ou celles qui leur sont subjectivement similaires au point de confusion). Si vous avez besoin d'écrire beaucoup de bleu et de rouge ou d'utiliser constamment une variété de couleurs dans une seule interface, alors Opium.Fill n'est pas la meilleure solution.

9.2. Petit projet


Pour un petit projet, il n'est tout simplement pas logique d'introduire une sorte de système. Il sera plus rapide de jeter toutes les couleurs de compteur dans des variables à mesure qu'elles deviennent disponibles, mais il est préférable d'utiliser la liste reçue du concepteur. Et parfois, tout est si simple que vous pouvez directement définir les couleurs dans les styles afin de ne pas vous tromper.

9.3. Vous utilisez déjà autre chose


Si votre équipe utilise Material Design (et pas seulement) et que tout le monde est satisfait de tout, il est inutile de changer ou d'ajuster ce qui fonctionne.

10. Critique


Voici quelques problèmes fréquemment exprimés avec Opium.Fill. Je vais essayer de répondre à certaines des revendications. Vous pouvez considérer cela comme un sujet ouvert. Si quelqu'un rencontre des difficultés, je serai heureux si vous partagez avec moi.

10.1. Il y a encore beaucoup de variables


Le lecteur curieux a déjà calculé que nous avons des cellules pour 252 variables. Quoi de mieux que ce qui était au début?

Je peux vous assurer que toutes ces couleurs ne seront jamais utilisées en même temps. Il y a une place pour eux, mais ce sont des cellules vides, comme des éléments non découverts dans le tableau périodique. Sur des projets réels, nous parvenons à «ouvrir» jusqu'à 30 éléments.

Si plus de 50 pièces s'accumulent dans votre table, alors quelque chose va probablement mal et le schéma, malheureusement, n'aide pas à le réparer.

10.2. Pour remplir les graphiques, vous devez agrandir considérablement le tableau.


Si vous avez beaucoup de graphiques ou si vous devez colorer des catégories de produits de différentes couleurs (et il y a, par exemple, 20 pièces), vous devrez ajouter de nouvelles familles de couleurs. Sept pièces que j'ai décrites ci-dessus ne suffisent pas.

10.3. Pourquoi ajouter des substitutions si en théorie tous les besoins peuvent être couverts par des quarts?


Je pars de l'idée que les substitutions contextuelles sont une explication plus «de haut niveau» de la façon dont un designer utilise les couleurs. Et donc les substitutions sont plus faciles à comprendre et à utiliser.

Les décalages sont utiles pour les fleurs rares, il est préférable de les remplir dans les cas:

  1. Gestion des événements (comme un Haver ou un clic)
  2. Lorsque vous avez besoin d'un spectre supplémentaire de nuances de gris

Conclusion


Le concept est apparu début 2018 et n'a pas beaucoup changé depuis lors. Dans mon organisation préférée, nous avons implémenté Opium.Fill à la fois dans la conception et le développement. Parfois, il était nécessaire de mettre en œuvre la conception faite par d'autres équipes (d'autres organisations), mais cela n'interférait pas avec l'utilisation du jeu de couleurs, nous avons rencontré des difficultés, mais nous avons réussi à les résoudre. Certains projets sont déjà entrés en production.

Si le sujet de la gestion des couleurs d'un projet est proche de vous, il peut être intéressant de lire d'autres options: Material Design , Atlassian Design

remercier


Nous avons élaboré un plan et écrit un article - Denis Elianovsky, équipe JTC.
Illustration dans l'en-tête - Elena Efimova

All Articles