คุณสมบัติที่นำหน้าใน CSS หมายถึงอะไร


85

วันนี้ฉันกำลังดูไฟล์ css และพบชุดกฎต่อไปนี้:

div.with-some-class {
    display:block;                   
    margin:0;
    padding:2px 0 0 0;
    *padding:1px 0 0 0;
    font-size:11px;   
    font-weight:normal;
    *line-height:13px;
    color:#3D9AD0;
}

ดาวหมายถึงอะไรใน * padding และ * line-height?

ขอบคุณ.

คำตอบ:


98

นี่คือ "การแฮ็กทรัพย์สินของดารา" ในบรรทัดเดียวกับ "การแฮ็กขีดล่าง" รวมถึงขยะก่อนคุณสมบัติที่ IE ละเว้น (* ทำงานได้ถึง IE 7, _ ถึง IE 6)


7
ขอบคุณ! และฉันก็ค้นหา "การแฮ็กคุณสมบัติดาว" และพบโพสต์ที่ชัดเจนและครอบคลุมนี้โดย Ed Eliot: "เคล็ดลับ CSS: กำหนดเป้าหมาย IE 5.x, 6 และ 7 แยกกัน" ในejeliot.com/blog/63
Majid Fouladpour

1
แทนที่จะใช้ css hacks คุณยังสามารถลองแสดงความคิดเห็นแบบมีเงื่อนไขได้เช่นตรวจสอบข้อมูลเพิ่มเติมจากquirksmode.org/css/condcom.html
Capi Etheriel

ควรสังเกตว่า Safari (7.0.1) และเวอร์ชันก่อนหน้า (ไม่สามารถตรวจสอบได้) จะส่งคำเตือนคอนโซลหากคุณใช้แฮ็คคุณสมบัติดาว
จิม

RIP IE7 และ 'การแก้ไข' ประเภทนี้
ChristoKiwi

หมายเหตุ: "เนื่องจากความคิดเห็นแบบมีเงื่อนไขใช้โครงสร้างความคิดเห็น HTML จึงสามารถรวมไว้ในไฟล์ HTML เท่านั้นและไม่สามารถรวมอยู่ในไฟล์ CSS" quirksmode.org/css/condcom.html
George Birbilis

32

ใน CSS? ไม่มีอะไร; มันเป็นข้อผิดพลาด

เนื่องจากข้อบกพร่องใน Internet Explorer บางเวอร์ชันจึงไม่สามารถเพิกเฉยต่อชื่อคุณสมบัติที่ไม่ถูกต้องได้อย่างถูกต้องดังนั้นนี่จึงเป็นวิธีหนึ่งในการให้ CSS ที่เฉพาะเจาะจงสำหรับเบราว์เซอร์เหล่านั้น

การใช้ความคิดเห็นแบบมีเงื่อนไขนั้นชัดเจนและปลอดภัยกว่า


2
แน่นอน. ควรหลีกเลี่ยงการแฮ็ก CSS ที่ไม่ใช่ CSS ที่ถูกต้อง คุณไม่มีทางรู้ว่าเบราว์เซอร์ในอนาคตจะทำอะไรกับพวกเขาได้
bobince

@bob เนื่องจากฉันรู้ว่าคุณแสดงความคิดเห็นนั้นในอดีต แต่ตอนนี้เรามั่นใจได้อย่างแน่นอนว่าทุกเบราว์เซอร์ในอนาคตจะตีความสิ่งนี้อย่างไรเนื่องจากอัลกอริธึมการแยกวิเคราะห์ CSS นั้นเข้มงวดมากและบอกให้เบราว์เซอร์เพิกเฉยต่อกฎดังกล่าวอย่างเงียบ ๆ
mgol

1
@m_gol - ไม่เราทำไม่ได้ เราไม่รู้ว่าข้อกำหนด CSS ในอนาคตจะพูดอย่างไรเกี่ยวกับความหมายของ*คุณสมบัติก่อน หากได้รับความหมายเบราว์เซอร์ปัจจุบันจะเพิกเฉยทำให้สามารถเพิ่มส่วนขยายได้อย่างปลอดภัย นั่นคือประเด็นของกฎ "ต้องละเว้น"
Quentin

8

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

*{color:#000;}

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

#uniqueValue div strong{color:#f00;}

คุณสมบัติข้างต้นจะแทนที่สัญลักษณ์แทนและสร้างข้อความขององค์ประกอบที่แข็งแกร่งทั้งหมดที่เกิดขึ้นใน div ภายในองค์ประกอบที่มีค่าแอตทริบิวต์ id เป็น "uniqueValue"

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

* strong{color:#f00;}

ตัวอย่างข้างต้นจะทำให้ข้อความขององค์ประกอบที่แข็งแกร่งทั้งหมดเป็นสีแดงโดยไม่คำนึงถึงคุณสมบัติ CSS อื่น ๆ ที่ไม่ได้ระบุด้วยตัวระบุที่ไม่ซ้ำกัน นี่ถือว่าปลอดภัยกว่าการใช้คำประกาศ "! important" มากเนื่องจากการประกาศดังกล่าวเป็นที่ทราบกันดีว่าก่อให้เกิดการรบกวนการทำงานตามธรรมชาติของพฤติกรรมที่ตั้งใจไว้และเป็นฝันร้ายของการบำรุงรักษา

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


4
ตอบสิ่งที่ฉัน googled แม้ว่ามันจะไม่ใช่คำตอบที่ถูกต้องก็ตาม
Steve

4

นี่คือแฮ็คสำหรับ IE7

ถ้าคุณเขียนสิ่งนี้:

.test {
    z-index: 1;
    *z-index: 2;
}

บนเนวิเกเตอร์ทั้งหมดที่เคารพ W3C Standard <div class="test"></div>HTMLElement มีz-index: 1แต่สำหรับ IE7 องค์ประกอบนี้มีz-index: 2.

นี่ไม่ใช่มาตรฐาน

เพื่อให้บรรลุสิ่งเดียวกันกับ W3C Standard ให้ทำตามขั้นตอนนี้:

  • เพิ่มข้อคิดเห็นแบบมีเงื่อนไขของ Internet Explorer (นี่เป็นความคิดเห็น HTML แบบง่ายสำหรับ navigateur อื่น ๆ ทั้งหมดดังนั้นจึงเป็นวิธีมาตรฐาน)

    <! - [ถ้า IE 7]> <html lang = "fr" class = "ie7"> <! [endif] ->

    <! - [ถ้า gt IE 7]> <! -> <html lang = "fr"> <! - <! [endif] ->

และใช้กฎก่อนหน้านี้ดังนี้:

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