Подтвердить что ты не робот

CSS:: child установлен для изменения цвета в родительском зависании, но изменяется также при зависании

У меня есть <a> с <span> детьми. Я написал некоторый CSS, который меняет цвет границы дочерних элементов при наведении на них родительского элемента, но также меняет цвет границы при наведении на дочерние элементы, чего не следует делать.

a {
    padding: 50px;
    border: 1px solid black;
}

a span {
    position: absolute;
    top: 200px;
    padding: 30px;
    border: 10px solid green;
}

a:hover span {
    border: 10px solid red;
}   
<a>
    Parent text
    <span>Child text</span>    
</a>
4b9b3361

Ответ 1

Обновить

Нижеследующее имело смысл для 2013 года. Однако теперь я бы использовал селектор :not(), как описано ниже.


CSS может быть перезаписан.

ДЕМО: http://jsfiddle.net/persianturtle/J4SUb/

Использовать этот:

.parent {
  padding: 50px;
  border: 1px solid black;
}

.parent span {
  position: absolute;
  top: 200px;
  padding: 30px;
  border: 10px solid green;
}

.parent:hover span {
  border: 10px solid red;
}

.parent span:hover {
  border: 10px solid green;
}
<a class="parent">
    Parent text
    <span>Child text</span>    
</a>

Ответ 2

Если вы не заботитесь о поддержке старых браузеров, вы можете использовать :not(), чтобы исключить этот элемент:

.parent:hover span:not(:hover) {
    border: 10px solid red;
}

Демо: http://jsfiddle.net/vz9A9/1/

Если вы хотите их поддержать, я думаю, вам придется либо использовать JavaScript, либо переопределить свойства CSS еще раз:

.parent span:hover {
    border: 10px solid green;
}