Gabriel 2 Ответов: 1

Это что, хромированная ошибка?


Может ли кто-нибудь подтвердить, что "getBoundingClientRect" имеет ошибку Chrome?

<!DOCTYPE html>
<html>
<head>
  <style>
  body {
    margin: 0;
  }
  .main {
    width: 200px;
    height: 200px;
    background-color: gray;
    padding: 20px;
  }
  #box {
    width: 100px;
    height: 100px;
    zoom: 10%;
    background-color: red;
  }
  </style>
</head>

<body>
  <div class="main">
    <div id="box">box</div>
  </div>
  <script>
    console.log(document.getElementById('box').getBoundingClientRect());
    document.write(`<p>left: ${document.getElementById('box').getBoundingClientRect().left}</p>`);
    // left and top should be 20, but they are 200. They are divided by element's "zoom" attribute.
  </script>
</body>
</html>


Что я уже пробовал:

Я получаю разные результаты для Chrome и Edge, и я понимаю, что Chrome ошибается.
Edge возвращает 20, Chrome-200.

1 Ответов

Рейтинг:
2

Richard Deeming

Не знаю, как у тебя есть край, чтобы вернуться 20 - вы все еще на старой версии?

Демонстрация[^]

  • Firefox 82 отображает 20;
  • Края 86 отображает 200;
  • Крома 86 отображает 200;


Это, по-видимому, связано с zoom собственность. Если вы закомментируете свойство, Chrome и Edge сообщат об этом 20:
Обновленная демо-версия[^]

NB: zoom это нестандартное свойство, с ограниченной поддержкой браузера. Он не поддерживается ни в Firefox, ни в старой версии Edge.
zoom - CSS: Каскадные Таблицы Стилей | MDN[^]

Похоже, что нет единого мнения о том, как это свойство должно взаимодействовать с ограничивающим прямоугольником:
429140 - chromium - проект с открытым исходным кодом, который поможет продвинуть веб вперед. - Монорельс[^]

Вы должны рассмотреть возможность использования transform:scale() вместо zoom Однако это не повлияет на размер макета элемента.

С transform:scale(0.1) заменяющий zoom:10%, все три браузера возвращают одно и то же значение:
Демонстрация[^]