Изменение размера карты

Open in CodeSandbox

Размер карты определяется при ее создании менеджером контейнеров. Далее карта не следит за возможными изменениями своих размеров. Чтобы карта изменила свои размеры на актуальные, требуется вызов функции менеджера fitToViewport().

Если скопировать полный код примера в новый HTML-документ, развернутая карта будет полностью занимать область просмотра браузера.

<!DOCTYPE html>
<html>
    <head>
        <title>Изменение размера карты</title>
        <meta
            http-equiv="Content-Type"
            content="text/html; charset=utf-8"
        />
        <!--
        Укажите свой API-ключ. Тестовый ключ НЕ БУДЕТ работать на других сайтах.
        Получить ключ можно в Кабинете разработчика: https://developer.tech.yandex.ru/keys/
    -->
        <script
            src="https://api-maps.yandex.ru/2.1/?lang=ru_RU&amp;apikey=<ваш API-ключ>"
            type="text/javascript"
        ></script>
        <script
            src="https://yandex.st/jquery/2.2.3/jquery.min.js"
            type="text/javascript"
        ></script>
        <script src="fillcontainer.js" type="text/javascript"></script>
    </head>

    <style type="text/css">
        html,
        body {
            width: 100%;
            height: 95%;
            margin: 0;
            padding: 0px;
            font-family: Arial;
            font-size: 14px;
        }

        #container {
            margin: 10px;
        }

        #map {
            width: 430px;
            height: 320px;
            border: 1px solid black;
            margin: 0;
            padding: 0;
            background-color: #ccc;
            overflow: hidden;
        }

        .smallMap {
            width: 300px !important;
            height: 200px !important;
        }

        #toggler {
            left: 5px;
            top: 5px;
            font-size: 12px;
        }

        #checkbox_block {
            left: 163px;
            top: 8px;
            font-size: 13px;
            text-shadow: 1px 1px 0 #fff;
        }
    </style>
    <body>
        <div id="container">
            <input type="button" value="Развернуть/Cвернуть" id="toggler" />
            <input
                type="checkbox"
                value="Изменить размеры карты"
                id="checkbox"
            />
            <label for="checkbox">Информировать карту</label><br /><br />
            <div id="map" class="smallMap"></div>
        </div>
    </body>
</html>
ymaps.ready(init);

var myMap,
    bigMap = false;

function init() {
    myMap = new ymaps.Map(
        "map",
        {
            center: [55.755768, 37.617671],
            zoom: 10,
        },
        {
            // При сложных перестроениях можно выставить автоматическое
            // обновление карты при изменении размеров контейнера.
            // При простых изменениях размера контейнера рекомендуется обновлять карту программно.
            // autoFitToViewport: 'always'
            searchControlProvider: "yandex#search",
        }
    );
    $("#toggler").click(toggle);
}

function toggle() {
    bigMap = !bigMap;

    // Добавляем/убираем CSS-класс, определяющий размеры контейнера карты,
    // заданные в абсолютных единицах (300x200 px).
    if (bigMap) {
        $("#map").removeClass("smallMap");
    } else {
        $("#map").addClass("smallMap");
    }

    // Если выставлен флаг, сообщаем карте, что ей следует
    // привести свои размеры к размерам контейнера.
    if ($("#checkbox").prop("checked")) {
        myMap.container.fitToViewport();
    }
}