JavaScript для верстальщика. Урок 12. Улучшение модального окна-2
В этом уроке познакомимся с новыми методами, познакомимся с циклом и научимся центрировать элементы через js-код.
В данном случае для размещения модального окна по центру мы используем абсолютное позиционирование, свойство left: 50%, и отрицательный margin-left = -150px; равный половине ширины модального окна, которая составляет 300 px.
Предположим, что модального окна или любого другого элемента нам неизвестна, или она непостоянная, или у нас есть несколько однотипных элементов разной ширины.
Получаем ширину модального окна с классом js-modal:
$(".js-modal").width();
$(".js-modal").innerWidth();
Первый метод width() получает ширину элемента без паддингов и бордеров, второй - innerWidth() - вместе с ними. Он нам и нужен.
Присвоим этот код переменной modalWidth и разделим результат на два, так как нам нужна половина ширины модального окна.
var modalWidth = $(this).innerWidth() / 2;
Дальше, как по мне, нужно было бы его умножить на минус единицу, нам ведь нужен отрицательный маргин, но автор предлагает использовать вот такую конструкцию:
css({
"marginLeft": "-" + modalWidth + "px"
});
Из-за того, что минус добавляется строкой, он превращает всё значение в строку и нам нужно дописывать единицы измерения.
И ещё одна особенность - точка с запятой после свойства не ставится.
Теперь данное модальное окно получит отрицательный маргин равный половине его ширины. Но другое окно с тем же классом получит точно такой же маргин, даже если его ширина будет другой. Для того, чтобы код касался каждого модального окна, создаём цикл, который пройдётся по всем модальным окнам:
$(".js-modal").each(function() {
});
$(".js-modal").each(function() {
var modalWidth = $(this).innerWidth() / 2;
$(this).css({
"marginLeft": "-" + modalWidth + "px"
});
});
В данном случае для размещения модального окна по центру мы используем абсолютное позиционирование, свойство left: 50%, и отрицательный margin-left = -150px; равный половине ширины модального окна, которая составляет 300 px.
Предположим, что модального окна или любого другого элемента нам неизвестна, или она непостоянная, или у нас есть несколько однотипных элементов разной ширины.
Получаем ширину модального окна с классом js-modal:
$(".js-modal").width();
$(".js-modal").innerWidth();
Первый метод width() получает ширину элемента без паддингов и бордеров, второй - innerWidth() - вместе с ними. Он нам и нужен.
Присвоим этот код переменной modalWidth и разделим результат на два, так как нам нужна половина ширины модального окна.
var modalWidth = $(this).innerWidth() / 2;
Дальше, как по мне, нужно было бы его умножить на минус единицу, нам ведь нужен отрицательный маргин, но автор предлагает использовать вот такую конструкцию:
css({
"marginLeft": "-" + modalWidth + "px"
});
Из-за того, что минус добавляется строкой, он превращает всё значение в строку и нам нужно дописывать единицы измерения.
И ещё одна особенность - точка с запятой после свойства не ставится.
Теперь данное модальное окно получит отрицательный маргин равный половине его ширины. Но другое окно с тем же классом получит точно такой же маргин, даже если его ширина будет другой. Для того, чтобы код касался каждого модального окна, создаём цикл, который пройдётся по всем модальным окнам:
$(".js-modal").each(function() {
});
Код полностью:
$(".js-modal").each(function() {
var modalWidth = $(this).innerWidth() / 2;
$(this).css({
"marginLeft": "-" + modalWidth + "px"
});
});