2017-02-13 2 views
1

Ich versuche, ein DIV füllen seinen gesamten übergeordneten Container mit reinem CSS. height:100% tut es nicht und Flexbox oder display:table auf den Eltern auch nicht :(Div sollte die Elternhöhe füllen

In dem beigefügten Code half, wir reden über die innerste div.CodeMirror

Das Problem in der aktuellen Safari tritt auf MacOS. In Chrome alles ist in Ordnung.

html, body, #root {margin: 0; padding: 0; height: 100%; } 
 
.App {display: flex; flex-flow: column; height: 100%; } 
 
div.editorContainer {flex: 1 1 auto; display: flex; margin-bottom: 1em;} 
 
div.ReactCodeMirror {padding: 5px; width: 100%; background-color: #ddf;} 
 
.CodeMirror {height: 100%; border: 1px solid #ccc;}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/> 
 

 
<div id="root"> 
 
    <div class="App"> 
 
    <nav class="navbar navbar-default"></nav> 
 
    <div class="editorContainer"> 
 
     <div style="background-color: #aaf; width: 160px;">Side bar</div> 
 
     <div class="ReactCodeMirror"> 
 
     <div class="CodeMirror">Should fill light blue area</div> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div>

+0

Machen Sie '.ReactCodeMirror'' display: flex' ebenfalls. – CBroe

+0

@CBroe: hilft nicht (neueste Safari auf MacOS) – travelboy

+0

möglich Duplikat: http://stackoverflow.com/q/33636796/3597276 –

Antwort

1

Zunächst einmal, stimmt etwas nicht mit der Klassendeklaration von Codemirror, nach Ihrem Code, erfordert es die div eine Unterklasse von cm-s-RoboCom enthält, das heißt:

<div class="CodeMirror cm-s-robocom">Should fill light blue area</div> 

Wenn Sie diese CSS-Deklaration wollen entweder .CodeMirror oder haben .cm-s-RoboCom, sollten Sie ein Komma zwischen verwenden:

.CodeMirror, .cm-s-robocom {height: 100%; border: 1px solid #ccc;} 

Was für mich regelte es in Safari Höhe wurde hinzugefügt: 100% sowohl editorContainer und ReactCodeMirror:

div.editorContainer {flex: 1 1 auto; display: flex; margin-bottom: 1em;height:100%;} 
div.ReactCodeMirror {padding: 5px; width: 100%; background-color: #ddf;height:100%;} 

Also der letzte Schnipsel ist - ich denke, Sie sollten auch in der Höhe zu 100% auf der Seitenleiste hinzufügen machen es in Ordnung erscheinen:

html, body, #root {margin: 0; padding: 0; height: 100%; } 
 
.App {display: flex; flex-flow: column; height: 100%; } 
 
div.editorContainer {flex: 1 1 auto; display: flex; margin-bottom: 1em;} 
 
div.ReactCodeMirror {padding: 5px; width: 100%; background-color: #ddf; display: flex; flex: 1 1; } 
 
.CodeMirror {border: 1px solid #ccc; display: flex; flex: 1 1; }
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/> 
 
     
 
    <div id="root"> 
 
    <div class="App"> 
 
    <nav class="navbar navbar-default"></nav> 
 
    <div class="editorContainer"> 
 
     <div style="background-color: #aaf; width: 160px; top: 0; bottom: 0; position: relative;">Side bar</div> 
 
     <div class="ReactCodeMirror"> 
 
     <div class="CodeMirror">Should fill light blue area</div> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div>

+0

Richtig ... das wurde durcheinander gebracht, als ich versuchte, den Code für das Posten hier zu vereinfachen und ich entfernte die Klasse nur aus dem HTML, vergaß aber, sie auch aus dem CSS-Selektor zu entfernen. Das habe ich jetzt behoben. Aber, 'height: 100%' on '.CodeMirror' macht den Trick nicht. – travelboy

+0

Mit welchem ​​Browser testen Sie das? Auf Chrome scheint alles in Ordnung zu sein, der einzige Unterschied ist das Padding, das Sie vorher gesetzt haben. – unkgd

+0

Safari 10.0.2 auf OS X Sierra – travelboy

1

fügen Sie einfach height: 100% auf .CodeMirror (bug in Safari verursacht dies nicht pro Arbeit perly)

Also müssen Sie display: flex zu dem .CodeMirror übergeordneten, flex: 1 dem Kind hinzufügen.

html, body, #root {margin: 0; padding: 0; height: 100%; } 
 
.App {display: flex; flex-flow: column; height: 100%; } 
 
div.editorContainer {flex: 1 1 auto; display: flex; margin-bottom: 1em;} 
 
div.ReactCodeMirror {padding: 5px; width: 100%; background-color: #ddf; display: flex;} 
 
.CodeMirror {border: 1px solid #ccc; flex: 1;}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/> 
 

 
<div id="root"> 
 
    <div class="App"> 
 
    <nav class="navbar navbar-default"></nav> 
 
    <div class="editorContainer"> 
 
     <div style="background-color: #aaf; width: 160px;">Side bar</div> 
 
     <div class="ReactCodeMirror"> 
 
     <div class="CodeMirror">Should fill light blue area</div> 
 
     </div> 
 
    </div> 
 
    </div> 
 
</div>

+0

Ah ... das hätte vermasselt, als ich versuchte, den Code zu vereinfachen dafür Entsendung Hier und ich entfernte die Klasse nur aus dem HTML, vergaß aber, sie auch aus dem CSS-Selektor zu entfernen. Das habe ich jetzt behoben. Aber, 'height: 100%' on '.CodeMirror' macht den Trick nicht. – travelboy

+0

Funktioniert für mich auf Firefox und Chrome. – pol

+0

Funktioniert in Chrome, funktioniert nicht bei der neuesten Safari. Andere Stile haben möglicherweise einen Effekt (das Ganze beinhaltet Bootstrap), aber sie können bei Bedarf überschrieben werden. – travelboy

0

Diese Arbeit sollte

div.CodeMirror{height: 100%;} 
+0

Ich hatte bereits, und es funktioniert nicht in Safari. – travelboy

Verwandte Themen