引用url()的值真的有必要吗?


235

我应该在样式表中使用以下哪项?

/* Example #1: */ background-image: url(image.png);
/* Example #2: */ background-image: url("image.png");
/* Example #3: */ background-image: url('image.png');

W3C指定什么是正确的方法


Answers:


243

W3C表示引号是可选的,您使用的所有三种方式都是合法的。

开头和结尾的引号只需是相同的字符。

如果您的URL中包含特殊字符,则应使用引号或转义字符(请参见下文)。

语法和基本数据类型

URI值的格式为'url(',后跟可选的空白,后跟可选的单引号(')或双引号(“)字符,然后是URI本身,然后是可选的单引号(')或双引号(“)字符,后跟可选的空格,后跟')'。两个引号字符必须相同。

转义特殊字符:

出现在未加引号的URI中的某些字符,例如括号,空格字符,单引号(')和双引号(“),必须用反斜杠转义,以便得到的URI值是URI标记:'\(', '\)'。


9
某些较旧的浏览器可能对带引号的网址(即IE Mac)存在问题。
mveerman 2010年

5
除了bic72所说的那样,一些较旧的浏览器在遇到CSS中带有引号的URL时也会发出双重请求,首先它们请求“ myfile.png”,然后请求myfile.png,因此我避免使用它们。
Pebbl 2012年

自发布第二个引号以来,您链接到的规范似乎已被重写。现在逗号似乎不需要转义。

@pebbl-没错,较旧的浏览器包括Mac上的最新版本的Chrome。
Daniel Beardsley

7
CSS 3最新的编辑者草案(2015年5月)似乎不再允许使用引号:dev.w3.org/csswg/css-syntax(检查url-token铁路模式),而当前的候选推荐书(2014年2月)则是:w3.org/TR / css-syntax-3我想他们想促进转义序列而不是引号的使用
Simon Mourier

34

最好使用引号,因为最新标准建议使用引号,并且边缘情况较少。

根据最新的CSS值和模块第3级编辑草案(2015年12月18日)

URL是指向资源的指针,是由表示的功能符号<url>。a的语法<url>是:
<url> = url( <string> <url-modifier>* )

仅出于遗留原因才支持未引用版本,并且需要特殊的解析规则(用于转义序列等),因此笨重且不支持url修饰符。

这意味着该url(...)语法应该是一种功能符号,它以字符串和url-修饰符作为参数。使用引号表示法(产生字符串标记)将更符合标准,并降低复杂性。

@SimonMourier在最高答案中的评论是错误的,因为他寻找了错误的规格。该url-token类型仅推出了针对传统一些特殊的分析规则,所以这就是为什么它没有任何与报价。


“仅出于遗留原因才支持未引用的版本[..]”来源?
塞梅尔'17

5
drafts.c​​sswg.org/css-values-3/#ref-for-url-value-7 “注意:传统的无引号的<url>语法的特殊解析规则意味着……”
sodatea

我读了,但一定错过了这一部分-谢谢!无论哪种方式-非常有价值的建议。恕我直言,这应该是公认的答案!
Semmel

引用文件的2020版本似乎不再提到“仅出于遗留原因才支持未引用版本”。
Jahmic

11

这是W3 CSS 2.1规范所说的:

URI值的格式为'url(',后跟可选的空白,后跟可选的单引号(')或双引号(“)字符,然后是URI本身,然后是可选的单引号(')或双引号(“)字符,后跟可选的空格,后跟')'。两个引号字符必须相同。

来源:http//www.w3.org/TR/CSS21/syndata.html#uri

因此,您提出的所有3个示例都是正确的,但我会选择的第一个示例是第一个示例,因为您使用的字符更少,因此生成的CSS文件将更小,从而减少了带宽使用量。

这似乎并不重要,但是高流量的网站倾向于节省带宽和大量的CSS文件,并且在其中的url引用选择使文件更小的选项是有意义的...即使没有优势不这样做

注意:如果网址包含括号,逗号,空格字符,单引号或双引号,则可能必须转义字符。这可能会使网址比仅使用引号(需要较少的转义)更长。因此,您可能只想在转义的开销不会使网址比仅使用引号长的情况下才使用不带引号的Css文件(这非常少见)。

但是,我不希望任何人甚至考虑这些极端情况……CSS优化器将为您处理此问题……(但是,如果您实际上在编写CSS优化器:P,请确保您需要了解所有这些信息)


5
不知道为什么投票失败;对于高流量的网站,这种想法在一年的过程中产生了很大的变化。
乔伊西·迈克

7
↑我真的对此表示怀疑。每个CSS有多少个网址?不会太多 而且,您仅保留了两个字节(分别为ascii或utf-8)。另外,您实际上可以将URL延长,因为您可能需要使用反斜杠。有很多更好的方法来减小网站的大小...
kralyk 2012年

1
显然节省不了多少,但安德里亚(Andrea)和乔伊西(Joisey)仍然正确。举一个极端的例子,Google只需要从其主页上删除一个字节即可节省大量带宽;)
Pebbl 2012年

2
@kralyk ...因此最好的做法是在不需要时不要使用引号...因此,如果您的网址中包含两个以上的括号,逗号,空格字符,单引号或双引号,则最好使用引号。但是我从来没有在Css文件中遇到过……而且我很确定我永远不会:)(更新了答案)
Andrea Zilio 2012年

18
那些关心从源代码中优化单个字符的程序员,完全没有了这条路-他们几乎根本不会优化任何东西。无论如何,我总是使用双引号。我是一个坚定的人。
ChaseMoskal

6

根据W3C,三种方法都是合法的。如果名称中有特殊字符(如空格),则应使用第二个或第三个字符。


3

示例2或3最好:

在W3C中: URI值的格式为'url(',后跟可选的空白,后跟可选的单引号(')或双引号(“)字符,后跟URI本身,然后是可选的单引号(')或双引号(“)字符,后跟可选的空格,后跟')'。两个引号字符必须相同。

根据相同的说明,如果转义了适当的字符,则示例1是可以接受的。


1

我有:

a.pic{
    background-image: url(images/img (1).jpg);
}

我花了一段时间才知道文件名右括号违反了规则。

因此,它不是强制性的,但即使旧浏览器不太了解引用,在相当复杂的动态生成的页面中也可以使您免于头痛。


0

根据Google CSS编码样式

请勿在URI值(url())中使用引号。

例外:如果确实需要使用@charset规则,请使用双引号-不允许使用单引号。


2
@DávidHorváth:我并不是说您错了,但是您的不良约定是什么意思?
Sam Dutton
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.