Как динамически изменить размер HTML-документа?

Как я могу динамически изменять размер HTML-документа после нажатия кнопки с помощью JavaScript?

Есть див "сайт-обертка", который уменьшается с transform: scale() после нажатия кнопки меню. Но высота документа до щелчка остается. Вот как это выглядит:

Как динамически изменить размер HTML-документа?Как динамически изменить размер HTML-документа?Как динамически изменить размер HTML-документа?

$('.hamburger').click(function(){
    $(this).toggleClass('is-active');
    if ($(this).hasClass('is-active')) {
        $('.site-wrapper').css('transform', 'scale(0.5)');
        $('.top-line').css('position', 'relative');
        $('header').css('margin-top', '0');
    }
    else{
        $('.site-wrapper').css('transform', 'scale(1)');
    }
});

Вы не пробовали просто изменить ширину элемента site-wrapper? Я предполагаю, что это желаемая функциональность в любом случае? Поправьте меня если я ошибаюсь?

JO3-W3B-D3V 08.02.2019 14:27

Вставьте код HTML вместе с кодом jQuery, чтобы нам не пришлось заново вводить весь ваш код.

Peter 08.02.2019 14:37

Я бы убрал вашу почту со скриншота...

Mr. Polywhirl 08.02.2019 14:38

Вы можете загружать изображения вместе с вашим постом. Stack Overflow имеет собственный экземпляр imgur.

Mr. Polywhirl 08.02.2019 14:39

Я не могу загрузить изображения, потому что! не иметь 10 репутации

Dirty Johny 08.02.2019 14:56

Все размеры в css задаются в пикселях, и если я изменяю высоту или ширину site-wrapper, он меняется, но все содержимое внутри нет.

Dirty Johny 08.02.2019 15:00
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
6
625
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, дело в том, что transform: scale() предназначен только для визуального эффекта и фактически не изменяет размер элемента. Следуйте блочной модели в элементе проверки, чтобы подтвердить то же самое.

Таким образом, взломать то, что вам нужно, может быть

  1. Добавьте непосредственный элемент-оболочку в .сайт-обертка (скажем, .fluid-site-wrapper).

  2. Добавьте правило стиляtransform-origin: top; в .сайт-обертка.

  3. Применяя правило transform: scale() к .сайт-обертка, также уменьшите высоту .fluid-сайт-обертка и наоборот.

который изменит ваш код на:

$('.hamburger').click(function(){
    var $fluidSiteWrapper = $('.fluid-site-wrapper');
    $(this).toggleClass('is-active');
    if ($(this).hasClass('is-active')) {
        $('.site-wrapper').css('transform', 'scale(0.5)');
        $('.top-line').css('position', 'relative');
        $('header').css('margin-top', '0');
        $fluidSiteWrapper.css("height",$fluidSiteWrapper.height()/2); // if scale if 0.5
    }
    else{
        $('.site-wrapper').css('transform', 'scale(1)');
        $fluidSiteWrapper.css('height, '');
    }
});

Я также предлагаю вам добавить/удалить класс вместо добавления/удаления встроенных стилей. Также, пожалуйста, изучите цепочки в jQuery и кэшировании DOM.

Другие вопросы по теме