2016-03-20 7 views
0

Als der Standard-Box-Sizing-Modus alles, was es bisher getan hat, ärgert mich. Jetzt, wo ich denke, dass ich einen guten Zweck dafür gefunden habe, kann ich es nicht zum Ausdruck bringen. Prüfen Sie esVerwendung der Inhalt-Box, um Höhe auszugleichen

#container { 
 
    width:200px; 
 
    height:200px; 
 
    position:relative; 
 
} 
 

 
#textbar { 
 
    position:absolute; 
 
    left:0; right:0; bottom:0; 
 
    height:20px; 
 
    background-color:rgba(0,255,0,0.5); 
 
} 
 

 
#filler { 
 
    height:100%; 
 
    margin-bottom:20px; 
 
    box-sizing:content-box; 
 
    background-color:rgba(255,0,0,0.5); 
 
}
<div id="container"> 
 
    <div id="filler"></div> 
 
    <div id="textbar">here is text</div> 
 
</div>

Die Idee ist, dass die textbar 20px vom Boden des Behälters nehmen sollte und der Füllstoff sollte den Rest. Ich denke, da content-box so beschrieben wird, dass sie margin und padding in ihrer Gesamtbreite/-höhe enthält, subtrahiert sie diese 20px, die ich für die Margin von 100% gegeben habe und effektiv 100% -20px ist, aber kein Glück, sie deckt immer noch die gesamten Container und unterlegt die Textleiste.

Warum ist das? Wie könnte ich das sonst noch machen?

PS! Ich möchte calc() nicht aus Kompatibilitätsgründen verwenden.

+0

Werfen Sie einen Blick auf die Spezifikation für die Anzeige: flex :) – gdgr

+0

kein flex, ich brauche meine IE4-Benutzer! – user81993

+3

IE4 ?! Sie machen wohl Witze. – j08691

Antwort

0

Da Sie bereits position: absolute; für das Textfeld verwenden, würde ich einfach Folgendes tun.

Wechsel:

#filler { 
    height:100%; 
    margin-bottom:20px; 
    box-sizing:content-box; 
    background-color:rgba(255,0,0,0.5); 
} 

To:

#filler { 
    position: absolute; 
    top: 0; 
    left: 0; 
    right: 0; 
    bottom:20px; 
    background-color:rgba(255,0,0,0.5); 
} 
0

Ich stellte dar, da Inhalt-Box als auch Rand und padding in seiner gesamten Breite/Höhe beschrieben

Nr. Mit box-sizing: content-box, Werte von width und height enthalten nur die content box. Sie enthalten keine Abstände, Ränder oder Ränder.

enter image description here

Um das zu erreichen, was Sie wollen, Sie border-box mit Polsterung statt Marge verwenden können.

#container { 
 
    width: 200px; 
 
    height: 200px; 
 
    position: relative; 
 
} 
 
#textbar { 
 
    position: absolute; 
 
    left: 0; 
 
    right: 0; 
 
    bottom: 0; 
 
    height: 20px; 
 
    background-color: rgba(0, 255, 0, 0.5); 
 
} 
 
#filler { 
 
    height: 100%; 
 
    padding-bottom: 20px; 
 
    box-sizing: border-box; 
 
    background-color: rgba(255, 0, 0, 0.5); 
 
}
<div id="container"> 
 
    <div id="filler"></div> 
 
    <div id="textbar">here is text</div> 
 
</div>

Die modernen Alternativen würden calc(100% - 20px) oder Flexbox sein.

+0

nicht mach was OP will, Schau dir die 'bg-color' auf' textbar' an – dippas

Verwandte Themen