Разве текст не должен менять цвет после наведения «прямоугольника»?

0

HTML-код

<div class="box">
<p class="turn">shou</p>
</div>

CSS-код

.turn {
    font-size: 50px;
    text-align:center;
    padding:150px;
    color: white;
}
.box {
    height:500px;
    width:500px;
    background-color: blue
}
.box:hover ~ .turn {
    color: red;
}

jsfiddle

Итак, используя мою логику, после зависания на поле "ящик" текст должен стать красным. Я совершенно не уверен, почему этого не происходит.

Теги:

7 ответов

2
Лучший ответ

Вы используете селектор sibling ~ но .turn является дочерним элементом .box. Поэтому вам нужно использовать дочерний селектор, т.е. >.

.box:hover > .turn {
    color: red;
}

Демо-версия JsFiddle

1

~ является общим сочетанием братьев и сестер. .turn не является братом .box, поэтому стиль не применяется.

Вы можете использовать .box:hover.turn

1

Вы используете неправильный селектор:

Это сработает!

.box:hover > .turn {
  color: red;
}
0
    .box .turn:hover{
        color: red;
    }

Также вы можете использовать:

.box p.turn:hover{
    color: red;
}

если вы можете использовать прописку на.box, используйте это

.box:hover >p.turn{
    color: red;
}
  • 0
    Это не очень хорошее решение, если OP хочет, чтобы стиль изменился при наведении .box . добавление .box в .box не работает с вашим решением.
0

~ Селектор CSS называется селектором Sibling.

Если ваша разметка (HTML) была такой:

<div class="box">
</div>
<p class="turn">shou</p>

то ваш CSS будет работать отлично, потому что в дереве DOM узел <p> является дочерним узлом узла <div>.

Дерево DOM для HTML:

     <document-root>
            |
            |
     _______|_______
    |              |
  <div>           <p>

Но в вашей разметке элемент <p> фактически является дочерним узлом <div>. И дерево DOM было бы:

     <document-root>
            |
            |
          <div>
            |
            |
           <p>

Поэтому вы должны использовать дочерний селектор > поскольку <p> является прямым дочерним .box или вы можете просто оставить пробел между .box и .turn (это селектор потомков).

Итак, ваш окончательный CSS должен быть:

.turn {
    font-size: 50px;
    text-align:center;
    padding:150px;
    color: white;
}
.box {
    height:500px;
    width:500px;
    background-color: blue
}
.box:hover .turn {
    color: red;
}

Обновленная скрипка: http://jsfiddle.net/sH3Dh/7/

0

попробуй это...

.box:hover .turn{
color:red;
}
  • 0
    @musefan теперь проверьте отредактированный код ..
  • 0
    Я думаю, что это также поможет объяснить, что было не так с первоначальной попыткой, а не просто опубликовать какой-то измененный код. Посмотрите на ответ Сачина как на пример хорошего объяснения.
-1

Нет... потому что ~ - селектор, но в вашем примере элемент .turn является дочерним .box

http://net.tutsplus.com/tutorials/html-css-techniques/the-30-css-selectors-you-must-memorize/

  • 1
    так ... каково ваше предлагаемое решение тогда?
  • 0
    Я почти уверен, что он не упомянул решение, потому что там уже достаточно ответов.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню