ทำไม CSS ไม่อนุญาตให้แสดงความคิดเห็นบรรทัดเดียว [ปิด]


14

ฉันเข้าใจว่า CSS สนับสนุนเฉพาะความคิดเห็นหลายบรรทัดเช่นนี้

/* foobar */

ทำไมไม่มีการสนับสนุนสำหรับความคิดเห็นบรรทัดเดียว

// foobar

พวกเขาเป็นเรื่องธรรมดาในการเขียนโปรแกรมและดูเหมือนว่ามีประโยชน์อย่างยิ่งสำหรับภาษาเช่น CSS ที่แต่ละกฎอยู่ในสายของตัวเอง

หากไม่มีเหตุผลในอดีตโดยเฉพาะสำหรับการตัดสินใจครั้งนี้สิ่งใดที่ทำให้เบราว์เซอร์ไม่สนับสนุนการสนับสนุน


3
นั่นเป็นการตัดสินใจที่ไม่ดี พวกเขาควรอนุญาตให้แสดงความคิดเห็นบรรทัดเดียว
Tulains Córdova

1
@ Goose: คุณดูsass-lang.comหรือไม่
วินไคลน์

2
เกี่ยวข้อง: stackoverflow.com/questions/2479351/…
Eric King

1
@ TulainsCórdovaฉันไม่ได้รับรองคำตอบเพียงชี้ให้เห็นว่าการสนทนานี้ได้รับการแล้ว
Eric King

2
คำถามนั้นได้รับคำตอบที่เป็นเทคนิคมากกว่าคำตอบที่นี่ "CSS ปฏิบัติต่อบรรทัดใหม่เช่นช่องว่างอื่น ๆ ทั้งหมดและจะไม่สามารถระบุจุดสิ้นสุดของความคิดเห็นได้โดยไม่ต้องมีตัวคั่นที่สิ้นสุด"
ห่าน

คำตอบ:


9

เข้ากันได้ย้อนหลัง

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

CSS ถูกกำหนดด้วยกฎการแยกวิเคราะห์ที่ "ผิดพลาด" ที่แม่นยำมากซึ่งหมายความว่าแม้ว่าคุณจะเขียนสิ่งที่ผิดกฎหมาย syntactically มีกฎที่แม่นยำสำหรับวิธีการแยกวิเคราะห์ควรดำเนินการต่อไป หาก//ตรวจพบลำดับของอักขระที่ผิดกฎหมายภายในการประกาศการประกาศปัจจุบันจะถูกยกเลิกและทุกอย่างจนกว่าเซมิโคลอนถัดไปจะถูกข้าม

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

แต่ตรรกะนี้ถือว่า "หน่วย" ที่จะประมวลผลหรือข้ามคือการประกาศ หากความคิดเห็นบรรทัดเดียวถูกนำมาใช้ก็จะหมายถึงการแยกวิเคราะห์หลังจาก//ควรข้ามไปจนถึงการแยกบรรทัดต่อไปแทนจนกว่าจะถึงเครื่องหมายอัฒภาคต่อไปซึ่งการเปลี่ยนแปลงซึ่งกฎจะแยกวิเคราะห์และที่จะข้าม สิ่งนี้อาจเปลี่ยนความหมายของไฟล์ CSS ที่มีอยู่ในรูปแบบที่น่าแปลกใจ

ตัวอย่าง:

