パーティーには遅れますが、私の解決策は誰かを助けるでしょう。 
ビューポートが変更された場合やレイアウトが流動的である場合に、レスポンシブなWebサイトで機能する解決策は見つかりませんでした。
そこで、変化するビューポートに動的に適応するdjango-cms用のjQueryスクリプトを作成しました。よりモジュラーでjQueryに依存しない最新のバリアントが必要になり次第、この応答を更新します。
html
<div class="g-recaptcha" data-sitekey="{site_key}" data-size={size}> 
</div> 
CSS
.g-recaptcha { display: none; }
.g-recaptcha.g-recaptcha-initted { 
    display: block; 
    overflow: hidden; 
}
.g-recaptcha.g-recaptcha-initted > * {
    transform-origin: top left;
}
js
window.djangoReCaptcha = {
    list: [],
    setup: function() {
        $('.g-recaptcha').each(function() {
            var $container = $(this);
            var config = $container.data();
            djangoReCaptcha.init($container, config);
        });
        $(window).on('resize orientationchange', function() {
            $(djangoReCaptcha.list).each(function(idx, el) {
                djangoReCaptcha.resize.apply(null, el);
            });
        });
    },
    resize: function($container, captchaSize) {
        scaleFactor = ($container.width() / captchaSize.w);
        $container.find('> *').css({
            transform: 'scale(' + scaleFactor + ')',
            height: (captchaSize.h * scaleFactor) + 'px'
        });
    },
    init: function($container, config) {
        grecaptcha.render($container.get(0), config);
        var captchaSize, scaleFactor;
        var $iframe = $container.find('iframe').eq(0);
        $iframe.on('load', function() {
            $container.addClass('g-recaptcha-initted');
            captchaSize = captchaSize || { w: $iframe.width() - 2, h: $iframe.height() };
            djangoReCaptcha.resize($container, captchaSize);
            djangoReCaptcha.list.push([$container, captchaSize]);
        });
    },
    lateInit: function(config) {
        var $container = $('.g-recaptcha.g-recaptcha-late').eq(0).removeClass('.g-recaptcha-late');
        djangoReCaptcha.init($container, config);
    }
};
window.djangoReCaptchaSetup = window.djangoReCaptcha.setup;