如何使Facebook评论小部件流畅?

at.*_*at. 35 css comments facebook xfbml facebook-social-plugins

是否有可能使Facebook的评论小部件流畅?他们的文档显示了fb:commentsxfbml或iframe 的宽度字段,其指定为:

  • width - 插件的宽度(以像素为单位).建议的最小宽度:400px.

也许这不可能......

小智 54

Alan你的解决方案正在运行,但看起来facebook更新了他们的插件并打破了风格.我使用通用选择器再次使用它:

.fb-comments, .fb-comments * {
    width:100% !important;
}
Run Code Online (Sandbox Code Playgroud)

  • 这个对我有用,在这个问题上选择的答案没有. (4认同)

小智 42

我找到了一个使用css的解决方案.灵感来自这篇文章 http://css-tricks.com/2708-override-inline-styles-with-css/

.fb-comments, .fb-comments iframe[style] {width: 100% !important;}
Run Code Online (Sandbox Code Playgroud)

  • 我不得不添加`.fb_iframe_widget> span [style]`. (6认同)
  • 为确保此CSS工作,不得指定宽度(`data-width`属性). (4认同)
  • 这对我有用 - > .fb-comments,.fb-comments iframe [style] ,. fb-comments span [style] {width:100%!important;} (3认同)

小智 31

可能是FB的下一次更改,这次更好用:


.fb_iframe_widget,
.fb_iframe_widget span,
.fb_iframe_widget iframe[style]  {width: 100% !important;}
Run Code Online (Sandbox Code Playgroud)

  • 我们是2013年2月22日,这是唯一一个适用于当前版本的fb:comments. (5认同)
  • 这仍然适用于2013年3月29日. (2认同)

Rya*_*yan 16

截至2014年3月,CSS解决方案都没有为我工作.似乎Facebook已经将插件更改为现在在iFrame中的容器上设置宽度,而您无法用CSS覆盖它.

经过一番挖掘后,我注意到注释的宽度实际上是由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);
}
Run Code Online (Sandbox Code Playgroud)

#container是您希望注释插件伸展到适合的容器宽度.将其更改为您需要的任何内容,此代码应该适合您.

我正在使用超时,因为一旦加载了iframe,我就无法触发它.任何有关这方面的帮助将不胜感激,但超时完成工作.

编辑:此解决方案导致后退按钮中断.我现在正在尝试这个解决方案,似乎更好:https://stackoverflow.com/a/22257586/394788

  • 很好的解决方案!而不是$('#container').width(); 我把$('.fb-comments iframe').parent().width()更加动态! (3认同)

Gav*_*Gav 16

我想我有一个解决方案,可以从3月5日开始改善Ryan的答案.

您可以执行以下操作,而不是在延迟后重新加载Facebook iframe.

插入一个常规的Facebook评论标签,但在课程中附加一点,以便Facebook不会检测到它,但你可以.

<div class="fb-comments-unloaded" data-href="..." data-numposts="10" data-colorscheme="light"></div>
Run Code Online (Sandbox Code Playgroud)

然后添加一些JS来选择这个div,用所需的宽度修改它,然后触发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();
}
Run Code Online (Sandbox Code Playgroud)


blu*_*ven 11

这个问题已经被Facebook解决了.您现在可以根据需要添加data-width="100%"或设置宽度选项100%并删除任何疯狂的js hacks!