การอ้างถึงคุณค่าของ url () จำเป็นจริงๆหรือ?


235

ฉันควรใช้สิ่งใดต่อไปนี้ในสไตล์ชีตของฉัน

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

W3C ระบุว่าอะไรถูกวิธี ?


5
มีความเป็นไปได้ที่ซ้ำกันของCSS background-image - การใช้งานที่ถูกต้องคืออะไร?
Robert MacLean

คำตอบ:


243

W3C บอกว่าคำพูดเป็นตัวเลือกวิธีการทั้งสามของคุณนั้นถูกกฎหมาย

การเปิดและปิดการอ้างจะต้องเป็นตัวละครเดียวกัน

หากคุณมีอักขระพิเศษใน URL ของคุณคุณควรใช้เครื่องหมายคำพูดหรือหนีอักขระ (ดูด้านล่าง)

ไวยากรณ์และชนิดข้อมูลพื้นฐาน

รูปแบบของค่า URI คือ 'url (' ตามด้วย white space เผื่อเลือกตามด้วยตัวเลือก single quote (') หรือ double quote (") ตามด้วยตัว URI เองตามด้วย single quote (') หรือ double quote (") ตัวอักษรตามด้วยช่องว่างสีขาวเสริมตามด้วย ')' อักขระเครื่องหมายคำพูดสองตัวต้องเหมือนกัน

หนีตัวละครพิเศษ:

อักขระบางตัวที่ปรากฏใน URI ที่ไม่ได้ระบุไว้เช่นวงเล็บอักขระช่องว่างสีขาวเครื่องหมายอัญประกาศเดี่ยว (') และเครื่องหมายคำพูดคู่ (") ต้องถูกหลีกเลี่ยงด้วยเครื่องหมายทับขวาเพื่อให้ค่า URI ที่ได้คือโทเค็น URI:' \ (' '\)'


9
เบราว์เซอร์รุ่นเก่าบางรุ่นอาจมีปัญหากับ URL ที่เสนอราคาคือ IE Mac
mveerman

5
นอกเหนือจากที่กล่าวไว้ใน bic72 แล้วเบราว์เซอร์รุ่นเก่าบางรุ่นยังทำการร้องขอคู่เมื่อเผชิญหน้ากับ URL ที่ยกมาใน CSS ก่อนอื่นพวกเขาจะร้องขอ "myfile.png" จากนั้น myfile.png - ด้วยเหตุนี้ฉันจึงหลีกเลี่ยงการใช้มัน
Pebbl

FWIW ข้อมูลจำเพาะที่คุณเชื่อมโยงไปดูเหมือนจะถูกเขียนใหม่ตั้งแต่คุณโพสต์ข้อความที่สอง ตอนนี้เครื่องหมายจุลภาคดูเหมือนจะไม่ต้องการการหลบหนี
Ben

@pebbl - ถูกต้องและเบราว์เซอร์รุ่นเก่านั้นมี Chrome เวอร์ชันใหม่ล่าสุดใน mac
Daniel Beardsley

7
CSS 3 เอดิเตอร์ฉบับร่างล่าสุด (พฤษภาคม 2558) ดูเหมือนจะไม่อนุญาตให้ใส่เครื่องหมายอัญประกาศอีกต่อไป: dev.w3.org/csswg/css-syntax (ตรวจสอบurl-tokenสคีมารางรถไฟ) ในขณะที่คำแนะนำผู้สมัครปัจจุบัน (feb 2014) ไม่: w3.org/TR / css-syntax-3ฉันคิดว่าพวกเขาต้องการที่จะส่งเสริมการใช้งานของลำดับหนีแทนราคา
Simon Mourier

34

ใช้เครื่องหมายคำพูดดีกว่าเพราะแนะนำโดยมาตรฐานล่าสุดและมีตัวพิมพ์ขอบน้อยกว่า

ตามร่างล่าสุดของค่านิยมและโมดูล CSS ระดับ 3 (18 ธันวาคม 2558)

URL <url>คือตัวชี้ไปยังทรัพยากรและเป็นสัญกรณ์ทำงานแทนด้วย ไวยากรณ์ของ a <url>คือ:
<url> = url( <string> <url-modifier>* )

เวอร์ชันที่ไม่ได้รับการสนับสนุนได้รับการสนับสนุนด้วยเหตุผลดั้งเดิมเท่านั้นและต้องการกฎการแยกวิเคราะห์พิเศษ (สำหรับลำดับการหลบหลีกและอื่น ๆ ) ดังนั้นจึงยุ่งยากและไม่สนับสนุน url-modifiers

นั่นหมายความว่าurl(...)ไวยากรณ์ควรจะเป็นสัญกรณ์การทำงานซึ่งใช้สตริงและ url-modifier เป็นพารามิเตอร์ ใช้เครื่องหมายคำพูด (ซึ่งสร้างโทเค็นสตริง) จะเป็นไปตามมาตรฐานมากขึ้นและแนะนำความซับซ้อนน้อยลง

@ SimonMourier แสดงความคิดเห็นในคำตอบด้านบนผิดเพราะเขามองหาสเป็คที่ไม่ถูกต้อง url-tokenชนิดถูกนำมาเฉพาะสำหรับการพิเศษมรดกแยกกฎเพื่อที่ว่าทำไมมันไม่ได้มีอะไรที่จะทำอย่างไรกับคำพูด


"รุ่นที่ไม่ได้อ้างอิงได้รับการสนับสนุนด้วยเหตุผลดั้งเดิมเท่านั้น [.. ]" แหล่งที่มาหรือไม่
Semmel

5
drafts.csswg.org/css-values-3/#ref-for-url-value-7 "หมายเหตุ: กฎการแยกวิเคราะห์พิเศษสำหรับไวยากรณ์ใบเสนอราคาดั้งเดิม - เครื่องหมาย - น้อยกว่า <url> ไวยากรณ์หมายความว่า ... "
sodatea

ฉันอ่านมัน แต่ต้องไม่พลาดส่วนนี้ - ขอบคุณ! ทั้งสองวิธี - คำแนะนำที่มีค่ามาก อิมโฮนี่ควรเป็นคำตอบที่ยอมรับได้!
Semmel

ดูเหมือนว่าเอกสารอ้างอิงรุ่น 2020 ไม่ได้พูดถึงว่า 'รุ่นที่ไม่ได้อ้างอิงนั้นรองรับเหตุผลดั้งเดิมเท่านั้น' อีกต่อไป
Jahmic

11

นี่คือสิ่งที่ข้อกำหนด W3 CSS 2.1 พูดว่า:

รูปแบบของค่า URI คือ 'url (' ตามด้วย white space เผื่อเลือกตามด้วยตัวเลือก single quote (') หรือ double quote (") ตามด้วยตัว URI เองตามด้วย single quote (') หรือ double quote (") ตัวอักษรตามด้วยช่องว่างสีขาวเสริมตามด้วย ')' อักขระเครื่องหมายคำพูดสองตัวต้องเหมือนกัน

ที่มา: 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
เห็นได้ชัดว่ามันไม่ประหยัดมากนัก แต่ Andrea และ Joisey ยังคงถูกต้อง ในฐานะที่เป็นตัวอย่างสุดขีด Google จะต้องลบหนึ่งไบต์ออกจากหน้าแรกของพวกเขาเพื่อประหยัดแบนด์วิดท์เล็กน้อย)
Pebbl

2
@kralyk ... ดังนั้นสิ่งที่ดีที่สุดที่ต้องทำคือไม่ใช้เครื่องหมายคำพูดเมื่อไม่ต้องการ ... ดังนั้นจะเป็นการดีกว่าถ้าใช้ url ที่มีเครื่องหมายวงเล็บมากกว่าสองเครื่องหมายจุลภาคอักขระช่องว่างเครื่องหมายคำพูดเดี่ยวหรือเครื่องหมายคำพูดคู่ . ซึ่ง แต่ฉันไม่เคยพบในไฟล์ Css ... และผมค่อนข้างมั่นใจว่าฉันไม่เคยจะ :) (การปรับปรุงคำตอบ)
อันเดรีย Zilio

18
โปรแกรมเมอร์ที่เกี่ยวข้องกับการเพิ่มประสิทธิภาพของตัวละครแต่ละตัวจากซอร์สโค้ดของพวกเขาหายไปจากเรืออย่างสิ้นเชิง - พวกเขาแทบจะไม่เพิ่มประสิทธิภาพอะไรเลย อย่างไรก็ตามฉันมักจะใช้เครื่องหมายคำพูดคู่ ฉันเป็นคนที่มั่นคง
ChaseMoskal

6

สามวิธีถูกกฎหมายตาม W3C หากคุณมีอักขระพิเศษในชื่อ (ตามช่องว่าง) คุณควรใช้ตัวที่สองหรือตัวที่สาม


3

ตัวอย่างที่ 2 หรือ 3 ดีที่สุด:

จาก W3C: รูปแบบของค่า URI คือ 'url (' ตามด้วย white space เผื่อเลือกตามด้วยเครื่องหมายอัญประกาศเดี่ยวเดี่ยว (') หรือเครื่องหมายอัญประกาศคู่ (") ตามด้วย URI เองตามด้วยเครื่องหมายอัญประกาศเดี่ยวเดี่ยว (') หรือเครื่องหมายอัญประกาศคู่ (") ตามด้วยช่องว่างสีขาวที่เป็นตัวเลือกตามด้วย ')' อักขระเครื่องหมายคำพูดสองตัวต้องเหมือนกัน

หมายเหตุจากคำอธิบายเดียวกันตัวอย่าง 1 เป็นที่ยอมรับได้หากอักขระที่เหมาะสมถูกหลีกเลี่ยง


1

ฉันมี:

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

ฉันใช้เวลาสักพักกว่าจะเข้าใจว่าชื่อไฟล์ที่ปิดวงเล็บถูกละเมิดกฎ

ดังนั้นจึงไม่จำเป็น แต่ถึงแม้ว่าการอ้างไม่เข้าใจเบราว์เซอร์รุ่นเก่า แต่ก็สามารถช่วยให้คุณปวดหัวในหน้าเว็บที่สร้างขึ้นแบบไดนามิกค่อนข้างซับซ้อน


0

ตามสไตล์การเข้ารหัสของ Google CSS

อย่าใช้เครื่องหมายคำพูดในค่า URI (url ())

ข้อยกเว้น: หากคุณต้องการใช้กฎ @charset ให้ใช้เครื่องหมายอัญประกาศคู่โดยไม่อนุญาตให้ใช้เครื่องหมายอัญประกาศเดี่ยว


2
@ DávidHorváth: ฉันไม่ได้พูดว่าคุณผิด แต่การประชุมที่ไม่ดีหมายถึงอะไร?
Sam Dutton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.