首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么“脸书评论”iFrame在容器中加载CSS为“display:none”时会有不同的高度?

为什么“脸书评论”iFrame在容器中加载CSS为“display:none”时会有不同的高度?
EN

Stack Overflow用户
提问于 2011-06-29 02:10:58
回答 1查看 2.6K关注 0票数 6

我正在编写一个web应用程序,它加载一个页面,然后使用javascript使用Facebook的XFBML代码显示Facebook的评论框。我在一个容器中有Facebook评论iframe,它在页面加载时被设置为"display: none“。稍后,当用户单击按钮时,将显示容器。

我遇到的问题是,当页面加载时,Facebook评论容器设置为"display: none",Facebook加载的iframe的高度比预期的要大得多。但是,如果我在加载页面时将Facebook评论容器设置为"display: block“,然后在页面加载后将其设置为"display: none”,则iframe会获得适当的height属性。我很好奇是什么导致了iframe高度设置的差异。

我的解决办法是加载容器的样式设置为“display: block;height: 1px;width: 1px;border: none”的页面,然后在页面加载后使用javascript将容器设置为“display:none”。我只是好奇是什么导致了这种情况,以及是否有比我正在做的事情更好的解决办法。

谁能解释这个现象,告诉我建议的解决方案是什么?

作为参考,下面是我的标记的简化版本,没有解决方法。如果你在浏览器中加载它并点击“显示评论”按钮,你会看到大的灰色区域,这是Facebook的评论容器,比实际的评论框大得多。

代码语言:javascript
复制
<!DOCTYPE html>
<html>
    <head>
        <title>Facebook Commments Page</title>
        <style type="text/css">
            .initial-content { width: 100%; overflow: hidden; }
            .show-comments-button { float: left; background: #aaa; padding: 6px;}
            #facebook-comments { display: none; background: #eeeeee; }
        </style>
        <script>
            function showComments(e){
                var commentContainer = document.getElementById('facebook-comments');
                commentContainer.style['display'] = 'block';
            }
        </script>
    </head>
    <body>
        <div class="initial-content">
            <h1>My little web app</h1>
            <p>Here is the content a user sees when first loading the page.</p>
            <div class="show-comments-button" onclick="showComments(event);">Show Comments</div>
        </div>
        <div id="facebook-comments">
            <h1>Facebook Comments</h1>
            <div id="fb-root"></div><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><fb:comments href="example.com" num_posts="2" width="500"></fb:comments>
        </div>
    </body>
</html>
EN

回答 1

Stack Overflow用户

发布于 2011-07-07 03:58:24

我不能确定,但也许display: none;是通过忽略height:属性来工作的--即使您设置了height,display: none;也会覆盖它(就像某些覆盖height的display: inline;一样)。

代码语言:javascript
复制
#facebook-comments { display: none; }

然后用JS覆盖到display: block;

代码语言:javascript
复制
<script>
    var commentContainer = document.getElementById('facebook-comments');
    commentContainer.style['display'] = 'block';

    function showComments(e){
        ...
    }
</script>

在加载你的Facebook评论之前。

代码语言:javascript
复制
<script>
    var commentContainer = document.getElementById('facebook-comments');
    commentContainer.style['display'] = 'none';
</script>

也许不是最简单的方法,但它应该是可行的。

干杯!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6511135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档