P { font: 12px//16px; }
... hundreds of additional lines of CSS...

ที่นี่ฉันผิดสองครั้งอย่างเจ็บแสบ ผลที่ตามมาคือการประกาศแบบอักษรจะถูกละเว้น แต่ส่วนที่เหลือทั้งหมดทำงานได้ดี หาก//มีการแนะนำการสนับสนุนสำหรับ-comments ในทันทีวงเล็บปีกกาปิดจะถูกใส่ความคิดเห็นออกซึ่งอาจทำลายสไตล์ชีตที่เหลือทั้งหมด

ตอนนี้คุณสามารถพูดได้ว่ามันเป็นความผิดของตัวเองตั้งแต่ฉันทำผิดพลาด แต่นี่ไม่ได้เปลี่ยนแปลงว่าหน้าเว็บจำนวนหนึ่งที่ไม่รู้จักบนอินเทอร์เน็ตอาจแตกหรือแสดงผลแปลก ๆ ด้วยเหตุผลที่คลุมเครือ

การเปลี่ยนแปลงใด ๆ ที่ทำลายความเข้ากันได้แบบย้อนหลังควรได้รับการพิจารณาอย่างระมัดระวังและความคิดเห็นแบบบรรทัดเดียวอาจไม่น่าสนใจเพียงพอสำหรับความเสี่ยง

ดังนั้นหาก CSS ควรมีความคิดเห็น singe-line ก็ควรได้รับการแนะนำตั้งแต่ต้น แต่ CSS เริ่มต้นจากภาษาที่ง่ายมากและการมีไวยากรณ์ความคิดเห็นที่แตกต่างกันสองแบบจะถูกมองว่าเป็นความซับซ้อนที่ไม่จำเป็นในเวลานั้น (แม้แต่ ANSI C ไม่มีความคิดเห็นแบบบรรทัดเดียว)


โอ้ // เป็นโทเค็นใน CSS หรือไม่ บอก.
Michael Blackburn

ในปัจจุบัน//จะถูกแยกวิเคราะห์เป็นสอง "delim โทเค็น" ด้วยในทางกลับกันไม่ได้รับอนุญาตที่ใดก็ได้ในไวยากรณ์ ดูw3.org/TR/css-syntax-3/#tokenizationสำหรับรายละเอียด
JacquesB

+1 สำหรับ MainMa สำหรับสาเหตุที่เริ่มต้นด้วย/**/แต่ยอมรับสิ่งนี้เพราะยังระบุถึงสาเหตุที่ไม่เปลี่ยนแปลง
Goose

8

การสนับสนุนองค์ประกอบไวยากรณ์อื่นนั้นไม่ใช่เรื่องง่าย: มีเครื่องมือมากมายที่ควรจะสามารถจัดการกับสไตล์ความคิดเห็นเพิ่มเติมได้ อันที่จริงผมจะไม่แปลกใจที่จะเห็นว่าส่วนใหญ่ tokenizers / parsers ;ก็ไม่สนใจการขึ้นบรรทัดใหม่อาจจะแทนที่พวกเขาโดย

ถ้ามันจำเป็นต่อภาษาเช่นทำให้ชีวิตของนักพัฒนาง่ายขึ้นมากสิ่งนี้สามารถทำได้ ตัวอย่างเช่นไม่มีความคิดเห็นใด ๆใน CSS จะดูดและมันจะคุ้มค่าความพยายามที่จะเพิ่มองค์ประกอบไวยากรณ์เฉพาะที่คั่นความคิดเห็น //- สไตล์ความคิดเห็นในทางตรงกันข้าม ... ฉันไม่เห็นประเด็น ดู/* Hello, World! */: ความคิดเห็นแบบหนึ่งบรรทัด

ที่จริงแล้วคุณอาจคาดหวัง//ความเห็นสไตล์เพราะคุณคุ้นเคยกับพวกเขาใน C ++ หรือภาษาที่คล้ายกัน อย่างไรก็ตาม CSS ไม่ได้สืบทอดมาจาก C ++ ดังนั้นการคาดหวังว่าฟีเจอร์ไวยากรณ์ที่คล้ายกันจะค่อนข้างแปลก

ในทำนองเดียวกันโปรแกรมเมอร์ Python จะอ้างว่า CSS ควรมี#ความคิดเห็นสไตล์ ดังนั้นตอนนี้เราต้องสนับสนุนทั้งสองสไตล์หรือไม่? จากนั้นชายคนหนึ่งจากโลก Haskell จะขอให้รวม--และ{- -}เช่นกันและคุณจะถามตัวเองว่าทำไมคุณไม่จำรหัส CSS อีกต่อไป

ประโยชน์เล็กน้อยของ//คือคุณไม่ต้องพิมพ์อักขระเพิ่มอีกสามตัวในตอนท้ายของความคิดเห็นบรรทัดเดียวของคุณ (จริง ๆ แล้วถ้าเราเริ่มนับตัวอักษร CSS ควรใช้ความคิดเห็นสไตล์งูหลาม) อย่างไรก็ตามหากคุณใช้โปรแกรมแก้ไขข้อความที่ดีคุณจะแสดงความคิดเห็น / ไม่ใส่ข้อความโดยกดปุ่มลัดต่อไป

พวกเขา [... ] ดูเหมือนมีประโยชน์อย่างยิ่งสำหรับภาษาเช่น CSS ที่แต่ละกฎอยู่ในบรรทัดของตัวเอง

ดังที่ฉันอธิบายพวกมันมีประโยชน์เพียงเล็กน้อยสำหรับโปรแกรมเมอร์ย่อยเพียงเล็กน้อยโดยใช้โปรแกรมแก้ไขข้อความเล็ก ๆ สำหรับคำพูดของคุณเกี่ยวกับกฎแต่ละข้อในบรรทัดของตัวเอง (ฉันไม่เห็นด้วยกับคำพูดของคุณโดยวิธี) สิ่งนี้ทำให้ฉันคิดเกี่ยวกับจุดอื่น: วิธีการใช้ความคิดเห็นจริง

นี่คือการใช้ความคิดเห็น CSS ที่ฉันคิดได้:

  • ในฐานะที่เป็นส่วนหัวของไฟล์ (ข้อมูลลิขสิทธิ์, สิ่งที่มีความสำคัญเป็นต้น)
  • เป็นตัวคั่นของกลุ่มของสไตล์
  • เป็นคำอธิบายของการแฮ็ค
  • เป็นรายละเอียดเกี่ยวกับสไตล์หรือคุณสมบัติเฉพาะ

ในสามกรณีแรกคุณจะใช้ความคิดเห็นแบบหลายบรรทัดก็ได้ สิ่งนี้ชัดเจนสำหรับส่วนหัวของไฟล์และคำอธิบายของการแฮ็ก (แฮ็กส่วนใหญ่ต้องการประโยคและไฮเปอร์ลิงก์ไปยัง StackOverflow หรือบทความบล็อก) สำหรับตัวคั่น:

/**
 * Footer and sitemap styles.
 */

ความคิดเห็นแบบ C สามารถมองเห็นได้มากกว่า:

// Footer and sitemap styles.

ฝังอยู่ในข้อความ


JavaScript ยังสนับสนุน//ความคิดเห็นบรรทัดเดียว
Tulains Córdova

ฉันเถียงว่า//เป็นเรื่องธรรมดามากในหลายภาษาและแนวคิดเบื้องหลังคือมากกว่าไวยากรณ์มันยังทำงานแตกต่างกัน ที่กล่าวว่านี่เป็นคำตอบที่ลึกซึ้งที่สุด
ห่าน

ฉันไม่คิดว่ามันเป็นเซตย่อยขนาดเล็กเลย ทุกคนที่เขียน CSS ใน raw จะพบว่าการเพิ่มความคิดเห็นด้วย // แต่จุดที่เข้ากันได้ด้านหลังทำให้เป็นที่สงสัย
O'Rooney

-5

ปัญหาคือภาษาส่วนใหญ่ที่มีความคิดเห็น (เช่น C #, Java) เป็นภาษาที่รวบรวมและคอมไพเลอร์จะตัดความคิดเห็นทั้งหมดก่อนที่จะนำเสนอเนื้อหาต่อผู้บริโภค (CPU) CSS ไม่ถูกคอมไพล์ โดยทั่วไปไฟล์จะถูกส่งไปโดยไม่เปลี่ยนแปลงเมื่อผู้ออกแบบพัฒนาขึ้นดังนั้นจึงไม่มีโอกาสที่จะตัดความคิดเห็นออก ความคิดเห็นสไตล์นั้นต้องใช้ทั้งสัญลักษณ์ // และตัวดึงข้อมูลบรรทัดเพื่อรักษาความถูกต้องทางไวยากรณ์

ใช่มีตัวคั่นขนาดเล็กและใช่จาวาสคริปต์อนุญาตให้แสดงความคิดเห็นประเภทนี้ Javascript ยังอนุญาตให้ eval () ดังนั้นฉันไม่คิดว่าเราต้องการที่จะใช้เป็นแบบจำลอง


3
คำตอบนี้ไม่สมเหตุสมผลเลย "ไม่มีโอกาสที่จะดึงความคิดเห็นออก" - แน่นอนว่าความคิดเห็นนั้นถูกแยกออกโดยตัวแยกวิเคราะห์เหมือนกับภาษาอื่น ๆ มิฉะนั้น CSS จะมี/* */ความคิดเห็นได้อย่างไร
JacquesB

ฉันหมายถึงตัวกลางบุคคลที่สามระหว่างผู้ออกแบบและผู้บริโภค คอมไพเลอร์เป็นตัวกลางในภาษาที่รวบรวม "parser" ที่คุณอ้างถึงคือระบบย่อยของเบราว์เซอร์ซึ่งเป็นผู้บริโภคขั้นสูงสุดของเนื้อหา
Michael Blackburn

ดังนั้นทำไมลาดเทแถบ parser ออก//ความเห็นเมื่อมันสามารถดึงออกจาก/* */?
JacquesB

1
ทำได้ แต่ต้องค้นหาทั้ง // และการป้อนบรรทัดและการป้อนบรรทัดเป็นเนื้อหาเชิงความหมายส่วนใหญ่ไม่ใช่เชิงประโยค CSS ตามที่ได้รับการออกแบบถือว่าช่องว่างทั้งหมดเหมือนกัน เพื่อรองรับ // ตอนนี้คุณมีช่องว่าง "พิเศษ" และยิ่งไปกว่านั้นช่องว่าง "พิเศษ" อาจเป็นอักขระหนึ่งตัว (\ n) และอาจเป็นสอง (\ r \ n)
Michael Blackburn

3
@MichaelBlackburn: DSSSL (ซึ่งเป็นบรรพบุรุษของ CSS โดยใช้ไวยากรณ์ S-expression) ยังมีความคิดเห็นบรรทัดเดียว มันไม่มีส่วนเกี่ยวข้องกับภาษาที่มีความจำเป็นเมื่อเทียบกับภาษาที่ประกาศ
JacquesB
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.