У меня есть подпрограмма, которая позволяет размеру элементов на странице плотно прилегать к родителям. В большинстве случаев он работает превосходно, но в Firefox (JUST Firefox - Chrome, IE и т. Д. - это хорошо), он вовлекается в первую попытку в одном конкретном экземпляре - div, вложенный в поле, не может изменить размер с первой попытки, но преуспевает во второй (и последующих) попытках.Получение вычисленной ширины элемента после модификации
Каждый элемент имеет размер относительно его родителя, используя следующие:
function resizeChild(elem) {
// Get gutter based on margins, borders, padding, etc
var gutter = getGutter(elem); // returns obj with x and y properties
var parent = elem.parentElement;
var parentStyles = window.computedStyle(parent);
var targetWidth = (parseInt(parentStyles['width']) - gutter.x;
var widthPx = targetWidth + 'px';
// prototype.js setStyle shortcut
elem.setStyle({
width: widthPx,
maxWidth: widthPx,
minWidth: widthPx
});
}
Я бегу это в цикле, итерация каждый элемент с определенным классом CSS.
Согласно отладчику Firefox, внешний элемент (набор полей) всегда изменяется до внутреннего div. Я могу проверить элемент и увидеть соответствующие атрибуты стиля. Однако на следующей итерации цикла, когда родитель оценивается (я вижу в инспекторе свойств javascript, что родительский элемент действительно является набором полей), значение ширины, возвращаемое для вычисленного стиля, является предыдущим, немодифицированным значение, поэтому внутренний div изменяется неправильно.
Может кто-нибудь пролить свет на это, пожалуйста?
редактирует после комментариев:
parent.clientWidth
возвращает 0.
Не уверен, если это уместно, но родительский DIV из FIELDSET имел display
набор к none
незадолго до операции изменения размера при вызове. Однако в тот момент, когда размер поля был изменен, display
div был установлен в inline-block
. Я не думаю, это изменило бы, но тогда я не очень хорошо разбираюсь в некоторых особенностях поведения Firefox в этом сценарии.
Вы видите эту страницу? https: //developer.mozilla.org/en-US/docs/Web/API/CSS_Object_Model/Determining_the_dimensions_of_elements –
У меня есть :) Проблема в этом случае заключается в том, что многие стандартные методы API для запроса макета родительского div возвращают 0 в первый раз, когда этот конкретный область страницы - только ненулевые значения, которые я получаю, относятся к вычисленному стилю. К сожалению, вычисленный стиль, как представляется, содержит размеры родительского элемента от ** до **, он был изменен, если он также был изменен. – Minouris
Это почти как если бы - просто поместив это там, как бездельное размышление - как если бы Firefox обрабатывал функцию resizeFullWidth() как транзакционную единицу и не применял измененные свойства к DOM, пока не завершилась целая функция. – Minouris