2012-08-07 55 views
1

在CSS中我將如何更改懸停測試1的顏色,但不是列表1,2,3的顏色?CSS Direct Decedent李

<ul> 
    <li> 
     test 1 
     <ul> 
      <li> List 1</li> 
      <li> List 2</li> 
      <li> List 3</li> 
     </ul> 
    </li> 
</ul> 
+0

一些線索:http://jsfiddle.net/hhauf/ – 2012-08-07 23:06:55

+0

這其實是一個很好的問題,但魔鬼的在細節中。一般的答案會有所幫助,但爲了達到最佳效果,您必須根據您的標記是什麼*確切*您想要發生的事情來排除故障。因爲風格是繼承的,所以我沒有意識到有什麼靈丹妙藥。 (我假設這個標記和你說的目標僅僅是爲了舉例的目的) – 2012-08-07 23:14:03

+0

請記住,由於'test 1'不在與該文本的父'li'元素中包含的'ul'分離的後代元素中,所以必須在':hover'上「返回」子元素的'color'定義。換句話說,它不是那麼幹淨。但是,你可以這樣做:http://jsfiddle.net/hhauf/3/如果這就是你想要的,那麼它會更乾淨。 – 2012-08-07 23:14:32

回答

4

的一個方法是指定的「默認」顏色:

li:hover { 
    color:#f00; 
} 
li, li:hover li { 
    color:#000; 
}​ 

http://jsfiddle.net/D8dwt/1/

另一個(作弊?)是使用多個標記來包裝你想風格上懸停的內容:

li:hover span { 
    color:#f00; 
}​ 
<ul> 
    <li> 
     <span>test 1</span> 
     <ul> 
      <li> List 1</li> 
      <li> List 2</li> 
      <li> List 3</li> 
     </ul> 
    </li> 
</ul>​ 
+0

我不認爲這是作弊,我認爲它是*理智*。 – 2012-08-07 23:17:36

+0

我也認爲'span'方法是最好的答案,它有最清晰的代碼。 – insertusernamehere 2012-08-07 23:23:47

+1

很多人不喜歡(ab)爲這樣的東西使用泛型標籤,我想我主要是迎合這些人(它確實會給HTML添加無意義的大量/混亂)。另一個缺點是,改變標記並不總是一種選擇。然而,在現實世界中,我可能會這樣做,但第一種選擇可能是最優雅和最不整體的代碼。問題在於你需要*知道*使用什麼顏色,並且不能繼承它。 – 2012-08-07 23:31:39

1

這是一條路可走:

ul > li { 
    color: red; 
} 

ul > li:hover { 
    color: blue; 
} 

ul > li:hover > ul > li { 
    color: red; 
} 
+0

你其實不*那麼多:http://jsfiddle.net/hhauf/2/ – 2012-08-07 23:10:44

+0

是的,你可以擺脫子選擇器,並使用更通用的descanted選擇器。但子選擇器可能比descanted選擇器更快:http://stackoverflow.com/a/1182223/1456376 – insertusernamehere 2012-08-07 23:19:02

0

添加test1div元素,使其在一個單獨的一頁。

CSS:

div:hover { 
    color: blue; 
} 

雖然可能有辦法做到這一點不modifiying的HTML ..

0

給它自己的類,並在你的CSS文件中定義它。

<li class="yourclass"> 

或者把它標記,並定義鏈接在你的CSS

li.yourclass a:hover { 
    text-decoration: underline ; 
}