url ()의 값을 인용하는 것이 정말로 필요한가?


235

스타일 시트에 다음 중 어떤 것을 사용해야합니까?

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

W3C는 올바른 방법으로 무엇을 지정 합니까?


답변:


243

W3C에 따르면 따옴표는 선택 사항이며 세 가지 방법 모두 합법적입니다.

열기 및 닫기 따옴표는 동일한 문자 여야합니다.

URL에 특수 문자가있는 경우 따옴표를 사용하거나 문자를 이스케이프해야합니다 (아래 참조).

구문 및 기본 데이터 유형

URI 값의 형식은 'url (', 선택적 공백, 선택적 작은 따옴표 ( ') 또는 큰 따옴표 ( ") 문자, URI 자체, 선택적 작은 따옴표 (') 또는 큰 따옴표입니다. ( ") 문자 다음에 선택적 공백과 ')'이옵니다. 두 인용 부호는 같아야합니다.

특수 문자 이스케이프 :

괄호, 공백 문자, 작은 따옴표 ( ') 및 큰 따옴표 ( ")와 같이 따옴표없는 URI에 나타나는 일부 문자는 결과 URI 값이 URI 토큰이되도록 백 슬래시로 이스케이프해야합니다.'\ ( ', '\)'.


9
일부 구형 브라우저에는 인용 된 URL, 즉 IE Mac에 문제가있을 수 있습니다.
mveerman 2016 년

5
bic72가 말한 것 외에도 일부 구형 브라우저는 CSS에서 인용 URL과 직면 할 때 이중 요청을합니다. 먼저 "myfile.png"를 요청한 다음 myfile.png를 요청하므로 사용하지 않는 이유가 있습니다.
Pebbl

두 번째 인용문을 게시 한 이후에 연결 한 사양이 다시 작성된 것 같습니다. 이제 쉼표는 탈출을 요구하지 않는 것 같습니다.

@pebbl-맞습니다. 구형 브라우저 에는 최신 버전의 Chrome (Mac)이 포함되어 있습니다.
Daniel Beardsley

7
CSS 3의 최신 편집자 초안 (2015 수) 더 어떤 따옴표를 허용하지 않는 것 : dev.w3.org/csswg/css-syntax (체크 url-token철도 스키마) 현재 후보 추천 동안 (2 월 2014)을 수행합니다 w3.org/TR를 / css-syntax-3 따옴표 대신 이스케이프 시퀀스 사용을 홍보하려고한다고 가정합니다.
Simon Mourier

34

최신 표준에서 권장하고 엣지 케이스가 적기 때문에 따옴표를 사용하는 것이 좋습니다.

최신 에디터의 초안 CSS 값 및 모듈 레벨 3 (2015 년 12 월 18 일) 에 따르면

URL은 리소스에 대한 포인터이며로 표시되는 기능 표기법 <url>입니다. 의 구문은 다음 <url>과 같습니다.
<url> = url( <string> <url-modifier>* )

인용되지 않은 버전은 레거시 이유로 만 지원되며 특별한 구문 분석 규칙 (이스케이프 시퀀스 등)이 필요하므로 번거롭고 URL 수정자를 지원하지 않습니다.

즉, url(...)구문은 문자열과 url-modifier를 매개 변수로 사용하는 기능 표기법이어야합니다. 따옴표 표기법 (문자열 토큰을 생성)을 사용하면보다 표준을 준수하고 복잡성이 줄어 듭니다.

상단 답변의 @SimonMourier의 의견은 잘못된 사양을 찾았 기 때문에 잘못되었습니다. 이 url-token유형은 레거시 특수 구문 분석 규칙에만 도입되었으므로 따옴표와 관련이 없습니다.


"인용되지 않은 버전은 레거시 이유로 만 지원됩니다 [..]"소스?
Semmel

5
drafts.csswg.org/css-values-3/#ref-for-url-value-7 "참고 : 기존 인용 부호가없는 <url> 구문에 대한 특수 구문 분석 규칙은 다음을 의미합니다."
sodatea

읽었지만이 부분을 놓쳤을 것입니다-감사합니다! 어느 쪽이든-매우 귀중한 조언. Imho 이것은 대답이 받아 들여 져야한다!
Semmel

참조 문서의 2020 버전에는 더 이상 인용되지 않은 버전이 레거시 이유로 만 지원된다고 언급되어 있지 않습니다.
Jahmic

11

W3 CSS 2.1 사양은 다음과 같습니다.

URI 값의 형식은 'url (', 선택적 공백, 선택적 작은 따옴표 ( ') 또는 큰 따옴표 ( ") 문자, URI 자체, 선택적 작은 따옴표 (') 또는 큰 따옴표입니다. ( ") 문자 다음에 선택적 공백과 ')'이옵니다. 두 인용 부호는 같아야합니다.

출처 : http://www.w3.org/TR/CSS21/syndata.html#uri

제안한 세 가지 예는 모두 정확하지만 문자를 적게 사용하고 결과 CSS 파일이 더 작아서 대역폭 사용량이 줄어들 기 때문에 내가 선택한 예가 첫 번째 예입니다.

그것은 중요하지 않습니다처럼이 느낄 수 있지만, 높은 트래픽 웹 사이트가 없다하더라도 때문에 ... 그것은 파일이 작게 옵션을 선택하는 것은 의미가 그 대역폭 및 CSS 파일을 많이 이상 및 URL 참조를 저장하는 것을 선호 어떤 장점 그렇게하지 않는 것 .

참고 : URL에 괄호, 쉼표, 공백 문자, 작은 따옴표 또는 큰 따옴표가 포함 된 경우 문자를 이스케이프해야 할 수도 있습니다. 이것은 따옴표를 사용하는 것보다 더 긴 URL을 만들 수 있습니다 (이스케이프가 덜 필요합니다). 따라서 이스케이프의 오버 헤드가 따옴표를 사용하는 것보다 URL을 더 길게 만들지 않는 경우에만 따옴표가없는 URL로 Css 파일을 제공하려고 할 수 있습니다 (매우 드)니다).

그러나 나는 인간 이이 엣지 케이스를 고려할 것이라고 기대하지 않을 것입니다 ... Css 옵티마이 저가 이것을 처리 할 것입니다 ... (실제로 CSS 옵티 마이저를 작성하는 경우이 모든 것에 대해 알아야합니다 : P)


5
왜 이것이 투표에 실패했는지 모릅니다. 트래픽이 많은 사이트의 경우 이와 같은 아이디어는 1 년 동안 큰 차이를 만듭니다.
Joisey Mike

7
↑ 정말 의심합니다. CSS 당 몇 개의 URL이 있습니까? 너무 많이하지. 그리고 당신은 각각 2 바이트 (ascii 또는 utf-8)를 절약했습니다. 또한 백 슬래시를 사용해야 할 수도 있으므로 실제로 URL을 더 길게 만들 수 있습니다. 웹 크기를 줄이는 더 좋은 방법이 있습니다 ...
kralyk

1
분명히 저축은 그리 많지 않지만 Andrea와 Joisey는 여전히 옳습니다. 극단적 인 예로서, 구글은 꽤 많은 대역폭을 절약하기 위해 홈페이지에서 1 바이트 만 제거하면됩니다.)
Pebbl

2
@kralyk ... 따라서 할 필요가 없을 때 따옴표를 사용하지 않는 것이 가장 좋습니다. 괄호, 쉼표, 공백 문자, 작은 따옴표 또는 큰 따옴표가 둘 이상인 URL이있는 경우 따옴표를 사용하는 것이 좋습니다. . 그러나 나는 Css 파일에서 결코 만나지 못했습니다 ... 그리고 나는 결코 :) (답변을 업데이트하지 않음)
Andrea Zilio

