Bootstrap 3 - 使用Iframe 100%填充区域

时间:2014-10-18 04:50:13

标签: html iframe twitter-bootstrap-3

我正在修改Dashboard示例并尝试使用iframe完全填充页面区域,因此它会延伸到边缘但我无法这样做。

基本上我有导航,侧边栏,我想用iframe完全填充页面区域但是它会水平创建边距而不会垂直拉伸iframe。

有谁知道我如何填满整个区域?如果页面缩小,如果可能的话,它还需要在响应式视图中工作。

编辑:问题是与bootstrap相关的问题,我想,也许我需要覆盖一些CSS或更改列设置?

编辑2:好的,我有点回答了我的问题,现在添加新的CSS规则并调整引导代码后,它有一点延伸整个区域但是有一个小的边距/边框,我现在需要摆脱,如果我使用绝对它使iframe离开页面向右而不是向右边缘,任何想法如何我可以使用整个区域?我是Bootstrap的新手,所以我可能只需稍作调整即可。

我目前的代码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="resources/favicon.ico">

    <title>Website</title>

    <!-- Bootstrap core CSS -->
    <link href="css/bootstrap.min.css" rel="stylesheet">

    <!-- Custom styles for this template -->
    <link href="css/dashboard.css" rel="stylesheet">

<style type="text/css">
    body,html,.main-display-area,.col-md-10 {
        height:100%;
    }
</style>

    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>

  <body>

    <nav class="navbar navbar-default navbar-fixed-top" role="navigation">
      <div class="container-fluid">
        <div class="navbar-header">
          <a class="navbar-brand" href="#">Website</a>
        </div>

      </div>
    </nav>

    <div class="container-fluid">
      <div class="row">
        <div class="col-sm-3 col-md-2 sidebar">
          <ul class="nav nav-sidebar">
            <li class="active"><a href="">Overview</a></li>
            <li><a href="">Reports</a></li>
            <li><a href="">Analytics</a></li>
            <li><a href="">Export</a></li>
            <li><a href="">Nav item</a></li>
            <li><a href="">Nav item again</a></li>
            <li><a href="">One more nav</a></li>
            <li><a href="">Another nav item</a></li>
            <li><a href="">More navigation</a></li>
            <li><a href="">Nav item again</a></li>
            <li><a href="">One more nav</a></li>
            <li><a href="">Another nav item</a></li>
          </ul>
        </div>
      </div>

<div id="frame" class="col-md-10 col-md-offset-2 main">
    <iframe src="http://www.w3schools.com" id="frame" frameborder="0" style="width: 100%; height: 100%;"></iframe>
</div>

    </div>

    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="js/jquery.min.js"></script>
    <script src="js/bootstrap.min.js"></script>
    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
    <script src="js/ie10-viewport-bug-workaround.js"></script>
  </body>
</html>

8 个答案:

答案 0 :(得分:17)

对于它的价值,这对我有用

<div class="row">
        <div class="col-xs-12 col-sm-12 col-md-12">
            <iframe style="width: 100vw;height: 100vh;position: relative;" src="https://example.com" frameborder="0" allowfullscreen></iframe>
        </div>
</div>

答案 1 :(得分:7)

我遇到了关于iframe不接受100%身高的问题。 See this thread.

解决方案是在iframe上使用style="position:absolute;"

答案 2 :(得分:5)

100%高度表示可用高度的100%。由于没有任何进展,这足以让iframe显示出来。

你需要强行打开所述iframe的容器才能拥有所有可用的页面高度,这样100%的高度就可以达到你想要的效果,填满所有空间。

这是一个恼人的问题= p

