Convertisseur HSL vers HWB
Décrivez une couleur comme une teinte mêlée de blanc et de noir : hsl(210, 80%, 45%) devient une blancheur de 9 % et une noirceur de 19 % sur la même teinte, soit hwb(210 9% 19%). Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- H
- 210
- S
- 80
- L
- 45
- W
- 9
- B
- 19
- Css
- hwb(210 9% 19%)
HSL décrit une couleur par la teinte sur la roue, la saturation comme le caractère vif du mélange, et la luminosité comme sa proximité du noir ou du blanc. HWB reprend cette même teinte, puis nomme combien de blanc et de noir se mêlent à la teinte pure. Les designers qui choisissent déjà les couleurs en HSL ont souvent besoin de HWB pour écrire les fonctions hwb() du CSS Color Module, parler aux outils d'illustration qui exposent des curseurs de blancheur et de noirceur, ou documenter un échantillon comme une teinte plus une ombre. Ce convertisseur prend la teinte en degrés de zéro à trois cent soixante et la saturation et la luminosité en pourcentages de zéro à cent, puis renvoie le triplet HWB correspondant avec une chaîne CSS hwb().
Comment HSL se projette sur teinte, blancheur et noirceur
La teinte est partagée par HSL et HWB : zéro degré est un rouge pur, cent vingt un vert pur, deux cent quarante un bleu pur, et trois cent soixante referme le cercle sur le rouge. HSL stocke ensuite la saturation comme l'ampleur dont un gris de la luminosité choisie est étiré vers la couleur pleinement chromatique à cette teinte, et la luminosité comme le mélange entre le noir à zéro pour cent, un ton moyen près de cinquante pour cent et le blanc à cent pour cent.
HWB nomme la même couleur comme une teinte pure mélangée à une quantité de blanc et une quantité de noir. Sur l'intervalle unitaire, le mapping est de forme fermée et n'a pas besoin d'un passage par le RGB entier : le chroma vaut un moins la valeur absolue de deux fois la luminosité moins un, le tout multiplié par la saturation ; la blancheur est la luminosité moins la moitié du chroma ; la noirceur est un moins la luminosité moins la moitié du chroma.
C'est la même chose que de prendre le canal RGB minimal comme blanc et un moins le canal RGB maximal comme noir, ce qui est la définition de HWB dans le CSS Color Module Level Four. Quand la saturation est nulle, le chroma disparaît, si bien que blancheur et noirceur deviennent des pourcentages complémentaires qui somment à cent et décrivent un gris, un noir ou un blanc.
Quand la luminosité est de cinquante pour cent et la saturation de cent pour cent, le chroma vaut un et le blanc comme le noir s'effondrent à zéro, ce qui est la teinte pure. La teinte doit se situer dans l'intervalle fermé de zéro à trois cent soixante ; saturation et luminosité doivent chacune se situer entre zéro et cent pour cent inclus.
Ce que vous envoyez et ce que vous recevez
Envoyez trois nombres finis sous les champs h, s et l. Le champ h est la teinte en degrés et est obligatoire ; il doit se situer entre zéro et trois cent soixante inclus parce que HSL et HWB partagent cet angle et que ce convertisseur n'inventera pas d'enroulement. Les champs s et l sont la saturation et la luminosité en pourcentages de zéro à cent.
Lorsque la saturation sort de zéro à cent, la réponse explique que s doit être un pourcentage dans cette bande fermée afin qu'un client puisse borner ou corriger le jeton avant de réessayer ; la même règle s'applique à la luminosité.
En cas de succès, la réponse renvoie les valeurs h, s et l nettoyées, indique la blancheur w et la noirceur b en pourcentages, imbrique l'objet hsl source et l'objet hwb résultat, émet une chaîne CSS imprimable de la forme hwb(H W% B%) et inclut une courte note de formule qui reformule les identités de chroma.
Les contrôles classiques incluent le bleu-cyan de ton moyen à teinte deux cent dix, saturation quatre-vingts et luminosité quarante-cinq, qui se projette sur neuf pour cent de blanc et dix-neuf pour cent de noir ; le rouge pur à teinte zéro, saturation cent et luminosité cinquante, qui se projette sur zéro de blanc et zéro de noir ; et n'importe quelle teinte à saturation nulle, qui s'effondre en un mélange achromatique dont la blancheur plus la noirceur valent cent.
Où la conversion HSL vers HWB apparaît dans le travail réel
Les design systems rédigent souvent les rampes de marque en HSL afin que les équipes produit puissent échelonner la luminosité pour un contraste accessible tout en gardant stables la teinte et une bande de saturation ; pourtant les feuilles de style modernes, les applications d'illustration et plusieurs sélecteurs natifs exposent désormais HWB, car mélanger une teinte pure avec du blanc et du noir correspond à la façon dont les peintres parlent de teintes et d'ombres.
Les ingénieurs front-end qui migrent un jeton de propriétés personnalisées hsl() vers hwb() ont besoin d'un oracle déterministe qui ne dépende pas de la sérialisation du style calculé d'un navigateur particulier. Les outils de visualisation de données et d'art génératif qui construisent des palettes catégorielles en faisant progresser la teinte à saturation et luminosité fixes doivent encore déverser du HWB lorsqu'un moteur de rendu ou un pipeline d'impression demande blancheur et noirceur plutôt qu'un troisième axe de luminosité.
Les cursus et les cours de bootcamp enseignent les modèles cylindriques côte à côte et ont besoin d'une clé de confiance unique pour les devoirs, qui corresponde aux identités du CSS Color Module plutôt qu'à une capture d'un sélecteur de couleur. Si vous avez ensuite besoin de HSL vers RGB, HSL vers HSV, d'une conversion multi-format HEX LAB CMYK ou de contrôles de contraste WCAG, traitez-les comme des intentions de recherche et des pages d'atterrissage distinctes plutôt que de surcharger cette page dédiée au convertisseur HSL vers HWB.
Cas d’usage
Jetons de design de HSL vers CSS hwb()
Convertissez des rampes de marque HSL en triplets teinte, blancheur et noirceur pour feuilles de style modernes, sélecteurs d'illustration et tableaux de documentation qui parlent HWB.
Documentation des teintes et des ombres
Exprimez un échantillon HSL comme une teinte pure mélangée de blanc et de noir afin que les revues de design parlent de teintes et d'ombres sans second modèle de couleur.
Questions fréquentes
Quelles plages acceptent teinte, saturation et luminosité ?
La teinte h doit être entre 0 et 360 degrés inclus. La saturation s et la luminosité l sont des pourcentages de 0 à 100.
La teinte change-t-elle entre HSL et HWB ?
Non. La teinte est partagée par les deux modèles et est copiée sans changement. Seules la blancheur et la noirceur sont calculées à partir de la saturation et de la luminosité.
Comment calcule-t-on la blancheur et la noirceur ?
Sur l'intervalle unitaire, le chroma C vaut (1 − |2L − 1|) · S. La blancheur est L − C/2 et la noirceur est 1 − L − C/2. Les résultats sont renvoyés en pourcentages de 0 à 100.
À quoi ressemble une chaîne CSS hwb() ?
Le champ css est une chaîne du Color Module telle que hwb(210 9% 19%). La teinte est l'angle partagé ; les deux pourcentages sont la blancheur et la noirceur.
Combien coûte le convertisseur HSL vers HWB ?
L'outil du navigateur est gratuit et s'exécute en local.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/color/hsl-hwb \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"h":210,"s":80,"l":45}'const res = await fetch("https://api.kit.forhosting.com/color/hsl-hwb", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"h": 210,
"s": 80,
"l": 45
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/color/hsl-hwb",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"h": 210,
"s": 80,
"l": 45
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/color/hsl-hwb", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"h":210,"s":80,"l":45}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"h":210,"s":80,"l":45}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/color/hsl-hwb", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"h": 210,
"s": 80,
"l": 45
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "color.hsl_hwb",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Une saturation ou une luminosité hors des plages légales échoue avec une erreur invalid_input claire afin que les jetons erronés ne soient jamais écrêtés en silence.
Comment HSL se projette sur teinte, blancheur et noirceur
Le pipeline est une arithmétique flottante pure, sans graines aléatoires, sans horodatages d'horloge et sans appels réseau, de sorte que des entrées HSL identiques produisent toujours le même JSON. Les valeurs hors de ces bandes échouent avec invalid_input au lieu d'un enroulement silencieux ou d'un écrêtage sans préavis.
Ce que vous envoyez et ce que vous recevez
Champs manquants, chaînes vides, jetons non numériques, NaN et Infinity échouent avec invalid_input en nommant le champ et ne sont pas facturés. Le tarif des appels API réussis est la base publiée de $0.002 par élément ; les échecs de validation ne consomment pas le solde prépayé.
Où la conversion HSL vers HWB apparaît dans le travail réel
Les flux d'accessibilité qui ajustent la luminosité perçue en HSL puis passent la main à un éditeur fondé sur HWB ont encore besoin d'un mapping exact des canaux sans API réservées au navigateur. Comme cette capacité est un moteur de parse pur, le tarif API est la base publiée de $0.002 par élément réussi et une validation échouée ne consomme pas le solde.
Cas d'intégration
Fixtures massives de jetons et de cursus
Scriptez une conversion déterministe de HSL vers HWB pour fixtures de régression, corrigés et exports de palette avec une seule API à $0.002 par élément.