ตัวเลือก CSS ที่มีจุดใน ID


106

ข้อมูลจำเพาะ HTML อนุญาตให้มีจุด (.) ใน id:

<img id="some.id" />

อย่างไรก็ตามการใช้กฎตัวเลือกรหัส CSS จะจับคู่ไม่ถูกต้อง:

#some.id { color: #f00; }

ข้อกำหนด CSS สำหรับID Selectorsไม่ได้กล่าวถึงกรณีนี้ ดังนั้นฉันคิดว่ามันใช้การรวมกันของชื่อแท็กและตัวเลือกคลาส ? ยกตัวอย่างเช่นกฎของ CSS a.classNameจะใช้กับแท็กสมอ ( <a>) ที่มีชื่อชั้นเช่นclassName<a class="className"></a>

เป็นไปได้ไหมที่จะมีกฎไฟล์ CSS ภายนอกที่อ้างอิงองค์ประกอบ HTML โดย id ที่มีจุดอยู่

ฉันไม่คาดหวังเนื่องจาก CSS ระบุว่า " ตัวระบุ " CSS ไม่รวมจุดเป็นอักขระที่ถูกต้อง นี่เป็นความไม่ตรงกันพื้นฐานระหว่างข้อกำหนด HTML และ CSS หรือไม่? เป็นทางเลือกเดียวของฉันในการใช้การเลือก CSS ประเภทอื่นหรือไม่ มีใครฉลาดกว่าฉันยืนยันหรือปฏิเสธสิ่งนี้ได้ไหม

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


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

3
นอกจากนี้ยัง#some.idใช้การรวมกันของ ID และตัวเลือกคลาส
BoltClock

ID เป็นแอตทริบิวต์เดียวที่คุณมีเป็น style hook หรือไม่? ฉันรู้ว่ามันไม่ตรงประเด็น แต่ฉันสงสัยว่าทำไมคุณถึงต้องการใช้ ID แทน img หรือคลาส (ถ้ามี)
Jayx

@Jayx RE "ทำไมต้องใช้ ID แทน img (แท็ก) หรือคลาส" มันแตกต่างกันไปด้วยเหตุผลและสถานการณ์มากมาย แต่ในกรณีนี้องค์ประกอบเฉพาะที่จำเป็นต้องมีสไตล์ไม่ใช่รูปภาพทั้งหมดในหน้า สามารถใช้คลาสได้หากสามารถแก้ไข HTML ได้ แต่ในกรณีนี้จะไม่สามารถแก้ไขได้เนื่องจากสร้างขึ้นโดยระบบที่อยู่นอกเหนือการควบคุมของเรา
Jon Adams

คำตอบ:


206

หลังจากขุดดูรายละเอียดเพิ่มเติมแล้วฉันพบว่าข้อมูลจำเพาะ CSS อนุญาตให้แบ็กสแลช ( \) หลบหนีเหมือนภาษาส่วนใหญ่

ดังนั้นในตัวอย่างของฉันกฎต่อไปนี้จะตรงกัน:

#some\.id {
  color: #f00;
}

8
งานวิจัยที่ดี ควรมีการถาม - ตอบแบบนี้มากกว่า "เขียนโค้ดแทนตัวเอง"
Pavlo

3
การวิจัยที่ดี ฉันเพิ่งเจอสิ่งนี้ในแอปพลิเคชันระดับองค์กรขนาดใหญ่ที่ฉันกำลังทำงานอยู่ ฉันนิ่งงันโดยสิ้นเชิงและไม่เคยเห็นมาก่อน อะไรคือจุดที่ทำให้ id มีจุดในนั้น ??
Anthony

1
@Anthony: ไม่มีเหตุผลที่เฉพาะเจาะจงในการใส่จุดในแอตทริบิวต์รหัส HTML ฉันเดาว่าบางครั้งผู้เขียนแค่ต้องการ? บางทีในบางกรณีอาจมีการหลุดออกจากระบบการนำไปใช้งานที่อาจใช้ช่วงเวลาในตัวระบุรหัสฝั่งเซิร์ฟเวอร์สำหรับการประมวลผลแบบฟอร์ม? ฉันแน่ใจว่าทุกคนมีเหตุผลของตัวเอง แต่ไม่มีเหตุผล HTML / CSS ที่จะรวมไว้
Jon Adams

1
ขอบคุณฉันมีปัญหากับ OpenLayers เนื่องจากใช้จุดในรหัส ตัวอย่างเช่น: "OpenLayers.Control.Attribution_7" ฉันเดาว่ามันช่วยในเรื่องรหัสภายในที่พวกเขาสามารถกำหนดให้ชื่อตัวแปร javascript เป็นค่าเดียวกับ id ได้
Hoffmann

3
ฉันกำลังพิจารณาที่จะเพิ่มคำถามใหม่และเขียนคำตอบของตัวเอง แต่ตัดสินใจที่จะแสดงความคิดเห็นที่นี่ หากคุณใช้พรีโพรเซสเซอร์ Stylus คุณจำเป็นต้องใช้แบ็กสแลชสองตัวเช่น#some\\.idเพื่อหลีกเลี่ยงอักขระพิเศษ แบ็กสแลชแรกถูกใช้โดย Stylus โดยปล่อยให้แบ็กสแลชที่เหลืออยู่ใน CSS ที่คอมไพล์แล้วซึ่งจะได้ผลลัพธ์ที่ต้องการตามที่อธิบายไว้ในคำตอบนี้
markrian

24

คุณยังสามารถใช้ตัวเลือกแอตทริบิวต์เช่นนี้:

[id='some.id'] {
  color: #f00;
}

2
สิ่งนี้อาจใช้ได้ในบางเบราว์เซอร์ แต่ฉันพบข้อผิดพลาดเกิดขึ้นสำหรับตัวเลือกแอตทริบิวต์เช่นกัน คุณยังสามารถหลบหนี.ราวกับ\.ว่า
Chris Jaynes

0

เนื่องจากคุณใช้ id คุณจึงสามารถใช้ document.getElementById () ซึ่งตรวจสอบค่า id เป็นสตริงปกติไม่ใช่ตัวเลือก CSS เช่นงานต่อไปนี้ด้วย:

const myElem = document.getElementById("some.id");

ข้อเสียเปรียบเพียงประการเดียวคือคุณไม่สามารถ จำกัด ขอบเขตของการค้นหาได้เช่นเดียวกับที่คุณทำได้ด้วย querySelector เช่น someElement.querySelector () แต่เนื่องจากรหัสควรไม่ซ้ำกันเสมอการค้นหาเอกสารแบบกว้างด้วยรหัสจึงถูกต้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.