Я пытаюсь написать код JavaScript, который позволит мне центрировать дочерний элемент внутри его родителя с помощью дополнения. Затем, используя ту же функцию, чтобы пересчитать интервал, используя событие «изменить размер». Прежде чем вы начнете спрашивать меня, почему я не делаю этого с помощью CSS, этот код является лишь небольшой частью более крупного проекта. Я упростил код, так как остальная часть кода работает и будет только путать тему.Использование .outerWidth() & .outerHeight() с событием 'resize' для центрирования дочернего элемента в родительском
Расчет пространства - Это функция, которая измеряет количество пространства, которое будет использоваться по обе стороны дочернего элемента.
($outer.outerWidth() - $inner.outerWidth())/2;
($outer.outerHeight() - $inner.outerHeight())/2;
Проблема
Хотя я успешно удалось получить желаемых результатов с запасом. Простуда вызывает у меня проблемы.
- Это, как представляется, увеличение ширины на внешнем элементе при изменении размеров
- Это не центрировать дочерний элемент идеально (как представляется, смещение)
- Внутренний элемент падает на изменении размеров и становится невидимым ,
Я понимаю, что могут быть некоторые основы в отношении заполнения, которые вызывают мои проблемы, однако после многочисленных журналов консоли и наблюдения за возвращаемыми данными я все еще не могу погладить проблему. Любое предложение было бы очень желанным. Может оказаться, что это вообще невозможно.
HTML
<div id="demo" class="outer">
<div class="inner">
</div>
</div>
CSS
html {
box-sizing: border-box;
}
*, *:before, *:after {
box-sizing: inherit;
}
.outer {
width:97%;
height:400px;
border:1px solid black;
margin:20px;
}
.inner {
width:40%;
height:100px;
background-color:grey;
}
JAVASCRIPT
var $outer = $(".outer");
var $inner = $(".inner");
var getSpace = function(axis) {
if (axis.toLowerCase() == "x") {
return ($outer.outerWidth() - $inner.outerWidth())/2;
} else if (axis.toLowerCase() == "y") {
return ($outer.outerHeight() - $inner.outerHeight())/2;
}
}
var renderStyle = function(spacingType) {
var lateralSpace = getSpace("x");
var verticalSpace = getSpace("y");
var $element;
if (spacingType == "padding") {
$element = $outer;
} else if (spacingType == "margin") {
$element = $inner;
}
$.each(["top", "right", "bottom", "left"], function(index, direction) {
if (direction == "top" || direction == "bottom") {
$element.css(spacingType + "-" + direction, verticalSpace);
}
else if (direction == "right" || direction == "left") {
$element.css(spacingType + "-" + direction, lateralSpace);
}
});
};
var renderInit = function() {
$(document).ready(function() {
renderStyle("padding");
});
$(window).on("resize", function() {
renderStyle("padding");
});
}
renderInit();
EXAMPL E - link
Объедините с ним .innerHeight и .innerWidth(), и все должно быть хорошо. –
Извините, что я точно не понимаю, что вы имеете в виду, где я должен включать это? –