2017-01-23 6 views
3

Я знаю, это можно сделать в JavaScript, однако я ищу решение в CSS.Скрыть элемент при наведении на другой элемент

У меня есть три div.

  • div # hide должно быть видимым по умолчанию, #show должно быть скрыто.
  • Когда я наводил #main, #hide должен скрываться, а #show должен быть видимым.

div # show работает отлично, но #hide не скрывается, когда #main зависает. Как мы можем это сделать в css?

#show { 
 
    display: none 
 
} 
 
#main:hover + #show { 
 
    display: block 
 
} 
 
#main:hover + #hide { 
 
    display: none 
 
}
<div id="main"> 
 
    Hover me 
 
</div> 
 
<div id="show"> 
 
    Show me on hover 
 
</div> 
 
<div id="hide"> 
 
    Hide me on hover 
 
</div>

+0

Посмотрите, что делает '+' в селекторе. При этом вы также должны найти более общий аналог. – CBroe

+0

https://fiddle.jshell.net/393wqmwp/1/ –

ответ

4

Вместо + вы хотите использовать ~ комбинатор для hide элемента, потому что + выбирает только следующего родственный

#show { 
 
    display: none 
 
} 
 
#main:hover + #show { 
 
    display: block 
 
} 
 
#main:hover ~ #hide { 
 
    display: none 
 
}
<div id="main"> 
 
    Hover me 
 
</div> 
 
<div id="show"> 
 
    Show me on hover 
 
</div> 
 
<div id="hide"> 
 
    Hide me on hover 
 
</div>

1

Вы только ч пр заменить селектор + с ~ причина в #hide не помещается после #main

Так что ваш код:

#show {display:none} 
#main:hover + #show { display:block } 
#main:hover ~ #hide { display:none } 
0

Вы имеете использовать Тильда «~» для этого случая.

Разница между + и ~ состоит в том, что ~ соответствует всем следующим братьям и сестрам независимо от их близости от первого элемента, если они оба имеют один и тот же родитель.

#show {display:none} 
    #main:hover + #show { display:block } 
    #main:hover ~ #hide { display:none } 
0

Попробуйте что-то вроде этого: "#main: парить + #show + #hide"

div#show { 
    display:none; 
} 
#main:hover + #show { 
    display:block 
} 
#main:hover + #show + #hide { 
    display:none 
} 

Это работает для меня.