为什么字体颜色属性中奇怪的东西会产生真实的颜色?

可能重复:
为什么HTML认为“chucknorris”是一种颜色?

我在教一个小朋友。 高中/高中的networking编程课程,我们从简单的元素和属性,如字体和颜色开始,然后再进入CSS。 我知道颜色已经过时,HTML5中不包含字体,但是为了教学目的,我觉得从简单的HTML标签开始,直到CSS,都很方便。 在课堂的第一个星期里,学生们能够在一个页面上改变颜色,从而获得很多乐趣。 (我也在第一周教他们select和眨眼,但是告诉他们,如果他们再次使用他们,他们会失分)。

其中一个学生开始用颜色属性值中奇怪的东西来提交作业,比如“Skittles”或“Spiderman”。 我开始尝试这个,发现在字体标签上joincolor =“”属性的任何东西都会产生某种颜色。 而且看起来,IE,Firefox,Chrome,Opera和Safari的最新版本的颜色是一致的。

我发现将“LuckyCharms”作为CSS颜色是行不通的。 它似乎只适用于HTML属性需要的颜色,例如font color =“LuckyCharms”或body bgcolor =“LuckyCharms”。

我正在向class级解释为什么会发生这种情况,到目前为止,我还没有弄清楚这一点,或者给Google一个很好的答案。 这似乎被解释为一个颜色代码,但我不知道如何。

更新:经过一些试验和错误,我已经确定了一个5步algorithm(使用提供的链接)几乎任何string转换成相应的hex颜色。 我将在这里提供algorithm来启发未来的访问者:

  1. 将每个非hex字符更改为0。
  2. 将0加到string中,直到其长度为3的倍数。
  3. 将string分成3个相等的部分。
  4. 当子string的长度大于2,并且所有三个子string都以0开始时,请删除每个string中的前导0。
  5. 如果子string的长度仍然大于2,则将每个子string截断为2个字符。

就这样,把子串放在一起,你有你的hex颜色代码。 我已经用大约20个不同的样本validation了这个algorithm,并使用Firefox ColorZilla附加颜色select器比较了结果。

请注意,在这种情况下,规则确实在其中一个答案中指定的链接中进行了明确说明,并且所有浏览器都将遵守这些规则。 所以这是你可以指望在任何浏览器工作(如果你真的想使用有趣的颜色名称)。

HTML 5规范包含parsing遗留颜色的规则 。

它们相当长,并且旨在使浏览器对于如何处理破碎的代码保持一致。

很有意思。 似乎浏览器将解释任何可以(af)的字符,如果不匹配,则将剩下的字符保留为0。 例如:

 Spiderman 00DE0 A 

不过还是需要更多的试验。

这是一个有趣的问题。

通过简单的实验,我发现“幸运”产生与“LuckyCharms”相同的颜色(反正我的眼睛),但是“LuckBeALady”让你变暗,而“LuckBeALadyTonight”变蓝。

顺便说一句,我的第一个想法是,它是在可识别的hex字符上行事,但是把“LuckyCharms”变成了cca,这使得黑色。 如内田真雄所暗示的,0和hex字符组合,没有使“绿色幸运”

没有答案。

预计会发生什么的基本答案是“这取决于浏览器”。 之前版本的HTML之前的5个问题之一是没有指定浏览器遇到非标准HTML时会发生什么情况。 来自@Madara Uchiha的解释是浏览器如何解释颜色规格的一个例子,但是对于浏览器崩溃或popupCD托盘或将显示器的分辨率更改为400×300 PX。 当然,这并不理想 – 所以你看到的是一个程序员的想法,一次,如果遇到一个非标准的HTML颜色规范会发生什么。

CSS不会发生的原因是它是解释颜色的另一个parsing器。 这个parsing器解释颜色是内联CSS还是链接CSS文档。 CSS 确实定义了遇到不正确值时发生了什么:它被忽略,根本不影响文档。

我认为现在是时候与class级讨论标准合规性的好时机了,因为这是学生理解的一个重要领域,有些专业人员我也不幸遇难。 当他们说“但彩色吃喝玩乐的作品很好”时,你可以告诉他们看它的效果很好,但是这完全有可能导致导师的浏览器崩溃,给他们一个大胖子。到一个真实世界的场景,当你可以得到,当我们有些人不得不放弃我们的周末,因为在演示时间别人的蹩脚的代码不能正常工作。

我并不苦。 大多数:)