Задать вопрос
Nikulio
@Nikulio
NaN !== NaN

Как сделать, что бы ховер на элемент применялся и к детям?

Всем привет
Проблема в том, что при ховере на .top-menu__user появляется .user-logout, но как только я убираю ховер с .top-menu__user, .user-logout схлопывается. Как это можно пофиксить?
Такой код :

userHoverIn = () => {
    this.setState({
      onHoverUser: true
    })
  };
  userHoverOut = () => {
    this.setState({
      onHoverUser: false
    })
  };


return (
        <div
            onMouseOver={this.userHoverIn}
            onMouseOut={this.userHoverOut}
            className="top-menu__user">
          <img className="user-icon" src="/img/logo.jpg" alt=""/>
          <span>{user}</span>
          <Link className={this.state.onHoverUser ? "user-logout" : "user-logout hide"} to="/">
            <MdExitToApp className="icon"/>
            Logout
          </Link>
          <div className="icon"><MdArrowDropDown/></div>
        </div>
    );


.top-menu__user {
    display: flex;
    align-items: center;
    position: relative;
}


.user-logout {
  position: absolute;
  bottom: -25px;
  justify-content: center;
  align-items: center;
  width: 100%;
  color: $orange;
  display: flex;
  &.hide {
    display: none;
  }
  .icon {
    font-size: 20px;
    margin-right: 5px;
  }
}
  • Вопрос задан
  • 135 просмотров
Подписаться 2 Простой 3 комментария
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
Не стоит полагаться на эти события, они не всегда срабатывают.
В первую очередь надо избавиться от зазора между родительским и дочерним элементом. Меню dropdown по-хорошему должно иметь позицию top: 100%. Для имитации зазора можно использовать контейнер с padding.
А можно что-то вроде:
.user-logout {
  border-top: 5px solid transparent;
  background-clip: padding-box;
}

Путей много на самом деле.

Саму задачу проще решить через css, без лишнего пререндера компонента.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы