Việc trích dẫn giá trị của url () có thực sự cần thiết?


Câu trả lời:


243

W3C cho biết các trích dẫn là tùy chọn, cả ba cách của bạn đều hợp pháp.

Mở đầu và kết thúc trích dẫn chỉ cần là cùng một nhân vật.

Nếu bạn có các ký tự đặc biệt trong URL của mình, bạn nên sử dụng dấu ngoặc kép hoặc thoát các ký tự (xem bên dưới).

Cú pháp và kiểu dữ liệu cơ bản

Định dạng của giá trị URI là 'url (' theo sau là khoảng trắng tùy chọn theo sau là một ký tự trích dẫn đơn (') hoặc dấu ngoặc kép (") theo sau là chính URI, theo sau là trích dẫn đơn tùy chọn (') hoặc trích dẫn kép (") ký tự theo sau là khoảng trắng tùy chọn theo sau ')'. Hai ký tự trích dẫn phải giống nhau.

Thoát khỏi các ký tự đặc biệt:

Một số ký tự xuất hiện trong một URI không được trích dẫn, chẳng hạn như dấu ngoặc đơn, ký tự khoảng trắng, dấu ngoặc đơn (') và dấu ngoặc kép ("), phải được thoát bằng dấu gạch chéo ngược để giá trị URI kết quả là mã thông báo URI:' \ (', '\)'.


9
Một số trình duyệt cũ hơn có thể có vấn đề với các url được trích dẫn là IE Mac.
mveerman

5
Ngoài những gì bic72 đã nói, một số trình duyệt cũ hơn cũng đưa ra yêu cầu kép khi đối mặt với các URL được trích dẫn trong CSS, đầu tiên họ yêu cầu "myfile.png" sau đó là myfile.png - vì vậy tôi không sử dụng chúng.
Pebbl

FWIW thông số bạn liên kết đến dường như đã được viết lại kể từ khi bạn đăng trích dẫn thứ hai. Bây giờ dấu phẩy dường như không cần phải thoát.
Ben

@pebbl - Bạn nói đúng và các trình duyệt cũ hơn bao gồm phiên bản Chrome mới nhất trên mac.
Daniel Beardsley

7
Bản nháp của Trình biên tập mới nhất CSS 3 (có thể 2015) dường như không cho phép trích dẫn nữa: dev.w3.org/csswg/css-syntax (kiểm tra url-tokenlược đồ đường sắt) trong khi đề xuất ứng cử viên hiện tại (feb 2014) không: w3.org/TR / css-cú pháp-3 Tôi cho rằng họ muốn thúc đẩy việc sử dụng chuỗi thoát thay vì dấu ngoặc kép
Simon Mourier

34

Sử dụng báo giá tốt hơn bởi vì nó được khuyến nghị bởi tiêu chuẩn mới nhất và có ít trường hợp cạnh hơn.

Theo Dự thảo giá trị CSS và mô-đun cấp 3 mới nhất của biên tập viên (18 tháng 12 năm 2015)

URL là một con trỏ tới tài nguyên và là ký hiệu chức năng được biểu thị bởi <url>. Cú pháp của a <url>là:
<url> = url( <string> <url-modifier>* )

Phiên bản không trích dẫn chỉ được hỗ trợ vì lý do cũ và cần các quy tắc phân tích cú pháp đặc biệt (đối với các chuỗi thoát, v.v.), do đó cồng kềnh và không hỗ trợ sửa đổi url.

Điều đó có nghĩa là, url(...)cú pháp được coi là một ký hiệu chức năng, lấy một chuỗi và một bộ sửa đổi url làm tham số. Sử dụng ký hiệu trích dẫn (tạo mã thông báo chuỗi) sẽ tuân thủ tiêu chuẩn hơn và giới thiệu ít phức tạp hơn.

Nhận xét của @ SimonMerer trong câu trả lời hàng đầu là sai, bởi vì anh ta tìm kiếm thông số sai. Các url-tokenloại chỉ được giới thiệu cho các quy tắc phân tích di sản đặc biệt, vì vậy đó là lý do nó không có bất cứ điều gì để làm với dấu ngoặc kép.


"Phiên bản không trích dẫn chỉ được hỗ trợ vì lý do cũ [..]" Nguồn?
Semmel

5
drafts.csswg.org/css-values-3/#ref-for-url-value-7 "Lưu ý: Các quy tắc phân tích cú pháp đặc biệt đối với các di sản ngoặc kép-mark-less <url> cú pháp phương tiện mà ..."
sodatea

Tôi đọc nó nhưng phải bỏ qua phần này - cảm ơn! Dù bằng cách nào - lời khuyên rất có giá trị. Imho đây nên là câu trả lời được chấp nhận!
Semmel

Phiên bản 2020 của tài liệu được tham chiếu dường như không đề cập đến 'phiên bản không trích dẫn chỉ được hỗ trợ vì lý do di sản' nữa.
Jahmic

11

Đây là những gì đặc tả W3 CSS 2.1 nói:

Định dạng của giá trị URI là 'url (' theo sau là khoảng trắng tùy chọn theo sau là một ký tự trích dẫn đơn (') hoặc dấu ngoặc kép (") theo sau là chính URI, theo sau là trích dẫn đơn tùy chọn (') hoặc trích dẫn kép (") ký tự theo sau là khoảng trắng tùy chọn theo sau ')'. Hai ký tự trích dẫn phải giống nhau.

Nguồn: http://www.w3.org/TR/CSS21/syndata.html#uri

Vì vậy, tất cả 3 ví dụ bạn đề xuất đều đúng, nhưng ví dụ tôi chọn là ví dụ đầu tiên vì bạn sử dụng ít ký tự hơn và do đó tệp CSS kết quả sẽ nhỏ hơn, dẫn đến việc sử dụng băng thông ít hơn.

Điều này có thể cảm thấy điều đó không quan trọng, nhưng các trang web có lưu lượng truy cập cao thích tiết kiệm băng thông và hơn nhiều tệp css và tham chiếu url trong đó, thật hợp lý khi chọn tùy chọn làm cho tệp nhỏ hơn ... Ngay cả vì không có lợi thế trong không làm như vậy .

Lưu ý: bạn có thể phải thoát ký tự nếu các url chứa dấu ngoặc đơn, dấu phẩy, ký tự khoảng trắng, dấu ngoặc đơn hoặc dấu ngoặc kép. Điều này có thể làm cho url dài hơn chỉ sử dụng dấu ngoặc kép (cần thoát ít hơn). Do đó, bạn có thể muốn phân phát tệp Css bằng các url không có dấu ngoặc kép khi chi phí thoát không làm cho url dài hơn so với chỉ sử dụng dấu ngoặc kép (điều này rất hiếm).

Tuy nhiên tôi sẽ không mong đợi bất kỳ con người nào thậm chí xem xét các trường hợp cạnh này ... Trình tối ưu hóa Css sẽ xử lý việc này cho bạn ... (nhưng chắc chắn bạn cần biết về tất cả những điều này nếu bạn thực sự đang viết trình tối ưu hóa css: P)


5
Không biết tại sao điều này lại bị bỏ phiếu; Đối với một trang web có lưu lượng truy cập cao, những ý tưởng như thế này tạo ra sự khác biệt lớn trong suốt một năm.
Joisey Mike

7
Tôi thực sự nghi ngờ điều đó. Có bao nhiêu url trên mỗi css? Không quá nhiều. Và bạn chỉ cần bỏ qua HAI byte (theo ascii hoặc utf-8) trong mỗi byte. Ngoài ra, bạn thực sự có thể làm cho url dài hơn, bởi vì bạn có thể cần phải sử dụng dấu gạch chéo ngược. Có nhiều cách tốt hơn để giảm kích thước web ...
kralyk

1
Rõ ràng đó không phải là một khoản tiết kiệm nhiều, nhưng Andrea và Joisey vẫn đúng. Một ví dụ cực đoan, Google chỉ cần xóa một byte khỏi trang chủ của họ để tiết kiệm khá nhiều băng thông;)
Pebbl

2
@kralyk ... Do đó, điều tốt nhất nên làm là không sử dụng dấu ngoặc kép khi không cần thiết ... Vì vậy, tốt hơn là sử dụng dấu ngoặc kép khi bạn có một url có nhiều hơn hai dấu ngoặc đơn, dấu phẩy, ký tự khoảng trắng, dấu ngoặc đơn hoặc dấu ngoặc kép . Tuy nhiên tôi chưa bao giờ gặp phải trong một tệp Css ... Và tôi khá chắc chắn rằng tôi sẽ không bao giờ :) (đã cập nhật câu trả lời)
Andrea Zilio

18
Các lập trình viên quan tâm đến việc tối ưu hóa các ký tự riêng lẻ từ mã nguồn của họ, hoàn toàn thiếu thuyền - họ sẽ hầu như không bao giờ tối ưu hóa bất cứ điều gì cả. Dù sao, tôi luôn luôn sử dụng dấu ngoặc kép. Tôi là một người đàn ông kiên định.
ChaseMoskal

6

Ba cách là hợp pháp theo W3C. Nếu bạn có các ký tự đặc biệt trong tên (dưới dạng khoảng trắng), bạn nên sử dụng ký tự thứ hai hoặc thứ ba.


3

Ví dụ 2 hoặc 3 là tốt nhất:

Từ W3C: Định dạng của giá trị URI là 'url (' theo sau là khoảng trắng tùy chọn, theo sau là ký tự trích dẫn đơn (') hoặc dấu ngoặc kép (") theo sau là chính URI, theo sau là trích dẫn đơn tùy chọn (') hoặc ký tự trích dẫn kép (") theo sau là khoảng trắng tùy chọn theo sau ')'. Hai ký tự trích dẫn phải giống nhau.

Lưu ý từ cùng một lời giải thích, Ví dụ 1 có thể chấp nhận được, nếu các ký tự phù hợp được thoát.


1

Tôi đã có:

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

Phải mất một thời gian tôi mới hiểu rằng tên tập tin đóng dấu ngoặc đã phá vỡ quy tắc.

Vì vậy, nó không bắt buộc nhưng, ngay cả khi trích dẫn không được hiểu rõ bởi các trình duyệt cũ hơn, nó có thể giúp bạn đỡ đau đầu trong các trang được tạo động khá phức tạp.


0

Theo Phong cách mã hóa CSS của Google

Không sử dụng dấu ngoặc kép trong các giá trị URI (url ()).

Ngoại lệ: Nếu bạn không cần sử dụng quy tắc @charset, không được phép sử dụng dấu ngoặc kép Đôi dấu ngoặc kép đơn.


2
@ DávidHorváth: Tôi không nói bạn sai, nhưng ý bạn là gì?
Sam Dutton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.