2012-08-16 204 views
0

假設我有這樣的HTML上:防止CSS:懸停元素

<div class="SomeClass">test</div> 
<div class="SomeClass" id="SomeID">test</div> 
<div class="SomeClass">test</div> 

這個CSS

.SomeClass{color:blue;} 
.SomeClass:hover{color:red} 

我想懸停效果不適用於SomeID股利。我可以用jQuery做到這一點,但我想知道是否有一種更簡單的方法來用CSS來做到這一點。

感謝您的建議。

+0

將'.SomeClass,#SomeID:hover {color:blue;}'視爲一種更簡單的方式嗎? )應該通過特異性來做到這一點。 – raina77ow 2012-08-16 15:53:48

回答

4

CSS解析的順序,也就是說如果你定義

.SomeClass:hover { color: red; } 

後,您再定義一個規則

#SomeId.SomeClass:hover { color: blue; } 

這應該 '覆蓋'最初的color: red;

+3

'#SomeId.SomeClass'符號有點多餘,我認爲:'id'按照定義應用於單個元素。並且由於其特殊性,其規則將覆蓋該類的規則。 – raina77ow 2012-08-16 15:55:55

+1

它可能是多餘的,但它確實有助於可讀性和理解。 – 2012-08-16 16:03:08

3

只需將其他規則分配給ID爲SomeID的div即可。這將覆蓋其他規則。

.SomeClass{color:blue;} 
.SomeClass:hover{color:red} 
#SomeID:hover{color:blue} 

jsFiddle example

1

只是簡單地覆蓋風格:

#SomeID:hover { 
    color:blue; 
} 

或者,你可以使用:

.SomeClass:not(#SomeID):hover { 
    color:red; 
} 

那麼很容易改變,但不太瀏覽器的支持。

0

讓我們來看看鏈接僞類特異性:

記住:LAHV:link:active:hover:visited)。

首先,爲了正確地級聯,讓我們把下面給.SomeClass

.SomeClass:link, .SomeClass:active, .SomeClass:visited { color: blue; } 
.SomeClass:hover { color: red; } 

接下來,讓我們指定#SomeID

#SomeID:hover { color: blue; } 

id總是優先於class