2015-06-02 50 views
8

在此代碼:CSS /更少/薩斯 - 匹配每一個兄弟姐妹以前當:懸停

<div id="Container"> 
    <span class='first'>First</span> 
    <span class='second'>Second</span> 
    <span class='third'>Third</span> 
</div> 

我想改變顏色,:hover時。

  1. IF(.first:hover)THEN .first { color: red; }
  2. IF(.second:hover)THEN .first, .second { color: red; }
  3. IF(.third:hover)THEN .first, .second, .third { color: red; }

沒有JS這可能嗎?我可以接受CSS黑客:)


可能的答案:

  1. @panther的回答

更難版本:

<div id="Container"> 
    <span class='first' style='color: red'>First</span> 
    <span class='second' style='color: green'>Second</span> 
    <span class='third' style='color: blue'>Third</span> 
</div> 
  1. IF(.first:hover)THEN .first { color: pink; }
  2. IF(.second:hover)THEN .first, .second { color: pink; }
  3. IF(.third:hover)THEN .first, .second, .third { color: pink; }

答案:

  1. @Armfoot的答案似乎不錯:)
+0

據我知道這是不可能的,因爲少還編譯成CSS和你正在尋找的是不可能的CSS。 (*注意:*我不包括任何可能的黑客,當我說不可能與CSS) – Harry

+0

@哈利永遠不要說永遠......也許可以做的事情'@ at-root'屬性,所有的共同類爲父母......我仍然在想這個。 +1挑戰:P – Armfoot

+0

@Armfoot:這就是爲什麼我說,我不包括黑客。 – Harry

回答

1

我想通了與@each in SASS的方式設在panther's answer

$containerID: FirstSecondThird-Container; 
##{$containerID}:hover span {color:pink} 
@each $spanclass, $spancolor in (first, red), (second, green), (third, blue) { 
    ##{$containerID} span:hover ~ .#{$spanclass}, .#{$spanclass} { 
    color: #{$spancolor}; 
    } 
} 

這是一個有點短,但這裏的結果(生成CSS):

#FirstSecondThird-Container:hover span { 
 
    color: pink; 
 
} 
 
#FirstSecondThird-Container span:hover ~ .first, .first { 
 
    color: red; 
 
} 
 
#FirstSecondThird-Container span:hover ~ .second, .second { 
 
    color: green; 
 
} 
 
#FirstSecondThird-Container span:hover ~ .third, .third { 
 
    color: blue; 
 
} 
 

 
span {display: block;} /* this line was not generated, it's just to place them vertically */
<div id="FirstSecondThird-Container"> 
 
    <span class='first'>First</span> 
 
    <span class='second'>Second</span> 
 
    <span class='third'>Third</span> 
 
</div>

哪有類似的規則panther's fiddle

尼斯挑戰123qwe :)

7

在CSS中沒有以前的兄弟選擇器,但是......有時候可以使用已知的選擇器來完成。有時。

<style> 
    span {color: #000; display: block;} 
    div:hover span {color: #f00;} 
    span:hover ~ span {color: #000} 
</style> 

<div id="FirstSecondThird-Container"> 
    <span class='first'>First</span> 
    <span class='second'>Second</span> 
    <span class='third'>Third</span> 
</div> 

https://jsfiddle.net/45zLdcvr/

它與blockspan S(飄來,當然)。與span s有默認display: inline它會閃爍,當你將盤旋div跨度之間的空間。

UPDATE
你更新時,每個跨度有自己的顏色的問題,那麼它可能是:

span {color: red} 
.second {color: green} 
.third {color: blue} 

span {display: block;} 
div:hover span {color: pink;} 
span:hover ~ .second {color: green} 
span:hover ~ .third {color: blue} 

https://jsfiddle.net/45zLdcvr/1/

+0

我認爲,我可以使用'border:1px solid transparent'作爲內嵌(-block/-flex)跨度作爲閃爍補丁。 – 123qwe

+0

是的,這可能是最好的方法。做得好! +1 – Danield

1

這是我認爲可以做你要找什麼實現整齊

@mixin color_on_hover($class){ 

@if $class==first {span:nth-of-type(1){color:red;}} 
@else if $class==second {span:nth-of-type(1), span:nth-of-type(2){color:red;}} 
@else if $class==third {span:nth-of-type(1), span:nth-of-type(2), span:nth-of-type(3){color:red;}} 

} 
span.first:hover{ 
@include color_on_hover(first); 
} 
span.second:hover{ 
@include color_on_hover(second); 
} 
span.third:hover{ 
@include color_on_hover(third); 
} 

希望它有幫助!

+0

對不起Django,這產生像'span.first:hover span.nth-of-type(1)'這樣的規則,因此它不回答這個問題(並且你忘記了'include'中的'c')。想想看。 – Armfoot

+0

是的,它的定製水平更高,嘗試爲每個動作定義不同的顏色,你會發現自己不得不制定這些規則。 –

+0

[這個小提琴有從你的代碼生成的CSS](https://jsfiddle.net/45zLdcvr/2/),它不提供解決方案...與[panther的小提琴]比較(https://jsfiddle.net/ 45zLdcvr/1 /)正在工作...... – Armfoot