Конфликтующие псевдо-классы при наведении - PullRequest
0 голосов
/ 30 августа 2018

У меня есть ситуация, когда я изменяю элемент с помощью псевдокласса hover как при наведении курсора на родительский элемент, так и при наведении курсора. К сожалению, у них есть конфликтующее свойство (оба пытаются определить свойство transform), поэтому - я полагаю - масштабирование не работает, когда кнопка находится над курсором, а курсор изменяется. Есть ли способ обойти использование только CSS?

body {
  overflow: hidden;
 }

#action-panel {
    align-items: center;
    box-sizing: border-box;
    display: flex;
    flex-direction: column;
    justify-content: center;
    padding: 20px 20px 20px 20px;
    position: absolute;
    right: 0;
    transform: translateY(-50%);
    top: 50%;
}

#action-panel:hover .action-button {
    opacity: 1;
    transform: translateX(0);
}

.action-button {
    background-color: lightblue;
    border-radius: 25px;
    height: 50px;
    margin-bottom: 20px;
    opacity: 0;
    transition: opacity 200ms ease-in-out, transform 200ms ease-in-out;
    transform: translateX(calc(100% + 20px));
    width: 50px;
}

.action-button:hover {
    cursor: pointer;
    transform: translateX(0) scale(1.2);
}

.action-button span {
    font-size: 30px;
    left: 50%;
    position: relative;
    transform: translate(-50%, -50%);
    top: 50%;
}
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<div id="action-panel">
    <div class="action-button"><span class="material-icons">3d_rotation</span></div>
    <div class="action-button"><span class="material-icons">compare_arrows</span></div>
    <div class="action-button"></div>
</div>

Примечание:

Если вы не можете узнать из кода, вам нужно переместить курсор в середину правого края, чтобы увидеть эффекты, которые я описываю.

1 Ответ

0 голосов
/ 30 августа 2018

Увеличил специфичность следующего стиля, добавив #action-panel перед ним. В вашем коде стили наведения родительского элемента перекрывали стили наведения дочернего элемента.

 #action-panel .action-button:hover {
  cursor: pointer;
  transform: translateX(0) scale(1.2);
}

body {
  overflow: hidden;
}

#action-panel {
  align-items: center;
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: 20px 20px 20px 20px;
  position: absolute;
  right: 0;
  transform: translateY(-50%);
  top: 50%;
}

#action-panel:hover .action-button {
  opacity: 1;
  transform: translateX(0);
}

.action-button {
  background-color: lightblue;
  border-radius: 25px;
  height: 50px;
  margin-bottom: 20px;
  opacity: 0;
  transition: opacity 200ms ease-in-out, transform 200ms ease-in-out;
  transform: translateX(calc(100% + 20px));
  width: 50px;
}

#action-panel .action-button:hover {
  cursor: pointer;
  transform: translateX(0) scale(1.2);
}

.action-button span {
  font-size: 30px;
  left: 50%;
  position: relative;
  transform: translate(-50%, -50%);
  top: 50%;
}
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<div id="action-panel">
  <div class="action-button"><span class="material-icons">3d_rotation</span></div>
  <div class="action-button"><span class="material-icons">compare_arrows</span></div>
  <div class="action-button"></div>
</div>
...