【问题标题】:Forcing Iframe into a collapse bootstrap component to fit screen强制 iframe 进入折叠引导组件以适应屏幕
【发布时间】:2018-03-08 10:22:42
【问题描述】:

我正在使用 Accordion Collapse 引导组件在页面中显示两个折叠项。默认情况下,第一个折叠项是折叠的,第二个在它的主体中有一个显示 pdf 文档的 iframe。我需要第二个可折叠项目来适应屏幕的左侧高度。我试图用弹性盒来实现它,但折叠事件和弹性盒似乎存在问题。我将不胜感激。

这是我的小提琴示例:

Example

下图描述了不良行为:

<vp-leftpanel>
   <div class="panel-group" id="accordion" role="tablist" aria-
      multiselectable="true">
      <div class="panel panel-default">
    <div class="panel-heading" role="tab" id="headingOne">
        <h4 class="panel-title">
            <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
                {{panelHeadingData}}
            </a>
        </h4>
    </div>
    <div id="collapseOne" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingOne">
        <div class="panel-body">
            <div *ngIf="candidate.hasEmailSourceData">

                .....

            </div>                
        </div>
    </div>
</div>
<div class="panel panel-default">
    <div class="panel-heading" role="tab" id="headingTwo">
        <div class="panel-title">
            <div class="row">
                <div class="col-md-6">
                    <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
                        {{panelHeadingResume}}
                    </a>
                </div>
                <div class="col-md-6">
                    <select class="form-control" (change)='loadDocument($event.target.value)'>
                        <option [value]="d.id" *ngFor="let d of candidate.candidateDocuments">{{d.friendlyName}}</option>
                    </select>
                </div>
            </div>

        </div>
    </div>
    <div id="collapseTwo" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingTwo">
        <div class="panel-body">
            <div *ngIf="candidate.candidateDocuments.length > 0" class="apply-flex">
                <iframe [src]="documentSelectedPathSafe" type="application/pdf" ></iframe>
            </div>
        </div>
    </div>
 </div>
  </div>
  </vp-leftpanel>

【问题讨论】:

  • 其实你的问题并不清楚你的需求是什么。我试过了,工作得很好你遇到了什么问题
  • @GajendraSingh 你的意思是它工作得很好。你能分享一下你试过的方法吗?

标签: javascript css twitter-bootstrap-3 flexbox


【解决方案1】:

使用 Flexbox 实现这一点有点复杂。

在这个fiddle demo 中,我创建/应用了以下类来完成它,完全动态,认为这会破坏手风琴的显示/隐藏

.fullvh {
  height: 100vh;
}
.flex-box-col {
  display: flex;
  flex-direction: column;
}
.flex-grow {
  flex-grow: 1;
}
.pos-relative {
  position: relative;
}
/* as it didn't work adding "flex-box-col flex-grow" to this
   elements class, I added it using its ID #collapseTwo */
#collapseTwo {         
  display: flex;
  flex-direction: column;
  flex-grow: 1;
}
.pos-absolute {
  position: absolute;
  height: 100%;
  width: 100%;
}

在此fiddle demo 中,另一种不会破坏手风琴的方法是为iframe 提供结合视口单元vh 和CSS calc() 的高度。即使固定高度160px 有点已知,它仍然不如之前的示例动态。

#collapseTwo iframe {
  height: calc(100vh - 160px);
  width: 100%;
}

此外,可以修复第一个示例中的脚本,或为第二个示例中的脚本添加计算,以获得准确的高度,或切换到基于 Flexbox 的 Bootstrap 4。

如果不进行一些调整,切换到 Bootstrap 4 可能无法解决问题,因此在开始迁移之前对其进行彻底测试。

【讨论】:

  • 感谢您的解决方案,非常感谢。第一个绝对在我需要的情况下不起作用。第二个是一个不错的选择,但我对固定高度仍然不满意。我会等着看是否有人提出另一种潜在的解决方案。现在我已经对你的答案投了赞成票。
  • @DB 我已经介绍了 3 种可能的方法来做到这一点,恕我直言,两个最好的选择是扩展脚本以实际检测和设置高度,或者使用 Boostrap 4,它仍然可能需要一些调整。
  • @D.B 我已经介绍了可用的选项,以尽可能接近仅使用 CSS 可以完成的工作。你觉得这个好到可以接受吗?
【解决方案2】:

只需将 CSS height=100% 替换为 max-height: 200px;

【讨论】:

  • 嗨!如果您签出Answering Questions Format 以备将来在堆栈溢出时的努力会更好。 -谢谢
  • 不幸的是,解决方案似乎比这更复杂。
  • 我在很长的解释中回答,但不知何故,有人编辑了我的答案,它变得那么短..我错了吗?在发布答案之前,我先在我的电脑上尝试过..
猜你喜欢
  • 1970-01-01
  • 2019-02-20
  • 1970-01-01
  • 2015-12-01
  • 2015-07-19
  • 2017-11-28
  • 2011-06-23
  • 2013-03-10
  • 2013-12-11
相关资源
最近更新 更多