如何使 Facebook 评论小部件具有流畅的宽度?
Posted
技术标签:
【中文标题】如何使 Facebook 评论小部件具有流畅的宽度?【英文标题】:How to make Facebook comments widget a fluid width? 【发布时间】:2011-11-18 20:02:51 【问题描述】:是否可以使 Facebook 的 cmets 小部件具有流体宽度?他们的documentation 显示了fb:comments
xfbml 或 iframe 的宽度字段,指定为:
所以也许这是不可能的......
【问题讨论】:
请参阅下面@blues-driven 的评论以获取 Facebook 解决方案***.com/a/23697427/84162 【参考方案1】:艾伦,您的解决方案正在运行,但看起来 facebook 更新了他们的插件并打破了风格。我使用通用选择器让它再次工作:
.fb-comments, .fb-comments *
width:100% !important;
【讨论】:
这个对我有用,在这个问题上选择的答案没有。 这应该会继续工作,因为它以 div、嵌套 span 和 iframe 以及 FaceBook 将来可能添加的任何其他元素为目标,并覆盖了内联样式属性。【参考方案2】:我找到了使用 css 的解决方案。灵感来自这篇文章 http://css-tricks.com/2708-override-inline-styles-with-css/
.fb-comments, .fb-comments iframe[style] width: 100% !important;
【讨论】:
漂亮!工作完美! @在。你应该认真接受这个答案。 =) 为确保此 CSS 正常工作,不得指定宽度(data-width
属性)。
移动 cmets 怎么样。 CSS 在台式机上运行良好,但在 iPhone 或 Facebook 自动切换回移动 cmets 的手机上却不行
我还必须添加.fb_iframe_widget > span[style]
。
这对我有用 -> .fb-cmets, .fb-cmets iframe[style], .fb-cmets span[style] width: 100% !important;【参考方案3】:
可能是 FB 的下一个变化,这次效果更好:
.fb_iframe_widget,
.fb_iframe_widget span,
.fb_iframe_widget iframe[style] width: 100% !important;
【讨论】:
我们是 2013 年 2 月 22 日,这是唯一一个适用于当前版本的 fb:cmets。 截至 2014 年 2 月 6 日仍然有效。【参考方案4】:截至 2014 年 3 月,没有任何 CSS 解决方案对我有用。似乎 Facebook 已更改插件,现在在 iFrame 内的容器上设置宽度,您无法用 CSS 覆盖。
经过一番挖掘,我注意到 cmets 的宽度实际上是由 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
是您希望 cmets 插件拉伸以适应容器的宽度。将其更改为您需要的任何内容,此代码应该适合您。
我正在使用超时,因为加载 iframe 后我无法触发它。对此的任何帮助将不胜感激,但超时可以完成工作。
编辑:此解决方案会导致后退按钮中断。我现在正在尝试这个解决方案,它似乎更好:https://***.com/a/22257586/394788
【讨论】:
好东西。这是 FB 上的错误报告:developers.facebook.com/x/bugs/256568534516879 非常好的解决方案!而不是 $('#container').width();我把 $('.fb-cmets iframe').parent().width() 让它更加动态!【参考方案5】:我认为我有一个解决方案,可以对 Ryan 3 月 5 日的回答有所改进。
您可以执行以下操作,而不是延迟后重新加载 Facebook iframe。
插入一个常规的 Facebook cmets 标签,但在类中附加一个额外的位,这样 Facebook 就不会检测到它,但你可以。
<div class="fb-comments-unloaded" data-href="..." data-numposts="10" data-colorscheme="light"></div>
然后添加一些 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();
【讨论】:
更喜欢这个答案,不依赖每个月都会变化的 CSS,而且比设置超时和重新加载元素要快很多。 真的很喜欢这个解决方案。直观,并让 FB 在加载插件时通过提供正确的宽度来完成工作。 测试并在 2014 年 3 月 27 日开始工作。很棒的解决方案,完全符合您的期望。感谢 Gav 的回答! @gav 我不是 WP 专家,所以我现在迷路了“插入常规 Facebook cmets 标签”你的意思是什么?我应该在哪里插入这个标签? @ReynierPM 如果您访问 Facebook 的文档页面:developers.facebook.com/docs/plugins/comments 并单击“获取代码”,您会看到他们为您提供类似<div class="fb-comments" data-href="http://example.com/comments" data-numposts="5" data-colorscheme="light"></div>
的内容 - 这是我的 cmets 标签米指。您应该将它插入您希望 cmets 插件出现在您的页面中的任何位置。【参考方案6】:
Facebook 已解决此问题。您现在可以添加data-width="100%"
或将宽度选项设置为100%
并酌情删除任何疯狂的js hack!
【讨论】:
这仅适用于 350 像素及以上。因此,例如在 iPhone SE 上,您无法进行响应式嵌入,而必须使用水平滚动【参考方案7】:我通常希望避免使用通用选择器以获得更好的性能。您应该能够得到与
相同的结果.fb-comments, .fb-comments span, .fb-comments iframe width: 100% !important;
如果您检查 facebook 选择器,可能会得到更多改进...
【讨论】:
【参考方案8】:在初始化 facebook 插件之前插入此代码,您将拥有流畅的 fb cmets :):):)
$(".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);
【讨论】:
简单而有效,facebook 引入的 100% 宽度仅适用于初始大小,并且不会不断调整,因此如果您有一个流畅的布局,用户会重新调整它溢出的窗口大小或看起来很小。这段代码很好地解决了这个问题。【参考方案9】:看起来 facebook 更新了他们的文档。你现在可以使用 data- 或
https://developers.facebook.com/docs/plugins/comments/
【讨论】:
刚刚在我的 html 中完成。像没有 CSS 要求的魅力一样工作。复制和粘贴。【参考方案10】:我还不能发表评论,因为我的声誉还不够高,但截至 2014 年 12 月 21 日有解决方案
为了在 CSS 中工作:
.fb_iframe_widget,
.fb_iframe_widget span,
.fb_iframe_widget iframe[style] width: 100% !important;
您必须在 FB 插件代码中将 data- 部分设置为 100%,即
<div class="fb-comments" data-href="your site here" data- data-numposts="5" data-colorscheme="light"></div>
流体运动的工作示例:http:www.unitedbiker.org
希望这对大家有所帮助,想法是将 iframe 样式覆盖为父元素的 100%,并将实际的 FB 插件设置为 iframe 的 100%。这是我的工作。
【讨论】:
【参考方案11】:这对我有用,但我需要添加 span 标签才能正常工作:
.fb-comments, .fb-comments iframe[style], .fb-comments span width: 100% !important;
【讨论】:
【参考方案12】:我认为这对每个人都有效。为我工作,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,
【讨论】:
【参考方案13】:我知道这是个老问题,但这可能对某人有帮助。
您可以使用以下代码使您的 cmets 流畅
.fb-cmets, .fb-cmets iframe[style], .fb-like-box, .fb-like-box iframe[style] width: 100% !important; .fb-cmets 跨度,.fb-cmets iframe 跨度 [样式],.fb-like-box 跨度,.fb-like-box iframe 跨度 [样式] 宽度:100% !重要;可以查看这里的代码,因为这里的pre函数删除了一些东西。我是新来的。问候
Facebook Comments Fluid
【讨论】:
【参考方案14】:花了一些时间调查这个问题。尽管 FB 建议以像素为单位指定绝对宽度,但如果您将其设置为“100%”,它看起来就可以工作。请注意下面的数据宽度。
<div class="fb-comments" data- data-href="http://www.sample.com/" data-numposts="5" data-colorscheme="light"></div>
是的,这很简单,没有 onresize 回调没有 iframe src 修改。
【讨论】:
这是最好的解决方案【参考方案15】:在解决这个问题很长一段时间后,我发现了一个花絮,它应该可以帮助您确定此页面上的哪些 CSS 技巧将有助于您的特定网站/版本/年份的 facebook 评论插件。在浏览器中查看您的网站并检查 facebook 评论插件周围的元素。你应该找到你添加的一个 sn-p,现在被 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>
【讨论】:
【参考方案16】:.fb-comments, .fb-comments iframe[style], .fb-comments > span width: 100% !important;
【讨论】:
【参考方案17】:如果您的 Facebook 评论插件的代码看起来像 (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;
【讨论】:
【参考方案18】:这是唯一对我有用的东西!
$(".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);
【讨论】:
【参考方案19】:无需覆盖css,使用data-width="100%"
<div class="fb-comments" data- data-href="yourURL"></div>
【讨论】:
以上是关于如何使 Facebook 评论小部件具有流畅的宽度?的主要内容,如果未能解决你的问题,请参考以下文章