Внутренний div колеблется при использовании CSS-перехода на родительском div - PullRequest
0 голосов
/ 01 ноября 2018

Пожалуйста, запустите мой пример кода и наведите курсор на черный квадрат, почему внутренняя div, белая граница div колеблется / дрожит? Как мне заставить это перестать делать это?

body {
  min-height: 100vh;
  display: flex;
}

.main-container {
  display: flex;
  justify-content: center;
  align-items: center;
  flex: 1;
}

.transition-container {
  background: black;
  width: 100px;
  height: 100px;
  display: flex;
  justify-content: center;
  align-items: center;
  margin: 20px;
  transition-duration: 1.25s;
  transition-property: margin, width, height;
}

.transition-container:hover {
  margin: 0;
  width: 120px;
  height: 120px;
}

.inner-container {
  border: 4px solid white;
  width: 60px;
  height: 60px;
}
<div class="main-container">
  <div class="transition-container">
    <div class="inner-container">
    </div>
  </div>
</div>

Цель

  • При наведении курсора на мой внешний div (<div class="transition-container">) я хочу, чтобы он рос , и я хочу использовать переход, чтобы сделать его гладким
  • Я не хочу, чтобы растущий div занимал больше места. В настоящее время для достижения этой цели я сокращаю поля

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Изменение ширины границы с 4px до 4.5px на <div class="inner-container"> исправило ее. Изменение на любое десятичное число, кажется, исправляет это. Например, если я использую 5.5px или 3.5px, это тоже исправляет. Хотя я не понимаю, почему ?‍♂️, хотелось бы знать, почему!

Мне пришлось использовать это исправление в нашем приложении, так как исправление transition-time-function не работало в нашем более сложном макете.

body {
  min-height: 100vh;
  display: flex;
}

.main-container {
  display: flex;
  justify-content: center;
  align-items: center;
  flex: 1;
}

.transition-container {
  background: black;
  width: 100px;
  height: 100px;
  display: flex;
  justify-content: center;
  align-items: center;
  margin: 20px;
  transition-duration: 1.25s;
  transition-property: margin, width, height;
}

.transition-container:hover {
  margin: 0;
  width: 120px;
  height: 120px;
}

.inner-container {
  border: 4.5px solid white;
  width: 60px;
  height: 60px;
}
<div class="main-container">
  <div class="transition-container">
    <div class="inner-container">
    </div>
  </div>
</div>
0 голосов
/ 01 ноября 2018

Добавление transition-timing-function: steps(10, end); исправило мой надуманный пример. Источник .

body {
  min-height: 100vh;
  display: flex;
}

.main-container {
  display: flex;
  justify-content: center;
  align-items: center;
  flex: 1;
}

.transition-container {
  background: black;
  width: 100px;
  height: 100px;
  display: flex;
  justify-content: center;
  align-items: center;
  margin: 20px;
  transition-duration: 1.25s;
  transition-property: margin, width, height;
  transition-timing-function: steps(10, end);
}

.transition-container:hover {
  margin: 0;
  width: 120px;
  height: 120px;
}

.inner-container {
  border: 4px solid white;
  width: 60px;
  height: 60px;
}
<div class="main-container">
  <div class="transition-container">
    <div class="inner-container">
    </div>
  </div>
</div>
...