ฉันเคยให้ฟังก์ชันที่มีประโยชน์ในบล็อกโพสต์เดียว และมีการใช้กันอย่างแพร่หลายในบล็อกโพสต์ของฉันหลายรายการ ฉันอ่านมามากเมื่อเร็วๆ นี้ ดังนั้นฉันจึงเขียนบล็อกโพสต์นี้เพื่อแยกแยะสิ่งใหม่ๆ ที่ฉันได้เรียนรู้
ไม่ต้องสงสัยเลยว่าตามหลักการของการแยกประสิทธิภาพและโครงสร้าง การนำเข้าสไตล์ชีตใหม่โดยตรงเป็นตัวเลือกที่ดีที่สุด แต่ในบางกรณี มันจะไม่ทำงาน ตัวอย่างเช่น หากเราสร้าง DIV แบบลากได้ จากมุมมองของ การตั้งค่าสไตล์คือ ตำแหน่งอย่างแน่นอน เพื่อป้องกันไม่ให้ส่งผลกระทบต่อการไหลของเอกสารต้นฉบับ จากนั้นเปลี่ยนค่าด้านบนและซ้ายทีละน้อยเพื่อให้ได้เอฟเฟกต์ของการเคลื่อนไหว เนื่องจากการลากมีแนวคิดเรื่องเวลา 24 เฟรมต่อวินาที จึงเป็นไปไม่ได้ที่จะรวมทุกอย่างไว้ในสไตล์ชีต ดังนั้นจึงจำเป็นอย่างยิ่งที่จะต้องสร้างกฎสไตล์แบบไดนามิกและแก้ไขกฎสไตล์อย่างรวดเร็ว W3C ได้ทำงานหลายอย่างเพื่อสิ่งนี้ ใน DOM2.0 อินเทอร์เฟซจำนวนมากได้รับการขยาย
หากต้องการย้อนกลับไป การแยกประสิทธิภาพและโครงสร้างไม่ได้จำกัดอยู่เพียงการนำเข้าสไตล์ชีตเท่านั้น คุณรู้ไหมว่ามีสไตล์สามประเภท ได้แก่ สไตล์ภายนอก สไตล์ภายใน และสไตล์อินไลน์
อินเทอร์เฟซที่เพิ่มใหม่ส่วนใหญ่จะเน้นไปที่สไตล์ภายนอก - ฉันพูดว่าอินเทอร์เฟซเพราะเบราว์เซอร์มีการใช้งานที่เกี่ยวข้อง พวกหยิ่งเช่น IE6 ไม่เคยละเลยการมีอยู่ของพวกเขา
ในโมเดล W3C แท็กลิงก์และแท็กสไตล์ประเภท "text/css" เป็นตัวแทนของออบเจ็กต์ CSSStyleSheet เราสามารถรับออบเจ็กต์ CSSStyleSheet ทั้งหมดในหน้าปัจจุบันผ่าน document.styleSheets แต่นี่เป็นคอลเล็กชัน ไม่ใช่เรื่องง่าย อาร์เรย์ แต่ละวัตถุ CSSStyleSheet มีคุณสมบัติดังต่อไปนี้
วัตถุกฎสไตล์ (วัตถุ CSSStyleRule) ได้รับการพัฒนาโดย W3C เพื่อกำหนดสไตล์ในรายละเอียดเพิ่มเติม ตัวอย่างเช่น สิ่งต่อไปนี้สอดคล้องกับวัตถุกฎสไตล์:
ปุ่ม [ประเภท] {
การขยาย:4px 10px 4px 7px;
ความสูงของบรรทัด:17px;
-
วัตถุกฎสไตล์มีแอตทริบิวต์หลักดังต่อไปนี้: type, cssText, parentStyleSheet, parentRule
Type ค่อนข้างคล้ายกับ nodeType ซึ่งแบ่งย่อยกฎสไตล์ โดยจะใช้จำนวนเต็มเพื่อแสดงประเภท สถานการณ์เฉพาะมีดังนี้
จำเป็นต้องพูด cssText เป็นแอตทริบิวต์ที่มีประโยชน์มากที่จะแปลงสตริงให้เป็นกฎสไตล์โดยตรง โดยไม่สนใจความแตกต่างในแอตทริบิวต์สไตล์ของแต่ละเบราว์เซอร์ เช่น cssFloat และ styleFloat
parentStyleSheet และ parentRule เป็นทั้ง @import อย่างไรก็ตาม @import มีปัญหาภายใต้ IE ดังนั้นโดยพื้นฐานแล้วฉันจะไม่ใช้มัน