2017-09-27 1 views
0

Ich benutze eine Accordion Collapse Bootstrap-Komponente, um zwei Kollaps-Elemente auf einer Seite anzuzeigen. Das erste Minimierungselement ist standardmäßig minimiert und das zweite Element enthält einen iframe, der ein PDF-Dokument anzeigt. Ich brauche den zweiten zusammenklappbaren Gegenstand, der auf die linke Höhe des Bildschirms passt. Ich habe versucht, es mit Flex-Boxen zu erreichen, aber es scheint, dass es ein Problem mit dem Zusammenbruch-Ereignis und der Flex-Box gibt. Ich würde jede Hilfe schätzen.Forcing Iframe in eine Kollaps-Bootstrap-Komponente passend zum Bildschirm

Dies ist meine Geige Beispiel:

Example

Das folgende Bild zeigt das unerwünschte Verhalten:
enter image description here

<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> 
+0

Eigentlich ist Ihre Frage nicht klar, was Ihre Nachfrage ist. Ich habe es versucht und funktioniert absolut gut, was Problem Sie konfrontiert –

+0

@GajendraSingh Was Sie damit meinen, funktioniert absolut gut. Könnten Sie uns mitteilen, was Sie versucht haben? –

Antwort

-1

ersetzen Sie einfach den CSS height=100% mit max-height: 200px;.

+0

Hallo! Es wäre besser, wenn Sie [Antworten auf Fragen-Format] (https://stackoverflow.com/help/how-to-answer) für zukünftige Bemühungen bei Stack-Überlauf auschecken. -Danke – Momin

+0

Leider scheint die Lösung komplexer zu sein. –

+1

Dies liefert keine Antwort auf die Frage. Sobald Sie genug [Reputation] (https://stackoverflow.com/help/whats-reputation) haben, können Sie [jeden Beitrag kommentieren] (https://stackoverflow.com/help/privileges/comment); Stattdessen [geben Sie Antworten, die keine Klärung durch den Fragesteller erfordern] (https://meta.stackexchange.com/questions/214173/why-doe-i-need-50-reputation-to-comment-what-can- i-do-stattdessen). - [Aus Bewertung] (/ review/low-quality-posts/17456566) – clemens

1

Das mit Flexbox zu ermöglichen ist etwas kompliziert.

In diesem fiddle demo Ich habe/die unter Klassen angewendet, es zu erreichen, voll dynamisch, dachte, das wird die Akkordeons zeigt brechen/verstecken

.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%; 
} 

Eine Alternative, in diesem fiddle demo, das wird nicht brechen Sie das Akkordeon, würde stattdessen geben Sie die iframe eine Höhe Kombination von Viewport-Einheiten vh und CSS calc(). Auch wenn die fixe Höhe etwas bekannt ist, ist sie immer noch weniger dynamisch als die vorherige Probe.

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

Zusätzlich kann man das Skript in der ersten Probe zu beheben, oder eine Berechnung für das Skript in den zweiten hinzufügen, um die genaue Höhe zu bekommen, oder Swap 4 bis Bootstrap, die auf Flexbox basierten .

Austauschen auf Bootstrap 4 kann es nicht ohne einige Anpassungen lösen, also testen Sie es gründlich, bevor Sie mit einer Migration beginnen.

+1

Danke für Ihre Lösungen, wirklich zu schätzen. Das erste funktioniert definitiv nicht in dem Kontext, in dem ich es brauche. Der zweite ist eine gute Alternative, aber ich bin immer noch nicht zufrieden mit einer festen Höhe. Ich werde abwarten, ob wahrscheinlich jemand mit einer anderen möglichen Lösung herauskommt. Für jetzt habe ich Ihre Antwort gewählt. –

+0

@D.B Ich habe die 3 möglichen Wege dazu beschrieben, und die 2 besten Möglichkeiten sind, entweder das Skript zu erweitern, um die Höhe tatsächlich zu erkennen und einzustellen, oder Boostrap 4 zu verwenden, das noch einige Anpassungen benötigt. – LGSon

+0

@ D.B Ich habe die verfügbaren Optionen behandelt, um so nah wie möglich an CSS zu kommen. Findest du das gut genug, um auch akzeptiert zu werden? – LGSon