web-dev-qa-db-ja.com

Facebookコメントウィジェットを流動的な幅にする方法は?

Facebookのコメントウィジェットを流動的な幅にすることは可能ですか? ドキュメント は、fb:comments xfbmlまたはiframeは次のように指定されます。

  • width-プラグインの幅(ピクセル単位)。最小推奨幅:400ピクセル。

多分それは不可能です...

35
at.

私はcssを使用して解決策を見つけました。この記事からインスピレーションを得ました http://css-tricks.com/2708-override-inline-styles-with-css/

.fb-comments, .fb-comments iframe[style] {width: 100% !important;}
43
Alan

あなたのソリューションは機能していましたが、facebookがプラグインを更新してスタイルを壊したようです。私はユニバーサルセレクターを使用して再び動作させました:

.fb-comments, .fb-comments * {
    width:100% !important;
}
54
AJ Savino

おそらくFBからの次の変更であり、今回はこれがより適切に機能します。


.fb_iframe_widget,
.fb_iframe_widget span,
.fb_iframe_widget iframe[style]  {width: 100% !important;}
31
Danka Stawarz

3月5日からのライアンの回答を少し改善する解決策があると思います。

遅れてFacebook iframeを再ロードするのではなく、次のようにできます。

通常のFacebookコメントタグを挿入しますが、クラスに余分なビットを追加して、Facebookがそれを検出しないようにしますが、できます。

<div class="fb-comments-unloaded" data-href="..." data-numposts="10" data-colorscheme="light"></div>

次に、このdivを取得するJSを追加し、目的の幅に変更してから、Facebookのパーサーをトリガーします。

var foundFBComs = false;

$('.fb-comments-unloaded').each(function(){

    var $fbCom = $(this),
        contWidth = $fbCom.parent().width();

    $fbCom.attr('data-width', contWidth)
          .removeClass('fb-comments-unloaded')
          .addClass('fb-comments');

    foundFBComs = true;

});

if (foundFBComs && typeof FB !== 'undefined') {
    FB.XFBML.parse();
}
16
Gav

2014年3月の時点で、CSSソリューションはどれもうまくいきませんでした。Facebookは、プラグインを変更して、iFrame内のコンテナーに幅を設定するように変更したようです。

少し掘り下げた後、コメントの幅がiframe src width=XXXの最後のパラメーターによって実際に制御されていることに気付きました。それを念頭に置いて、ここに私がそれを解決した方法があります:

// ON PAGE LOAD
setTimeout(function(){
  resizeFacebookComments();
}, 1000);

// ON PAGE RESIZE
$(window).on('resize', function(){
  resizeFacebookComments();
});

function resizeFacebookComments(){
  var src   = $('.fb-comments iframe').attr('src').split('width='),
      width = $('#container').width();

  $('.fb-comments iframe').attr('src', src[0] + 'width=' + width);
}

#containerは、コメントプラグインが収まるように拡大するコンテナの幅です。これを必要なものに変更すると、このコードが機能します。

Iframeが読み込まれたときに起動することができなかったため、タイムアウトを使用しています。それに関する助けは大歓迎ですが、タイムアウトは仕事をします。

編集:このソリューションは、戻るボタンが壊れます。私は今この解決策を試していますが、それはより良いようです: https://stackoverflow.com/a/22257586/394788

16
Ryan

この問題はFacebookによって対処されています。必要に応じて、_data-width="100%"_を追加するか、幅オプションを_100%_に設定して、クレイジーなjsハックを削除できます!

11
blues_driven

facebookプラグインを初期化する前にこのコードを挿入すると、流動的なfbコメントがあります:) :) :)

 $(".fb-comments").attr("data-width", $(".fb-comments").parent().width());
$(window).on('resize', function() {
resizeFacebookComments();
});

function resizeFacebookComments() {
var src = $('.fb-comments iframe').attr('src').split('width='),
    width = $(".fb-comments").parent().width();

$('.fb-comments iframe').attr('src', src[0] + 'width=' + width);
}
4
spider inside

一般に、パフォーマンスを向上させるためにユニバーサルセレクターの使用を避けたいと思います。あなたは同じ結果を得ることができるはずです

.fb-comments, .fb-comments span, .fb-comments iframe {width: 100% !important;}

Facebookセレクターをチェックすると、おそらくさらに改善される可能性があります...

4
Jesper

facebookがドキュメントを更新したように見えます。data-width= "100%"またはwidth = "100%"を使用できるようになりました

https://developers.facebook.com/docs/plugins/comments/

2
thirdtiu

私の評判がまだ十分に高くないため、私はまだコメントできませんが、2014年12月21日現在、これに対する解決策があります

これがCSSで機能するために:

