2012-06-17 5 views
32

Ich habe die Breite der Container in Prozent definiert. Ich möchte einen Rahmen hinzufügen (3px auf der rechten Seite einer Breite), da die Containerbreite in% ist, während die Rahmenbreite in px ist, wie kann ich die Breite des Containers anpassen?CSS: Breite in Prozent und Rahmen

<div class="wrap"> 
    <div class="left">...</div> 
    <div class="right">...</div> 
</div> 

.wrap{ 
    width:100%; 
} 

.left{ 
    width:30%; 
} 

.right{ 
    width:70%; 
} 

Ich möchte 3px Grenze auf der rechten Seite von .left hinzufügen. Zum Beispiel:

.left{ 
    width:30%; 
    border:3px solid #000; 
} 

Da ich Breite in% definiert habe, was ist der beste Weg, um die Breite des .left neu zu justieren. Ich kann die Breite grob auf 29% verringern, aber ich will es genau machen.

+0

Zugabe * Polsterung * in den Behälter? Beachten Sie, dass Sie * width: 100% * dann entfernen sollten. –

+1

Mögliches Duplikat von [Wie füge ich 1px Rahmen zu einem div hinzu, dessen Breite ein Prozentsatz ist?] (Http: // stackoverflow.com/questions/8278523/how-do-i-add-1px-Grenze-zu-einem-div-wessen-Breite-ist-ein-Prozent) – Fractalizer

Antwort

81

Verwenden Sie die box-sizing: border-box Eigenschaft. Es ändert das Verhalten des Boxmodells, um Padding und Rahmen als Teil der Gesamtbreite des Elements zu behandeln (nicht jedoch die Ränder). Dies bedeutet, dass die festgelegte Breite oder Höhe des Elements Dimensionen enthält, die für das Padding und den Rahmen festgelegt wurden. In Ihrem Fall würde das die Breite des Elements bedeuten und die Breite des Rahmens würde 30% des verfügbaren Platzes einnehmen.

CSS box model

Unterstützung für sie nicht perfekt ist, wird jedoch Anbieter Präfixe die meisten, wenn nicht alle modernen Browser fangen:

.left { 
    width: 30%; 
    border: 3px solid #000; 

    -moz-box-sizing: border-box; 
    -webkit-box-sizing: border-box; 
    -ms-box-sizing: border-box; 
    box-sizing: border-box; 
} 

Weitere Informationen finden Sie auf der MDN und Quirksmode finden.

According to Quirksmode, die 3 Anbieter Präfixe oben (-moz-, -webkit- und -ms-) verwenden, können Sie Unterstützung für alle Browser bekommen, auch IE8.

+18

Warum in der Erde ist dies nicht das Standardverhalten – magritte

+1

"Alle Browser" oben erwähnt bedeutet dies: http://caniuse.com/#search=border-box - Das heißt, kein IE6 und IE7. –

+0

@Emil Sie sind nicht wirklich Unterstützung wert ab dem Jahr 2014, es sei denn, es gibt einen guten geschäftlichen Grund, dies zu tun – Bojangles

4

Der einfachste browserübergreifende Weg ist, den Rahmen NICHT auf die äußeren divs zu setzen und stattdessen auf ein NEW div innerhalb .left zu setzen. Einfach und funktioniert gut.

+0

Danke, es funktioniert, die sauberste Lösung. – Alex

1

Gerade px zu vw wie

ändern
border-width: 10px; 

zu

border-width: 10vw; 

Seine tun was Prozentsatz tun ....

+0

vw und vh tun nicht, was Prozentsätze tun. Sie sind Ansichtsfenstereinheiten und basieren auf der Breite des Ansichtsfensters und ignorieren Elemente im Ansichtsfenster. – Carlin

Verwandte Themen