こんにちは、GoogleのNo CAPTCHA reCAPTCHAをWebサイトに追加したところ、小さな問題に直面しています。私のモバイルWebサイトには適合せず、それは大きな問題です。私は次のようなすべてを試しました:
HTML
<div id="captchadisplay">
<div class="g-recaptcha" data-sitekey="???"></div>
</div>
CSS
#captchadisplay {
width: 50% !important;
}
そして
CSS
.g-recaptcha {
width: 50%;
}
しかし、私は自分のモバイルWebサイトでそれを縮小することはできないようです。何か案は? :)
CSStransformプロパティを使用することにより、全体scalereCAPTCHAの。
2つのインラインスタイルを追加するだけで、reCAPTCHAをモバイルデバイスにうまく適合させることができます。
<div class="g-recaptcha"
data-theme="light"
data-sitekey="XXXXXXXXXXXXX"
style="transform:scale(0.77);-webkit-transform:scale(0.77);transform-Origin:0 0;-webkit-transform-Origin:0 0;">
</div>
詳細は私のサイトで見つけることができます: https://www.geekgoddess.com/how-to-resize-the-google-nocaptcha-recaptcha/
Geek Goddess 'ソリューションの実装に成功しました。主な問題は、すべてのブラウザで動作しない可能性があることです。ただし、現在、Googleが提供する簡単なソリューションがあります。
ReCAPTCHAバージョン2.0には、ウィジェットの表示に関する新しいルールがあり、Googleはタグの属性を追加して、レンダリング方法を変更します。
タグdata-size
は、デフォルトの"normal"
と、モバイルデバイスの画面に収まる"compact"
の値を取ることができます。これがコンパクトウィジェットの外観です。
見栄えの良いウィジェットではありませんが、他のソリューションよりも少ない作業で収まります。
その他の属性については、 GoogleのreCAPTCHA v2.0のドキュメント を確認してください
Style属性にtransform(0.77)
を入れることは真にレスポンシブなソリューションではなかったため、私はいくつかのJQueryを使用してきました。
このメディアクエリをCSSに追加します。最大幅は、ReCaptchaボックスが渡されたときに大きすぎると見なされるしきい値です。
@media(max-width: 390px) {
.g-recaptcha {
margin: 1px;
}
}
次に、このJQueryを追加します。
$(window).resize(function() {
var recaptcha = $(".g-recaptcha");
if(recaptcha.css('margin') == '1px') {
var newScaleFactor = recaptcha.parent().innerWidth() / 304;
recaptcha.css('transform', 'scale(' + newScaleFactor + ')');
recaptcha.css('transform-Origin', '0 0');
}
else {
recaptcha.css('transform', 'scale(1)');
recaptcha.css('transform-Origin', '0 0');
}
});
スタイルなしの場合、使用する304はReCaptchaボックスのデフォルトの幅です。
これで、ReCaptchaは親コンテナーがどれだけ小さくても適切に縮小し、元の幅に最大幅があるかのように動作します。
メディアクエリは、画面サイズの変化を検出するメカニズムにすぎないことに注意してください。
Googleの documentation によると、data-size
属性を設定することができ、これは私のために働いた。
<div class="g-recaptcha" data-sitekey="XXXXXXXX" data-size="compact"></div>
しかし、@ GeekGoddessからの回答は、サイジングにおいてもう少し柔軟性を提供します。
CSSソリューションが気に入らない場合は、JSを試すことができます。
その考えは、recaptchaプラグインのコンパクトモードと通常モードを動的に切り替えることです。
JQueryをオンボードで使用して例を提供しますが、純粋なJSに移植することはそれほど多くないはずです。
サイトに次のHTMLコードがあると思います。
<div>
<div class="g-recaptcha" data-sitekey="[your-key-here]"></div>
</div>
まず、gRecaptcha 2を明示的にロードし、onload
コールバックを提供する必要があります。
<script type='text/javascript' src='https://www.google.com/recaptcha/api.js?hl=en&onload=recaptchaCallback&render=explicit'>
次に、javascriptメディアクエリでもあるコールバック関数を作成します。
function recaptchaCallback()
{
var mq = window.matchMedia("(max-width: 400px)");
mq.addListener(recaptchaRenderer);
recaptchaRenderer(mq);
}
最後に、recaptchaウィジェットをレンダリングします。
function recaptchaRenderer(mq)
{
var recaptcha = $('.g-recaptcha').eq(0);
var data = recaptcha.data();
var parent = recaptcha.parent();
recaptcha.empty().remove();
var recaptchaClone = recaptcha.clone();
parent.append(recaptchaClone);
recaptchaClone.data(data);
var options = {
'sitekey': data['sitekey'],
'size': 'compact'
};
if(!mq.matches)
{
options['size'] = 'normal';
}
grecaptcha.render(recaptchaClone.get(0), options);
}
Divを空にしてすべてのg-recaptchaコンテンツを複製する理由を疑問に思うかもしれません。これは、gRecaptcha 2で同じ要素に2回目にレンダリングできないためです。もっと良い方法はありますが、今のところ私が見つけたすべてです。
私にとっては、Google re-captcha 2.0のcompactモードの実装は不十分です。 looksいですね。
「オタクの女神」ソリューションから拡張するだけです。
次のことができます。
<div class="g-recaptcha" data-sitekey="..." style="-moz-transform:scale(0.77); -ms-transform:scale(0.77); -o-transform:scale(0.77); -moz-transform-Origin:0; -ms-transform-Origin:0; -o-transform-Origin:0; -webkit-transform:scale(0.77); transform:scale(0.77); -webkit-transform-Origin:0 0; transform-Origin:0; filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.77,M12=0,M21=0,M22=0.77,SizingMethod='auto expand');"></div>
IE、Chrome、FFのほとんどすべてのブラウザーでサイズが変更されますOpera(DXImageTransformfor for IE <= 8)。
さらに、このtransform scaleとCSS max-widthを組み合わせることで、レスポンシブにすることができます。
完璧な方法ではありませんが、Googleから適切なレスポンシブフィックスを取得するまでは。
興味がある人のために、私は少し変更しました AjaxLeung ソリューションとこれを思い付きました:
function resizeReCaptcha() {
if ($(".g-recaptcha").length) {
var recaptcha = $(".g-recaptcha");
recaptcha.parent().addClass('col-xs-12 padding0');
var innerWidth = recaptcha.parent().innerWidth();
if (innerWidth < 304) {
var newScaleFactor = innerWidth / 304;
recaptcha.css('transform', 'scale(' + newScaleFactor + ')');
recaptcha.css('-webkit-transform', 'scale(' + newScaleFactor + ')');
recaptcha.css('transform-Origin', '0 0');
recaptcha.css('-webkit-transform-Origin', '0 0');
} else {
recaptcha.css('transform', 'scale(1)');
recaptcha.css('-webkit-transform', 'scale(1)');
recaptcha.css('transform-Origin', '0 0');
recaptcha.css('-webkit-transform-Origin', '0 0');
}
}
}
$(window).resize(function() {
resizeReCaptcha();
});
$(document).ready(function () {
resizeReCaptcha();
});
これがあなたの役に立つことを願っています
@media only screen and (max-width : 480px) {
.smallcaptcha{
transform:scale(0.75);
transform-Origin:50% 50%;
}
}
残念ながら、NoCaptchaはiframeを使用しているため、高さ/幅を制御し、overflow:hidden;
超過分をカットします。最高の使いやすさのために、キャプチャの数ピクセル以上を切り捨てることはお勧めしません。
例:
.g-recaptcha {
max-width: 300px;
overflow: hidden;
}
サイズ変更の私のスピンは次のとおりです。
<script>
function resizeReCaptcha() {
var width = $( ".g-recaptcha" ).parent().width();
if (width < 302) {
var scale = width / 302;
} else {
var scale = 1;
}
$( ".g-recaptcha" ).css('transform', 'scale(' + scale + ')');
$( ".g-recaptcha" ).css('-webkit-transform', 'scale(' + scale + ')');
$( ".g-recaptcha" ).css('transform-Origin', '0 0');
$( ".g-recaptcha" ).css('-webkit-transform-Origin', '0 0');
};
$( document ).ready(function() {
$( window ).on('resize', function() {
resizeReCaptcha();
});
resizeReCaptcha();
});
</script>
これがあなたのために働くことを願っています。
_<div class="g-recaptcha" data-theme="light" data-sitekey="XXXXXXXXXXXXX" style="transform:scale(0.77);transform-Origin:0 0"></div>
_
style="transform:scale(0.77);transform-Origin:0 0"
を追加するだけです
<div class="g-recaptcha" data-theme="light" data-sitekey="your site key" style="transform:scale(0.77);-webkit-transform:scale(0.77);transform-Origin:0 0;-webkit-transform-Origin:0 0;"></div>
これは私のために働いています、あなたはそれを試してください..