Pourquoi ne HTML penser “chucknorris” est une couleur?
Comment certaines chaînes aléatoires produire des couleurs lors de la saisie que les couleurs d'arrière-plan en HTML? Par exemple:
HTML:
<body bgcolor="chucknorris"> test </body>
...produit un document avec un fond rouge dans tous les navigateurs et plates-formes.
Fait intéressant, alors que chucknorri
produit un arrière-plan rouge ainsi, chucknorr
produit un arrière-plan jaune.
Ce qui se passe ici?
- Comme une note de côté: ne pas utiliser
bgcolor
. Utiliser les CSSbackground
. - Pourquoi avez-vous jamais eu envie d'ajouter une couleur d'arrière-plan appelé
chucknorris
? Ce qui était attendu de la couleur? - Je ne sais pas pourquoi mon commentaire sous la accepté réponse a été supprimé pour ne pas être de "constructif", parce que cela répond à votre question tout à fait bien: les gens d'expérimenter ces choses tout le temps. Je n'avais que 10 ans quand j'ai découvert ce que je faisais à l'époque était de déconner et de voir ce qui s'est passé. Vous n'avez pas toujours besoin d'avoir une raison pratique pour faire quelque chose, surtout quelque chose d'aussi futile que cela.
- et
<body bgcolor="stevensegal">
test </body> est vert
Vous devez vous connecter pour publier un commentaire.
C'est un vestige de Netscape jours:
C'est à partir de l'article du blog Un petit coup de gueule à propos de Microsoft Internet Explorer est la couleur de l'analyse qui couvre en détail, y compris les différentes longueurs des valeurs de couleur, etc.
Si l'on applique les règles à son tour à partir du blog, nous avons d'obtenir les éléments suivants:
Non valide, remplacer tous les caractères hexadécimaux avec des 0
Pad à la prochaine nombre total de caractères divisible par 3 (11 -> 12)
Divisés en trois groupes égaux, chaque composante représente la couleur correspondante composant d'une couleur RVB:
Tronquer chacun des arguments de la droite à deux caractères
Qui donne le résultat suivant:
Voici un exemple illustrant la
bgcolor
attribut dans l'action, pour produire cette "incroyable" échantillon de couleur:HTML:
Cela répond également à l'autre partie de la question; pourquoi ne
bgcolor="chucknorr"
produire une couleur jaune? Eh bien, si on applique les règles, la chaîne est:Qui donne une lumière jaune couleur de l'or. Que la chaîne de caractères commence par 9 caractères, nous gardons le deuxième C cette fois-ci donc, il se retrouve dans la dernière valeur de couleur.
J'ai d'abord rencontré quand quelqu'un a fait remarquer que vous pourriez faire
color="crap"
et, bien, il sort brun.0F6
devient#00FF66
, pas#000F06
.<body bgcolor=error><h1 style=text-align:center>Error: Not Found<h1></span>
Vous pouvez ajouter un div avec anothe arrière-plan ou quelque chose comme ça, donc ce n'est pas qu'esthétique choquant.f05
dans l'un de vos canaux,0xf0 / 0xff
est beaucoup plus proche que0x05/0xff
à0xf05 / 0xfff
td[bgcolor="chucknorris"] {...}
).div color="crap"
est, en effet, d'une couleur brunâtre à old-skool HTML4 (si vous pouvez trouver un navigateur qui va encore rendre 🙂rgb(192, 192, 0)
<body bgcolor="dog">
: html.spec.whatwg.org/multipage/...Je suis désolé d'être en désaccord, mais selon les règles de l'analyse d'un héritage de valeur de couleur posté par @Yuhong Bao,
chucknorris
N'est PAS synonyme de#CC0000
, mais plutôt à#C00000
, très similaire, mais légèrement différente teinte de rouge. J'ai utilisé le Firefox ColorZilla add-on pour vérifier cela.Les règles de l'état:
chucknorris0
chuc knor ris0
ch kn ri
C0 00 00
J'ai été en mesure d'utiliser ces règles pour interpréter correctement les chaînes de caractères suivantes:
LuckyCharms
Luck
LuckBeALady
LuckBeALadyTonight
GangnamStyle
Mise à JOUR: L'original answerers qui a dit que la couleur était
#CC0000
ont depuis modifié leurs réponses à inclure la correction.adamlevine
ne fonctionne que par jsfiddle.net/LdyZ8/2959 mais les lettres sont bloqués dansada00e000e
qui est rembourré pourada00e000e00
mais alors réduite à la moyenne HEXAGONALE de 6 chiffres de la valeur de[ad]a0[0e]00[0e]00
rendant ainsi ad0e0e qui apparaît dans le jsfiddle ci-dessus.La plupart des navigateurs ignorent tout simplement les NON-valeurs hexadécimales dans votre chaîne de couleur, la substitution non-hex chiffres avec des zéros.
ChuCknorris
se traduit parc00c0000000
. À ce stade, le navigateur va diviser la chaîne en trois sections égales, indiquant Rouge, Vert et Bleu valeurs:c00c 0000 0000
. Des bits supplémentaires dans chaque section seront ignorés, ce qui rend le résultat final#c00000
qui est d'une couleur rougeâtre.Remarque, ce n' pas s'appliquent aux couleurs CSS analyse, qui suivent le CSS standard.
HTML:
bgcolor
attribut.Le navigateur tente de convertir
chucknorris
en hex code de couleur, parce que ce n'est pas une valeur valide.chucknorris
, tout saufc
n'est pas une valeur hexadécimale.c00c00000000
.Cela semble être un problème surtout avec Internet Explorer et Opéra (12) du Chrome (31) et Firefox (26) juste l'ignorer.
P. S. Les chiffres entre parenthèses sont les versions de navigateur, j'ai testé sur.
.
Sur une note plus légère
La raison en est que le navigateur ne peut pas comprendre et essayer de faire en quelque sorte la traduire de ce qu'il peut comprendre et dans ce cas, la valeur hexadécimale!...
chucknorris
commence avecc
qui est reconnu caractère en hexadécimal, c'est aussi la conversion de tous les caractères non reconnus dans0
!Donc
chucknorris
au format hexadécimal devient:c00c00000000
, tous les autres personnages deviennent0
etc
reste à l'endroit où ils sont...Maintenant ils sont divisés par 3 pour
RGB
(rouge, vert, bleu)...R: c00c, G: 0000, B:0000
...Mais nous savons hexadécimal valide pour le RVB est à seulement 2 personnages, des moyens
R: c0, G: 00, B:00
De sorte que le résultat réel est:
J'ai également ajouté les étapes dans l'image comme une référence rapide pour vous:
Le WHATWG HTML spec a l'exacte algorithme pour l'analyse d'un héritage de valeur de couleur:
https://html.spec.whatwg.org/multipage/infrastructure.html#rules-for-parsing-a-legacy-colour-value
Le code de Netscape Classique utilisé pour l'analyse de la couleur des cordes est open source:
https://dxr.mozilla.org/classic/source/lib/layout/layimage.c#155
Par exemple, notez que chaque personnage est interprété comme un chiffre hexadécimal, puis est déplacé dans un entier de 32 bits sans vérification de débordement. Seulement huit chiffres hexadécimaux fit en un entier de 32 bits, c'est pourquoi seuls les 8 derniers caractères sont pris en compte. Après l'analyse des chiffres hexadécimaux en entiers 32 bits, ils sont ensuite tronqué en 8-bits entiers en les divisant par 16 jusqu'à ce qu'ils s'insèrent dans 8-bit, qui est pourquoi les zéros non significatifs sont ignorés.
Mise à jour: ce code ne correspond pas exactement à ce qui est défini dans la spécification, mais la seule différence qu'il y est quelques lignes de code. Je pense que ce sont ces lignes qui a été ajouté (dans Netscape 4):
Réponse:
c
est la seule valable hex caractère dans chucknorris, la valeur se transforme en:c00c00000000
(0 pour toutes les valeurs qui étaient invalides).Red = c00c
,Green = 0000
,Blue = 0000
.c00000
qui est une brique rougeâtre tons de couleur.chucknorris est stats avec c le navigateur de lire une valeur hexadécimale.
Le navigateur
chucknorris
convertirc00c00000000
valeur hexadécimale.Puis
c00c00000000
valeur hexadécimale convertir RVB format(divisé par 3)Le navigateur doit seulement 2 chiffres pour indiquer la couleur.
enfin, montrer
bgcolor = c00000
dans un navigateur web.Voici un exemple qui démontre la
HTML:
La règles pour l'analyse des couleurs sur l'héritage des attributs implique des étapes supplémentaires que ceux mentionnés dans les réponses existantes. Le tronquer composant à 2 chiffres de la partie est décrite comme suit:
Quelques exemples:
Ci-dessous est une mise en œuvre partielle de l'algorithme. Il ne gère pas les erreurs ou les cas où l'utilisateur entre un valide couleur.
JS:
CSS:
HTML: