Чи справді потрібне цитування значення 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

5
Як додаток до сказаного bic72, деякі старі браузери також роблять подвійні запити, стикаючись з цитованими URL-адресами в CSS, спочатку вони запитують "myfile.png", потім myfile.png - отже, чому я уникаю їх використання.
Pebbl

FWIW специфікація, на яку ви посилаєтесь, здається, була переписана з моменту опублікування другої цитати. Тепер, мабуть, не потрібно втекти комами.
Бен

@pebbl - Ви маєте рацію, і у старих веб-переглядачах є найновіша версія Chrome на mac.
Даніель Бердслі

7
Проект останнього редактора CSS 3 (травень 2015 р.), Схоже, не дає жодних цитат: dev.w3.org/csswg/css-syntax (перевірити url-tokenсхему залізниць), тоді як поточна рекомендація кандидата ( фебр 2014 р.): W3.org/TR / css-syntax-3 Я вважаю, що вони хочуть сприяти використанню послідовності втечі замість лапок
Simon Mourier

34

Краще використовувати котирування, тому що це рекомендовано найновішим стандартом і менше кейсів.

Відповідно до найновішої редакції редактора CSS Значення та модулі 3 рівень (18 грудня 2015 р.)

URL - це вказівник на ресурс і є функціональним позначенням, позначеним символом <url>. Синтаксис a <url>:
<url> = url( <string> <url-modifier>* )

Версія, що не котирується, підтримується лише з застарілих причин і потребує спеціальних правил розбору (для послідовностей евакуації тощо), таким чином, є громіздкою і не підтримує модифікатори URL-адрес.

Це означає, що url(...)синтаксис повинен бути функціональним позначенням, яке приймає рядок і модифікатор URL-адреси як параметри. Використовувати позначення цитат (що створює маркер рядка) було б більш сумісним зі стандартами та вносило б меншу складність.

@ Коментар SimonMourier у верхній відповіді неправильний, тому що він шукав неправильну специфікацію. url-tokenТип вводяться тільки для правил спадщини спеціального розбору, так ось чому він не має нічого спільного з лапками.


"Версія без котирування підтримується лише з застарілих причин [..]" Джерело?
Semmel

5
drafts.csswg.org/css-values-3/#ref-for-url-value-7 "Примітка. Спеціальні правила аналізу синтаксису застарілих лапок - менше <url> означає, що ..."
sodatea

Я прочитав це, але, мабуть, пропустив цю частину - дякую! У будь-якому випадку - дуже цінна порада. Імхо, це повинна бути прийнята відповідь!
Semmel

Версія 2020 року згаданого документа, схоже, не згадує, що "без котирування версія підтримується лише з застарілих причин".
Джаміч

11

Ось що говорить специфікація W3 CSS 2.1:

Формат значення URI - це "url (" з подальшим необов'язковим пробілом з подальшим необов'язковим одинарною цитатою (") або подвійною цитатою ("), за якою слідує сам URI, а потім необов'язковий єдиний цитат (') або подвійний цитат (") символ з подальшим необов'язковим пробілом з символом") ". Два символи цитати повинні бути однаковими.

Джерело: http://www.w3.org/TR/CSS21/syndata.html#uri

Отже, усі запропоновані вами 3 приклади є правильними, але той, який я обрав би, є перший, тому що ви використовуєте менше символів, а отже, отриманий CSS-файл буде меншим, що призводить до менше використання пропускної здатності.

Це може здатися, що це не важливо, але веб-сайти з високим трафіком вважають за краще економити пропускну спроможність і понад багато файлів css, а посилання на URL-адреси в них має сенс вибрати варіант, який зменшує файл ... Навіть тому, що немає переваги не роблячи цього .

Примітка. Можливо, вам доведеться уникати символів, якщо URL-адреси містять круглі дужки, коми, пробіли з пробілами, одинарні або подвійні лапки. Це може зробити URL-адресу довшим, ніж просто використання лапок (для яких потрібно менше скорочення). Отже, ви можете хотіти подавати файл Css з URL-адресами без лапок лише тоді, коли накладні витрати не роблять URL довше, ніж просто використання лапок (що дуже рідко).

Однак я б не очікував, що будь-яка людина навіть розгляне ці крайові випадки ... Оптимізатор Css впорається з цим за вас ... (але впевнений, що вам потрібно знати про все це, якщо ви насправді пишете оптимізатор css: P)


5
Не знаю, чому це було знято з голосу; Для сайту з високим трафіком такі ідеї мають велику різницю протягом року.
Joisey Mike

7
↑ Я дуже сумніваюся в цьому. Скільки URL-адрес у css? Не надто багато. І ви просто пощадили ДВА байта (в ascii або utf-8) у кожному. Плюс, ви можете насправді зробити URL-адресу довше, тому що, можливо, вам доведеться використовувати зворотні риси. Є набагато кращі способи зменшити розмір Інтернету ...
kralyk

1
Очевидно, що це не дуже економія, але Андреа та Джоїсі все-таки правильно. Як крайній приклад, Google потрібно лише видалити один байт зі своєї домашньої сторінки, щоб зберегти трохи пропускної здатності;)
Pebbl

2
@kralyk ... Отже, найкраще робити це не використовувати лапки, коли вони не потрібні ... Тож краще використовувати цитати, коли у вас URL-адреса з більш ніж двома дужками, комами, символами пробілів, одинарними або подвійними лапками . Якого я ніколи не зустрічав у файлі Css ... І я впевнений, що ніколи не буду :) (оновлено відповідь)
Андреа Зіліо

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: Я не кажу, що ви помиляєтесь, але які погані умовності ви маєте на увазі?
Сем Даттон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.