CSS中的属性值是否区分大小写?

27
我注意到一些CSS属性(例如使用引号声明的font-family)可能是区分大小写的,但其他所有属性都不是...但网络浏览器和“HTML渲染器”必须如何解释呢? 在任何CSS上下文中(XML、SVG等)以及所有其他应用程序中是否相同?标准对此有何规定? 例如:Adobe InDesign导出了font-family:'Optima Bold'font-family:'optima bold'。我能否“规范化为小写”(例如合并类似的类)?

参考资料不完整且存在冲突:
此问题/答案相比,这里的重点也许可以转化为一些(个人的)客观考虑:
  1. 是否有(客观的!)规范性来源(CSS2、CSS3、XHTML1或HTML5的W3C规范)来回答这个问题?

  2. “标准font-family唯一名称”不能区分大小写(否则就不再是标准了)...因此,唯一可以合理地区分大小写属性是:

    2.1. 翻译前后台的一些属性,如 background,在 url(X) 上的 X 值等;

    2.2. content 属性的值,例如此处

    2.3. ... 更多? ...


这些引用并不冲突,因为它们指向不同的元素。 - Álvaro González
谢谢,我编辑了问题,也许我只需要更好的参考资料...关键是没有明显的W3C声明。 - Peter Krauss
2个回答

23

(更新@ÁlvaroG.Vicario的回答和评论,并补充这个回答... 这是一个Wiki,请编辑以增强)

例子:对于CSS3(和HTML5),有新的明确规则,如“font-face 属性必须不区分大小写”[2]。


背景

W3C互操作标准,主要包括XML、HTML、CSV和CSS。

CSS常规规则

CSS2(2008年的W3C标准)固定了关于“字符和大小写”的基本约定,而CSS3(2015 年的W3C标准)添加了更多内容。

  1. 默认情况下“所有CSS语法不区分大小写(...)” [1]。

  2. 有例外情况,“(...) 除了那些不受CSS控制的部分”[1]。

2.1.在HTML5(?)和XML中,元素名称区分大小写,但在HTML4中不区分大小写。

2.2.标识符(包括选择器中的元素名称、类和ID)区分大小写。HTML属性idclass、字体名称和URI的属性不在CSS规范的范围之内。

  1. ...

大小写矩阵

例外情况和特定(在参考文献中明确说明)规则。“是”表示值区分大小写

属性值:

CSS属性           | 区分大小写  | 参考和注释
------------------|------------|--------------------
%colorVals        | 否         | [3]
font-family       | 否         | [2]
%colorVals = 颜色,背景等等
%url = 背景图像等使用`url()`的内容,请参见[7]和注释。

选择器值:

 CSS选择器      | 大小写敏感 | 参考文献和注释
 ------------------|------------|--------------------
 ID                | YES        |...
 元素              | YES/NO     | ... 对于XML是YES...
 类名             | YES        | [5]
 (`~ i`运算符)  | NO         | [6]
YES / NO = 取决于文档语言(参见参考文献和注释)。

参考资料:

[1] W3C/CSS2/syndata, sec. 4.1.3字符和大小写

[2] W3C/CSS3-fonts, sec. 5.1字体系列名称的大小写敏感性

[3] W3C/CSS3-color, sec. 4.1基本颜色关键字

[4] W3C/CSS3-values, sec. 3.1预定义关键字

[5] W3C/Selectors, sec. 3.大小写敏感性

[6] W3C/Selectors4, sec. 6.3.大小写敏感性

[7] 参考 RFC 3986 和维基百科上的URL语法说明


引用和注释

  • 典型的URL以区分大小写的路径查询片段组成部分之后的不区分大小写的域名开始。参见[7]。

  • "用户代理必须不区分大小写地匹配这些名称"。[2]


还有一些不区分大小写的项目:CSS3颜色名称 - http://www.w3.org/TR/css3-color/#html4,http://www.w3.org/TR/css3-color/#css2-system;预定义关键字 - http://www.w3.org/TR/css3-values/#keywords - Victor
background-image: url("adDressToImagE...") 不区分大小写(至少在Chrome中)。 - Juanma Menendez
1
嗨@JuanmaMenendez,请编辑,这是一个Wiki!但是请注意问题,URL值具有其自己的语法,第一部分域名不区分大小写,但其余部分不是(!)。我进行了编辑以避免混淆(并更正了表格错误)。 - Peter Krauss
@PeterKrauss 你说得对。根据W3C的说法:_"可能存在URL或URL的某些部分大小写不敏感,但识别它们可能并不容易。用户应始终考虑URL是区分大小写的"_。 - Juanma Menendez
嗨 @JuanmaMenendez,无需评论,我同意,并且文本中的表格也同意," 'YES' 表示值是区分大小写的"(请参阅注释和引用[7])。 - Peter Krauss

8

CSS 2的规范如下:

CSS语法在ASCII范围内不区分大小写(即[a-z]和[A-Z]等效),但对于不受CSS控制的部分则不然。例如,HTML属性“id”和“class”的值、字体名称和URI的大小写敏感性超出了本规范的范围。特别注意,在HTML中元素名称不区分大小写,但在XML中区分大小写。

这很有道理:CSS本身接受background-imageBACKGROUND-IMAGE,但它无法知道您的Web服务器是否将LOGO.PNGlogo.png视为相同或不同的资源。

(我找不到CSS3的等效文档)


是的,你的答案类似于 https://dev59.com/lWcs5IYBdhLWcg3w1ndq#12533957 ,但没有提到属性值... 有时会提到“字体名称”,但是在哪里断言“OK,font-variant,font-weight,text-decoration,text-transform等都是不区分大小写的属性”呢?是的,URL值(包含像logo.png这样的内容)是唯一的,也是唯一可以通过合理论据证明的。 - Peter Krauss
你的问题是对你链接的问题的概括。答案是一样的。不确定你是否还有其他问题... :-? - Álvaro González
@PeterKrauss 嗯...你是在问关于每种可以使用CSS值的语言和技术中大小写敏感性的参考吗?这是一项艰巨的任务。任何人都可以发明一个供应商前缀属性来执行任务。我甚至可以发明自己的语言,并让它使用CSS进行样式设置。 - Álvaro González
抱歉,此问题受到W3C标准的限制(一系列与CSS兼容且最新的标准,如HTML4,XHTML1等)。我可以编辑相关内容或将“HTML”标签添加到问题中。 - Peter Krauss
请注意ol标签(https://github.com/w3c/csswg-drafts/issues/2101)。 - Knu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接