Czy cytowanie wartości url() jest naprawdę konieczne?

Którego z poniższych elementów powinienem użyć w arkuszach stylów?

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

Co W3C określa jakopoprawny sposób ?

 208
Author: sshow, 2010-01-30

7 answers

W3C mówi, że cytaty są opcjonalne, wszystkie trzy twoje sposoby są legalne.

Cytat otwierający i zamykający musi być tym samym znakiem.

Jeśli masz znaki specjalne w adresie URL, powinieneś użyć cudzysłowów lub uciec od znaków(patrz poniżej).

Składnia i podstawowe typy danych

Format wartości URI to' url ( ', po którym następuje opcjonalna Biała spacja, po której następuje opcjonalny znak pojedynczego cudzysłowu ( ") lub podwójnego cudzysłowu ( " ), po którym następuje URI sam, po którym następuje opcjonalny znak pojedynczego cudzysłowu (") lub podwójnego cudzysłowu ( "), po którym następuje opcjonalna Biała spacja, po której następuje")". Dwa znaki cytowania muszą być takie same.

Znaki specjalne:

Niektóre znaki pojawiające się w nienotowanym URI, takie jak nawiasy, białe znaki spacji, pojedyncze cudzysłowy (') i podwójne cudzysłowy ( " ), muszą być unikane z odwrotnym ukośnikiem, aby wynikowa wartość URI była tokenem URI: '\(', '\)'.

 221
Author: Pekka 웃,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-30 02:42:26

Lepiej używać cudzysłowów, ponieważ jest to zalecane przez najnowszy standard i jest mniej przypadków krawędzi.

Według najnowszego projektu edytora wartości CSS i modułów Poziom 3 (18 grudnia 2015)

Adres URL jest wskaźnikiem do zasobu i jest notacją funkcjonalną oznaczoną przez <url>. Składnia <url> jest:
<url> = url( <string> <url-modifier>* )

Nieocenzurowana wersja jest obsługiwana tylko ze względów legacy i wymaga specjalnych reguł parsowania (dla sekwencji escape, itd.), przez co jest uciążliwy i nie wspiera modyfikatorów adresów url.

Oznacza to, że składnia url(...) ma być notacją funkcjonalną, która jako parametry przyjmuje ciąg znaków i modyfikator adresu url. Użycie notacji cudzysłowu (która tworzy ciąg znaków) byłoby bardziej zgodne ze standardami i wprowadzałoby mniejszą złożoność.

@SimonMourier komentarz w górnej odpowiedzi jest zły, bo szukał złej specyfikacji. Typ url-token jest wprowadzony tylko dla starszych reguł parsowania, więc dlatego nie ma to nic wspólnego z cytatami.

 24
Author: sodatea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-20 16:31:51

Oto co mówi Specyfikacja W3 CSS 2.1:

Format wartości URI to'url (' po którym następuje opcjonalna Biała spacja po którym następuje opcjonalny pojedynczy cytat (') lub znak podwójnego cudzysłowu (") po którym następuje sam URI, po przez opcjonalny pojedynczy cytat ( " ) lub znak podwójnego cudzysłowu ( " ), po którym następuje opcjonalna Biała spacja, po której następuje")". Dwa znaki cytowania muszą być to samo.

Źródło: http://www.w3.org/TR/CSS21/syndata.html#uri

Więc wszystkie 3 przykłady, które zaproponowałeś są poprawne, ale ten, który wybrałbym, jest pierwszym, ponieważ używasz mniej znaków, a zatem wynikowy plik CSS będzie mniejszy, co spowoduje mniejsze wykorzystanie przepustowości.

Może się wydawać, że to nie jest ważne, ale strony o dużym natężeniu ruchu wolą oszczędzać przepustowość i wiele plików css, a odnośniki url w nich mają sens, aby wybrać opcję, która sprawia, że plik mniejszy... Nawet dlatego, że nie ma żadnej korzyści w nie robieniu tego .

Uwaga: Może być konieczne unikanie znaków, jeśli adresy URL zawierają nawiasy, przecinki, znaki spacji, pojedyncze cudzysłowy lub podwójne cudzysłowy. Może to spowodować, że adres url będzie dłuższy niż tylko używanie cudzysłowów(które wymagają mniej znaków specjalnych). Dlatego możesz chcieć podawać plik Css z adresami URL bez cudzysłowów tylko wtedy, gdy narzut ucieczki nie powoduje, że adres url jest dłuższy niż tylko Korzystanie z cudzysłowów (co jest bardzo rzadkie).

Jednak nie spodziewałbym się, że żaden człowiek nawet rozważy te skrajne przypadki... Optymalizator Css poradzi sobie z tym za Ciebie... (ale na pewno musisz wiedzieć o tym wszystkim, jeśli faktycznie piszesz optymalizator css: P)

 11
Author: Andrea Zilio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-28 05:03:12

Trzy sposoby są legalne zgodnie z W3C. jeśli w nazwie (jako spacji) są znaki specjalne, należy użyć drugiego lub trzeciego.

 6
Author: Y. Shoham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-30 18:12:38

Przykład 2 lub 3 są najlepsze:

Z W3C: Format wartości URI to 'url (' , po którym następuje opcjonalna Biała spacja, po której następuje opcjonalny znak pojedynczego cudzysłowu (') lub podwójnego cudzysłowu ( " ), po którym następuje sam URI, po którym następuje opcjonalny znak pojedynczego cudzysłowu (') lub podwójnego cudzysłowu ( " ), po którym następuje opcjonalna Biała spacja, po której następuje ')'. Dwa znaki cytowania muszą być takie same.

Uwaga z tego samego wyjaśnienia, przykład 1 jest akceptowalny, jeśli odpowiednie znaki są uciekł.

 3
Author: Nick Craver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-30 18:14:11

Zgodnie z Google CSS Coding Style

Nie używaj cudzysłowów w wartościach URI (url ()).

Wyjątek: jeśli musisz użyć reguły @ charset, użyj podwójnych cudzysłowów-pojedyncze cudzysłowy są niedozwolone.

 1
Author: Junhao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-07 06:14:13

Miałem:

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

Zajęło mi trochę czasu zrozumienie, że nazwa pliku closed brace łamała regułę.

Więc nie jest to obowiązkowe, ale nawet jeśli cytowanie nie jest-tak-dobrze zrozumiane przez starsze przeglądarki, może zaoszczędzić trochę bólu głowy na dość złożonych dynamicznie generowanych stronach.

 1
Author: TechNyquist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-28 14:50:17