Je voulais une richesse de couleurs similaire pour les éléments HTML, j'ai été surpris de découvrir que CSS supporte maintenant les couleurs hsl(), donc une solution complète pour moi est ci-dessous :
Voir aussi Comment générer automatiquement N couleurs "distinctes" ? pour plus d'alternatives similaires à celle-ci.
Edit : mise à jour sur la base de Version de @zei (avec l'orthographe américaine)
var stringToColor = (string, saturation = 100, lightness = 75) => {
let hash = 0;
for (let i = 0; i < string.length; i++) {
hash = string.charCodeAt(i) + ((hash << 5) - hash);
hash = hash & hash;
}
return `hsl(${(hash % 360)}, ${saturation}%, ${lightness}%)`;
}
// For the sample on stackoverflow
function colorByHashCode(value) {
return "<span style='color:" + stringToColor(value) + "'>" + value + "</span>";
}
document.body.innerHTML = [
"javascript",
"is",
"nice",
].map(colorByHashCode).join("<br/>");
span {
font-size: 50px;
font-weight: 800;
}
En HSL, il s'agit de la teinte, de la saturation et de la luminosité. La teinte, comprise entre 0 et 359, permet d'obtenir toutes les couleurs, la saturation correspond à la richesse de la couleur, 100 % me convient. Et la luminosité détermine la profondeur, 50% est normal, 25% correspond aux couleurs sombres, 75% aux couleurs pastel. J'ai choisi 30% parce que c'est ce qui correspond le mieux à mon schéma de couleurs.