Browserübergreifende Methode, um ein untergeordnetes Div an die Breite seines Elternteils anzupassen


72

Ich suche nach einer Lösung, um ein Kind divin das der Eltern zu integrieren width.

Die meisten Lösungen, die ich hier gesehen habe, sind nicht browserübergreifend kompatibel (z. B. display: table-cell;wird im IE nicht unterstützt <=8).

Bild zeigt das beabsichtigte Ergebnis, wobei ein untergeordnetes Div die volle Größe seines Elternteils hat und eine innere Polsterung aufweist


1
Wenn ich Ihr Recht verstehe, deklarieren Sie dem Kind einfach nicht die Breite.
Ivan Ivanić

Antworten:


75

Die Lösung besteht darin, einfach nicht zu deklarieren width: 100%.

Die Standardeinstellung ist width: auto, dass für Elemente auf Blockebene (z. B. div) der ohnehin verfügbare "volle Speicherplatz" belegt wird (anders als dies der width: 100%Fall ist).

Siehe: http://jsfiddle.net/U7PhY/2/

Nur für den Fall, dass es aus meiner Antwort noch nicht klar ist: Setzen Sie widthdas Kind einfach nicht auf div.

Sie könnten stattdessen interessiert seinbox-sizing: border-box .


3
Ich denke, es gibt nur ein Kind?
Ivan Ivanić

Ja, ich denke du hast recht. Das Diagramm verwirrte mich :( Zum Glück hatte ich bereits den "zweiten Teil" meiner Antwort geschrieben, und das ist die eigentliche Antwort hier.
dreißig Punkte

Sie müssen das width-Attribut für child überhaupt nicht deklarieren.
Daniel Gruszczyk

1
Es ist möglich, dass eine Stileigenschaft, die Teil einer Komponente ist, die Sie in Ihr Projekt aufgenommen haben, die widthEigenschaft festlegt und ein Problem verursacht. In diesem Fall explizit width: autofür das untergeordnete div festlegen .
StackOverflowUser

24

Sie können die box-sizingCSS-Eigenschaft verwenden, sie ist Crossbrowser (dh8 + und alle echten Browser) und eine ziemlich gute Lösung für solche Fälle:

#childDiv{
   box-sizing: border-box;
   width: 100%; //or any percentage width you want
   padding: 50px;
}

Geige


1

In Ihrem Bild platzieren Sie die Polsterung außerhalb des Kindes. Das ist nicht der Fall. Das Auffüllen erhöht die Breite eines Elements. Wenn Sie also das Auffüllen hinzufügen und ihm eine Breite von 100% geben, hat es eine Breite von 100% + Auffüllen. Um das zu erreichen, was Sie möchten, müssen Sie entweder dem übergeordneten Div einen Abstand hinzufügen oder dem inneren Div einen Rand hinzufügen. Da Divs Elemente auf Blockebene sind, werden sie automatisch auf die Breite ihres übergeordneten Elements erweitert.


Ich habe ein neues Bild hochgeladen - Entschuldigung für das schlechte Diagramm! Natürlich weiß ich, was Polsterung bedeutet;)
mate64

1

Wenn Sie position:relative;das äußere Element anlegen , platziert sich das innere Element entsprechend diesem. Dann entspricht a width:auto;am inneren Element der Breite des äußeren.


Dann einfach entfernen width:100%;und die Box passt automatisch hinein.
Steeven


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.