.fb_iframe_widget,
.fb_iframe_widget span,
.fb_iframe_widget iframe[style]  {width: 100% !important;}

fBプラグインコード内でdata-width = ""セクションを100%に設定する必要があります。

<div class="fb-comments" data-href="your site here" data-width="100%" data-numposts="5" data-colorscheme="light"></div>

流体運動を使用した作業例:http:www.unitedbiker.org

これがすべての人に役立つことを願っています。アイデアは、iframeスタイルを親要素の100%にオーバーライドし、実際のFBプラグインをiframeの100%に設定することです。これは私の回避策でした。

2
dav3ydark007

かなり長い間これに取り組んだ後、このページのどのCSSトリックがFacebookのコメントプラグインの特定のサイト/バージョン/年に役立つかを理解するのに役立つはずのちょっとしたヒントを見つけました。ブラウザでサイトを見て、facebookコメントプラグインの周りの要素を調べます。追加したスニペットが見つかり、facebookのjavascriptウィジェットで次のように装飾されます。

<fb:comments href="http://mywebpage.com" 
    fb-xfbml-state="rendered" class="fb_iframe_widget">

次の部分に注意してください。

class="<whatever class your version is using>"

これは使用するクラスです。したがって、上記の私の例では、次のスタイルを追加します。

<style>
    .fb_iframe_widget,
    .fb_iframe_widget iframe[style],
    .fb_iframe_widget span[style],
    .fb_iframe_widget *  {
        width: 100% !important;
    }
</style>
1
TamaraJean

これはすべての人に役立つと思います。私のために働く2013年12月26日 http://eddie11.com/dj-eddie-talks/

#fbSEOComments, 
#fbSEOComments span,
#fbSEOComments div,
#fbSEOComments iframe,
#fbSEOComments iframe[style],
#fbSEOComments .fb_iframe_widget,
#fbSEOComments .fb_iframe_widget span,
#fbSEOComments .fb_iframe_widget iframe
{
    width: 100% !important;
}

以下のどれも私のために機能しませんでしたが、とにかくそこに残しました。

.fb-comments,
.fb-comments *,
.fb-comments iframe[style],
.fb_iframe_widget,
.fb_iframe_widget span,
.fb_iframe_widget iframe,
.fb_iframe_widget iframe[style],
.fb-comments span,
.fb-comments iframe,
1
e11world

これは古い質問ですが、これは誰かに役立つかもしれません。

次のコードを使用して、コメントを流動的にすることができます

 
 
。fb-comments、.fb-comments iframe [style] 、. fb-like-box、.fb-like-box iframe [style] {width:100 %!important;} 
。fb-comments span、.fb-comments iframe span [style]、.fb-like-box span、.fb-like-box iframe span [style] {width:100% !重要;}

ここでコードを確認できます。ここでpre関数はいくつかのものを削除するからです。私はここで新しいです。よろしく

Facebook Comments Fluid

1
Quimbo

これは私にとってはうまくいきましたが、正しく機能するためにスパンタグを追加する必要があります:

.fb-comments, .fb-comments iframe[style], .fb-comments span { width: 100% !important; }
1
Fernando Nunes

この問題の調査に時間を費やしました。 FBはピクセル単位で絶対幅を指定することを提案していますが、「100%」に設定するだけで機能するように見えます。以下のデータ幅に注意してください。

<div class="fb-comments" data-width="100%" data-href="http://www.sample.com/" data-numposts="5" data-colorscheme="light"></div>

ええ、それは簡単です。onresizeコールバックもiframe srcの変更もありません。

1
Boris Mossounov

Facebook Comments Pluginのコードが(XFBML)のように見える場合:

<fb:comments href="{URL_HERE}" numposts="5" colorscheme="light"></fb:comments>

次に、次のCSSで作業を完了します。

.fb_iframe_widget, .fb_iframe_widget span, .fb_iframe_widget iframe {
     width: 100% !important;
}
0
ramonztro

これは私のために正しく働いた唯一のものです!

$(".fb-comments").attr("data-width", $(".fb-comments").parent().width());
$(window).on('resize', function() {
resizeFacebookComments();
});

function resizeFacebookComments() {
var src = $('.fb-comments iframe').attr('src').split('width='),
width = $(".fb-comments").`enter code here`parent().width();

$('.fb-comments iframe').attr('src', src[0] + 'width=' + width);
}
0
user3645907

Cssをオーバーライドする必要はありません。data-width="100%"を使用してください

<div class="fb-comments" data-width="100%" data-href="yourURL"></div>
0
Murhaf Sousli
.fb-comments, .fb-comments iframe[style],  .fb-comments > span {width: 100% !important;}
0
Leo