Я только что натолкнулся на утомительный случай вычисления прыгающего бокса, и, похоже, я еще не понял всей правды.
Прежде всего, ограничивающий прямоугольник определяется как самый жесткий прямоугольник, нетрансформированный элемент может быть заключен в.
У меня всегда было впечатление, что для групп это означает, что он получает в основном объединение ограничивающего прямоугольника всех детей.
Однако сегодня я столкнулся с этим:
<g id="outer">
<g id="inner" transform="translate(100, 100)">
<rect x="0" y="0" width="100" height="100" />
</g>
</g>
Ограничительные рамки элементов следующие:
rect: x: 0, y: 0, w: 100, h: 100
#inner: x: 0, y: 0, w: 100, h: 100
#outer: x: 100, y: 100, w: 100, h: 100
Я ожидал бы, что все коробки одинаковы, но, как вы можете видеть, внешняя коробка НЕ является объединением внутренних элементов (в этом случае этобудет равна bbox # inner).Вместо этого он принимает во внимание преобразование внутренних элементов.
Итак, правильно ли говорить, что bbox группы является объединением TRANSFORMED bbox его дочерних элементов?Или, если говорить более программно, объединение всех getBoundingClientRect
вызовов (при условии, что прокрутка равна 0, потому что getCoundingClientRect
игнорирует прокрутку)?
Я был бы очень признателен за ссылку , указывающую мне на правильныйчасть спецификации.