18
소스 코드에서 개별 문자를 최적화하는 데 관심이있는 프로그래머는 배를 완전히 잃어 버렸습니다. 아무것도 전혀 최적화하지 않습니다. 어쨌든, 나는 항상 큰 따옴표를 사용합니다. 나는 일관성있는 사람입니다.
ChaseMoskal

6

W3C에 따르면 세 가지 방법이 합법적입니다. 이름에 공백이있는 특수 문자가있는 경우 두 번째 또는 세 번째 문자를 사용해야합니다.


3

예 2 또는 3이 가장 좋습니다.

W3C에서 : URI 값의 형식은 'url ('뒤에 선택적 공백, 선택적 작은 따옴표 ( ') 또는 큰 따옴표 ( ") 문자, URI 자체, 선택적 작은 따옴표 (')입니다. 또는 큰 따옴표 ( ") 문자 다음에 선택적 공백과 ')'이옵니다. 두 인용 부호는 같아야합니다.

동일한 설명에서 적절한 문자가 이스케이프 된 경우 예 1이 허용됩니다.


1

나는했다 :

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

파일 이름 닫힌 괄호가 규칙을 어 기고 있음을 이해하는 데 시간이 걸렸습니다.

따라서 필수는 아니지만 이전 브라우저에서 인용을 잘 이해하지 못하더라도 상당히 복잡한 동적 생성 페이지에서 두통을 덜 수 있습니다.


0

구글 CSS 코딩 스타일 에 따르면

URI 값 (url ())에 따옴표를 사용하지 마십시오.

예외 : @charset 규칙을 사용해야하는 경우 큰 따옴표를 사용하십시오. 작은 따옴표는 사용할 수 없습니다.


2
@ DávidHorváth : 당신이 틀렸다는 말은 아니지만 어떤 나쁜 규칙을 의미합니까?
Sam Dutton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.