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 просмотров
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
Не стоит полагаться на эти события, они не всегда срабатывают.
В первую очередь надо избавиться от зазора между родительским и дочерним элементом. Меню dropdown по-хорошему должно иметь позицию top: 100%. Для имитации зазора можно использовать контейнер с padding.
А можно что-то вроде:
.user-logout {
  border-top: 5px solid transparent;
  background-clip: padding-box;
}

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

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

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

Войти через центр авторизации
Похожие вопросы