2009-11-03 77 views
80

我今天在看一個CSS文件,發現如下規則集:星空屬性在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和*行高是什麼意思?

謝謝。

回答

92

與「下劃線黑客」一樣,這是「明星財產黑客」。它包括在IE忽略的屬性之前的垃圾(*工作到IE 7,直到IE 6)。

+7

謝謝!我擡頭看了一下「明星財產黑客」,發現了Ed Eliot發佈的這個清晰而全面的帖子: 「CSS提示:單獨針對IE 5.x,6和7」在http://www.ejeliot.com/blog/63 – 2009-11-03 14:27:59

+1

而不是使用CSS黑客,你也可以嘗試有條件的意見,即檢查http://www.quirksmode.org/css/condcom.html表單更多信息。 – 2010-06-15 19:53:22

+0

應該注意的是,Safari(7.0.1)及其之前的版本(無法驗證)會在您使用星級屬性hack時拋出控制檯警告。 – Jim 2014-02-21 21:11:07

32

在CSS中?沒有;這是一個錯誤。

由於某些版本的Internet Explorer存在錯誤,它們不會正確忽略無效的屬性名稱,所以這是提供特定於這些瀏覽器的CSS的一種方式。

雖然使用條件註釋更清晰和更安全。

+2

的確。應該避免CSS無效的CSS無效;你永遠不知道未來的瀏覽器可能會如何處理它們。 – bobince 2009-11-03 16:05:37

+0

@bobince我意識到你在過去發表了這樣的評論,但我們現在可以絕對確定每個瀏覽器將如何解釋這一點,因爲CSS解析算法非常嚴格,並告訴瀏覽器默默地忽略這些規則。 – mgol 2016-11-03 11:11:02

+1

@m_gol - 不,我們不能。我們不知道未來的CSS規範會在屬性前面說'*'的含義。如果它具有意義,那麼當前的瀏覽器將忽略它,從而允許安全地添加擴展。這是「必須忽略」規則的要點。 – Quentin 2016-11-03 11:11:55

7

asteriks字符是CSS中的有效通配符。單獨使用它意味着以下CSS屬性將用於DOM中的所有元素節點。示例:

上述屬性將應用於所有DOM元素,從而破壞CSS中的自然級聯。只有在該定位開始唯一標識符引用的情況下,才能通過專門標記DOM元素來覆蓋它。例如:

#uniqueValue div strong{color:#f00;} 

上述屬性將覆蓋通配符,併發生與「uniqueValue」的id屬性值的元素內一個div所有強元素的文本。

使用普遍適用的通配符(如第一個示例)可能是寫入重置樣式表的一種快速而髒的方法。它很快而且很髒,因爲在通配符之後呈現的細粒度定義可能會創建非常臃腫的樣式表。如果你要使用通配符我會建議使用它更具體,如:

* strong{color:#f00;} 

上面的例子將紅都強元素顏色的文字,無論不是一個唯一的標識符指定的其他CSS屬性。這被認爲比使用「!important」聲明更安全,因爲聲明已知會干擾預期行爲的自然功能,並且是維護的噩夢。

您示例中的星號出現在錯誤的位置,因爲它們似乎發生在屬性聲明內部,代碼位於大括號內,並且可能會導致錯誤。

+2

對於大多數信息量大的黑客無答案 – 2009-11-03 14:49:38

+31

內容翔實,是的,但與這個問題無關。 – 2010-08-07 20:15:37

+3

回答我爲什麼搜索,即使它不是正確的答案 – Steve 2014-03-07 12:44:15

4

這是IE7的黑客攻擊。

如果你這樣寫:

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

上尊重W3C標準的HTML元素<div class="test"></div>z-index: 1但IE7,這個元素有一個z-index: 2所有的導航儀。

這不是標準。

要達到同樣的事情,與W3C標準,按照此步驟:

  • 添加一些Internet Explorer的條件註釋(這是所有其他navigateur一個簡單的HTML註釋是這樣,這是一個標準的方式)。

    <! - [如果IE 7]> < HTML語言= 「FR」 類= 「IE7」> < [ENDIF]! - >

    <! - [如果GT IE 7]> < - > < HTML語言= 「FR」> < - < [ENDIF] - >

並使用以前的規則是這樣的:!!!

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