2016-05-25 16 views
0

Ich habe dieses Problem vor kurzem entdeckt.Box-Sizing + Grenze + absolute Kind

Check for demo on jsfiddle

Was mich betrifft, verhält sich der Umriss falsch, nicht wahr? Sollte das Boxmodell des .outside Elements seine Grenzen nicht enthalten, so dass das absolute positionierte Kindelement diese Grenzen ebenfalls umrahmt?

Ist dies ein bekanntes Problem? Ist das richtiges Verhalten? Wenn ja, könnte mir jemand erklären, warum es so ist?

What I expected to have as result

Bitte nicht kommentieren, wie das Problem zu lösen. Aber bitte erklären Sie, warum das Problem auftritt.

Dank im Voraus :)

Grüße Phlips

+0

Sie nicht festgelegt haben 'border' aber' outline' ... das ist das problem – jakob

+0

https://jsfiddle.net/2mytb43a/1/ - jetzt mit border - das gleiche problem – phlipsgeisler

+0

warten .. was fragst du eigentlich? willst du die Grenze von innen div wo sein? – jakob

Antwort

0

Dies ist normal, da position: absolute, die ein Element relativ zu einem Behälter positionieren. Standardmäßig ist der Container das Browserfenster. Wenn jedoch ein übergeordnetes Element entweder position: relative oder position: absolute enthält, wird es als übergeordnetes Element für Positionskoordinaten für seine untergeordneten Elemente fungieren.

Mit Eltern, haben Sie zwei Attribute:

border-right: 50px #f5f solid; 
border-bottom: 50px #f5f solid; 

Wenn Sie es entfernen, wird Umriss in voller Größe sein, da Sie 4 Attribute gesetzt: top, right, bottom, left 0 ist (es ändern, um die Änderung zu sehen).

+0

Okay, ja. Aber sollten sich die Ränder nicht in meinem Elterncontainer befinden, weil 'box-sizing: border-box'? Und deshalb deckt das Kindelement die Grenzen des Elternteils ab? – phlipsgeisler

+0

Ich denke, du verstehst mich falsch. Mit diesem Code (https://jsfiddle.net/2mytb43a/) habe ich dieses Ergebnis erwartet (https://jsfiddle.net/2mytb43a/2). – phlipsgeisler

1

Nur box-sizing: border-box nicht genug ist, Sie müssen von den Eltern Breite und Höhe erben:

.inside { 
    position: absolute; 
    outline: #00f solid 2px; 
    width: inherit; 
    height: inherit; 
} 

prüfen https://jsfiddle.net/2mytb43a/3/

+0

Okay danke. Aber warum hat 'top/left/right/bottom: 0' hier nicht funktioniert? – phlipsgeisler

+0

Da Sie Breite/Höhe nicht festgelegt haben, wurde keine Breite/Höhe vererbt, sodass das Kind nicht wissen kann, welche neue Größe des übergeordneten Elements mit der neuen Boxgröße festgelegt wurde. – jakob

Verwandte Themen