我经常用javascript解决,捕获视口高度并手动将容器高度设置为必要的高度。只是注意不要设置它,否则你会得到一个侧滚动条,因为它会溢出。如果你想尝试,这是我用来获取窗口(视口)大小的函数。这是你的HTML(我删除的东西使它变小,但我测试了它)

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <!-- links might vary, my folder is different. Also, adding these at the end for "speed" is bs, it often causes scripts to fail -->
    <script type="text/javascript" src="../jquery-2.1.1.min.js"></script>
    <script type="text/javascript" src="js/bootstrap.min.js"></script>
  </head>
  <body>   
    <nav class="navbar navbar-default navbar-fixed-top" role="navigation">
      <div class="container-fluid">
        <div class="navbar-header">
          <a class="navbar-brand" href="#">Website</a>
        </div>
      </div>
    </nav>    
    <div class="container-fluid">
      <div class="row">
        <div class="col-sm-3 col-md-2 sidebar">
          <ul class="nav nav-sidebar">
            <li class="active"><a href="">Overview</a></li>
            <li><a href="">Reports</a></li>
            <!-- ... -->
            <li><a href="">Another nav item</a></li>
          </ul>
        </div>
        <div class="col-sm-9 col-md-10 main">
        <!-- note: you should not add the offsets, removed them. Also note this is inside the row, your original wasan't -->
            <iframe id="iframeid" src="http://www.google.com" style="width:100%; height:100%;margin:0px;border:0px"></iframe>
        </div>
      </div>  
    </div>
    <script type="text/javascript">
        function windowDimensions() { // prototype/jQuery compatible
        var myWidth = 0, myHeight = 0;
        if( typeof( window.innerWidth ) == 'number' ) {
            //Non-IE or IE 9+ non-quirks
            myWidth = window.innerWidth;
            myHeight = window.innerHeight;
        } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
            //IE 6+ in 'standards compliant mode'
            myWidth = document.documentElement.clientWidth;
            myHeight = document.documentElement.clientHeight;
        } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
            //IE 5- (lol) compatible
            myWidth = document.body.clientWidth;
            myHeight = document.body.clientHeight;
        }
        if (myWidth < 1) myWidth = screen.width; // emergency fallback to prevent division by zero
        if (myHeight < 1) myHeight = screen.height; 
        return [myWidth,myHeight];
    }
    var dim = windowDimensions();
    myIframe = $('#iframeid'); // changed the code to use jQuery
    myIframe.height((dim[1]) + "px");
    </script>
  </body>
</html>

答案 3 :(得分:0)

在我调整后,我通过将填充设置为0px找到了解决方案,这似乎解决了所有问题。谢谢大家的回答。 :d

答案 4 :(得分:0)

我也试图解决类似的问题(我目前正在使用Bootstrap 4)。我的布局顶部有<div>,其中包含控件,内容底部有<iframe>,内容必须填满页面的剩余高度(如果需要,还有滚动条)。我在这里添加了侧边栏以重现原始问题。

我使用calc()和vh单位解决了它:

CSS:

   <style>
        #toolbarContainer { margin-bottom:6px; }
        #myIframe { width:100%; border: 1px solid #0094ff; border-radius:3px; }
    </style>

HTML:

<body>
    <div class="container-fluid">
        <div id="toolbarContainer">        
            <div class="row"> [content here]</div>
            <div class="row"> [more content here]</div>
        </div>
        <div class="row">
            <div class="col-3 col-md-2" id="sidebar">
                <div class="alert alert-info">Sidebar content here</div>
            </div>
            <div class="col-9 col-md-10">
                <iframe id="myIframe" src="about:blank"></iframe>
            </div>
         </div>
    </div>
</body>

JAVASCRIPT(把它放在</body>结束标记之前):

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
    $(function () {
        document.getElementById('myIframe').style.height = 'calc(100vh - ' + ($('#myIframe').offset().top + 25) + 'px)';            
    });
</script>

我在Chrome,IE11,Edge和Firefox中对此进行了测试,并且正常工作,正确处理浏览器窗口的大小调整,包括。我不知道为什么我必须在计算中添加常数+25,它才有用。通过略微更改该数字,您可以增加/减少iframe下方的白边。

如果需要,你可以轻松摆脱jQuery,使用body OnLoad()处理程序和纯javascript表达式来获取iframe的.top坐标。

没有JavaScript解决方案

如果您确定顶部栏的高度,则可以完全摆脱javascript,使用此CSS与上述相同的HTML:

<style>
    #divFrameContainer { margin-bottom:6px; }
    #ifrBtLingua { height: calc(100vh - 100px); width:100%; border: 1px solid #0094ff; border-radius:3px; padding-top:6px;  }
</style>

(用适当的高度替换100px)

答案 5 :(得分:0)

我已经通过Bootstrap 4完成了以下操作

    <iframe class="position-absolute w-100 h-100 border-0" src="https://foo.bar"></iframe>

这是我能想到的最简单的解决方案,它是“纯” Bootstrap。

答案 6 :(得分:0)

这可能对某人有所帮助 - 这是在 BS 3.3.7 上


    <div class="embed-responsive embed-responsive-16by9">
       <iframe class="embed-responsive-item" src="..."></iframe>
    </div>

答案 7 :(得分:0)

bootstrap 5 解决方案是

<div class="ratio ratio-16x9">
 <iframe... [your iframe, no height/width set]> </iframe>
</div>