2017-07-24 4 views
1

ich machen habe den folgenden Code:css wie Spalten auto fill Hintergrundfarbe auf Höhe 100%

#left { 
 
    float: left; 
 
    width: 180px; 
 
    background-color: #ff0000; 
 
} 
 

 
#right { 
 
    overflow: hidden; 
 
    background-color: #00FF00; 
 
}
<div> 
 
    <div id="left"> 
 
    left 
 
    </div> 
 
    <div id="right"> 
 
    right<br/> down 
 
    </div> 
 
</div>

Was ich versuche zu erreichen ist die linke Spalte machen background-color zu füllen das ganze div. Dies sollte unabhängig von der Höhe der Spalte #right der Fall sein.

bisher habe ich versucht/hinzugefügt

display: flex; 
height: 100% 
flex 1; 

Zum #left Stil, aber es funktioniert nicht.

Dies muss eine CSS-Lösung sein.

Antwort

0

Sie können flexbox hier verwenden. Demo:

.container { 
 
    /* become a flex-container */ 
 
    /* flex-items will be stretched vertically by default */ 
 
    display: flex; 
 
} 
 

 
#left { 
 
    width: 180px; 
 
    background-color: #ff0000; 
 
} 
 

 
#right { 
 
    /* occupy remaining width */ 
 
    flex: 1; 
 
    background-color: #00FF00; 
 
}
<div class="container"> 
 
    <div id="left"> 
 
    left 
 
    </div> 
 
    <div id="right"> 
 
    right 
 
    <br/> down 
 
    </div> 
 
</div>

Sie können auch CSS Grid Layout verwenden hier. Demo:

.container { 
 
    /* become a grid-container */ 
 
    display: -ms-grid; 
 
    display: grid; 
 
    
 
    /* first column should occupy 180px and second should occupy remaining width */ 
 
    -ms-grid-columns: 180px 1fr; 
 
    grid-template-columns: 180px 1fr; 
 
} 
 

 
#left { 
 
    background-color: #ff0000; 
 
} 
 

 
#right { 
 
    background-color: #00FF00; 
 
    
 
    /* specify column for IE/Edge explicitly */ 
 
    -ms-grid-column: 2; 
 
}
<div class="container"> 
 
    <div id="left"> 
 
    left 
 
    </div> 
 
    <div id="right"> 
 
    right 
 
    <br/> down 
 
    </div> 
 
</div>

+0

@gilesrpa Betrachten Sie upvoting, wenn es Ihnen geholfen hat :) –

0

.main-table { 
 
    display: table; 
 
} 
 

 
#left { 
 
    display: table-cell; 
 
    float: none; 
 
    width: 180px; 
 
    background-color: #ff0000; 
 
} 
 

 
#right { 
 
    display: table-cell; 
 
    overflow: hidden; 
 
    background-color: #00FF00; 
 
}
<div class="main-table"> 
 
    <div id="left"> 
 
    left 
 
    </div> 
 
    <div id="right"> 
 
    right<br/> down 
 
    </div> 
 
</div>

So etwas wie Tabelle in diesem Fall helfen Sie können !!

+0

Fügen Sie "Breite: 100%" zu "Haupttabelle" hinzu, damit dies funktioniert. –

0

müssen verstehen, warum #left nicht nimmt height von 100% und das ist, weil Sie float:left Eigenschaft in #left verwendet haben. Wenn float left für ein Element verwendet wird, ändert es sich standardmäßig in inline-block und das ist der Grund, dass Sie die Anzeige Ihres übergeordneten div ändern müssen, um dies zu beheben.

ist hier unter Verwendung von Flex,

div{ 
 
    display:flex; 
 
} 
 
div #left { 
 
    width: 180px; 
 
    background-color: #ff0000; 
 
} 
 

 
div #right { 
 
    flex:1; 
 
    overflow: hidden; 
 
    background-color: #00FF00; 
 
}
<div> 
 
    <div id="left"> 
 
    left 
 
    </div> 
 
    <div id="right"> 
 
    right<br/> down 
 
    </div> 
 
</div>

das Lesen zu verstehen, wie float funktioniert.

+0

Wie unterscheidet es sich von meiner Antwort? –

+0

@VadimOvchinnikov Beide Möglichkeiten werden hinzugefügt, d.h. unter Verwendung von Tabelle und Flex. Und OP bat um Flexibilität. Aber ich brauche andere, um zu verstehen, warum es nicht funktioniert hat, d.h. Höhe 100%. Ich muss einen Flex-Code hinzufügen, es ist dasselbe, dass Sie eine Klasse hinzugefügt haben, die ich div verwendet habe. Nur für diesen Fließkomma-Punkt muss ich diesen Code hinzufügen. – frnt