Wie lässt man ein absolut positioniertes Element die Polsterung seines Elternteils ehren? Ich möchte, dass sich ein innerer Div über die Breite seines Elternteils erstreckt und am unteren Rand dieses Elternteils positioniert wird, im Grunde genommen eine Fußzeile. Aber das Kind muss die Polsterung des Elternteils ehren und das tut es nicht. Das Kind wird direkt gegen den Rand des Elternteils gedrückt.
Also ich will das:
aber ich verstehe das:
<html>
<body>
<div style="background-color: blue; padding: 10px; position: relative; height: 100px;">
<div style="background-color: gray; position: absolute; left: 0px; right: 0px; bottom: 0px;">css sux</div>
</div>
</body>
</html>
Ich kann es mit einem Rand um das innere Div schaffen, aber ich würde es vorziehen, das nicht hinzufügen zu müssen.
css
padding
css-position
d512
quelle
quelle
style="background-color: gray; position: absolute; left: 10px; right: 10px; bottom: 10px;"
?left:
undright:
für das (absolut positionierte) Kind verwenden. Ich füge dieses B / C hinzu, das die Antwort ist, nach der andere mit dem gleichen Problem wahrscheinlich suchen.Antworten:
Lassen Sie uns zunächst sehen, warum dies geschieht.
Der Grund ist, dass überraschenderweise, wenn eine Box
position: absolute
ihre enthaltende Box hat, die Polsterbox der Eltern ist (dh die Box um ihre Polsterung). Dies ist überraschend, da normalerweise (dh bei Verwendung einer statischen oder relativen Positionierung) das enthaltende Feld das Inhaltsfeld des übergeordneten Elements ist.Hier ist der relevante Teil der CSS-Spezifikation :
Der einfachste Ansatz - wie in Winters Antwort vorgeschlagen - ist die Verwendung
padding: inherit
auf der absolut positioniertendiv
. Es funktioniert jedoch nur, wenn Sie nicht möchten, dass die absolut positioniertediv
zusätzliche Polsterung vorhanden ist. Ich denke, die allgemeinsten Lösungen (da beide Elemente ihre eigene unabhängige Polsterung haben können) sind:Fügen Sie eine zusätzliche relativ positionierte
div
(ohne Polsterung) um die absolut positioniertediv
. Dieses neuediv
wird die Polsterung seines Elternteils respektieren, und das absolut positioniertediv
wird es dann füllen.Der Nachteil ist natürlich, dass Sie nur zu Präsentationszwecken mit dem HTML-Code herumspielen.
Wiederholen Sie die Polsterung (oder fügen Sie sie hinzu) für das absolut positionierte Element.
Der Nachteil hierbei ist, dass Sie die Werte in Ihrem CSS wiederholen müssen. Dies ist spröde, wenn Sie das CSS direkt schreiben. Wenn Sie jedoch ein Vorverarbeitungswerkzeug wie verwenden
SASS
oderLESS
dieses Problem vermeiden können, indem Sie eine Variable verwenden. Dies ist die Methode, die ich persönlich verwende.quelle
position: absolute
? Es ist überraschend, dass die enthaltende Box die Polsterbox ist, aber es muss einen Grund dafür gegeben haben, genau wie ich sicher bin, dass es einen Grund gibt, warum (ohnebox-sizing
) daswidth
&height
die Polsterung oder den Rand nicht enthält.box-sizing
Eigenschaft des Elternteils oder des Kindes beeinflusst. Dies liegt daran, dass sich dies auf die Größe auswirkt , wie in Breite / Höhe, aber nicht auf das enthaltende Feld, obwohl ich zugebe, dass es sinnvoller wäre, wenn es beide betrifft .padding: inherit
gut, wenn für die absolut positionierte Positiondiv
keine eigene Polsterung erforderlich ist, und ich habe diese Technik erwähnt. Es ist jedoch weniger flexibel, da Sie der absolut positionierten Position keine zusätzliche Polsterung hinzufügen könnendiv
(dh Sie können es nicht sagenpadding: inherit + 5px
). Deshalb bevorzuge ich die Techniken, die ich hier erwähne.position:absolute
untergeordneten Elements funktioniert in der Tat, wenn Sie nur nach dem untergeordneten Element suchen, um das Auffüllen des Elternteils zu respektieren. Wenn Sie dem Kind jedoch zusätzliche Auffüllungen hinzufügen möchten, müssen Sie das Verhältnis der Auffüllungen in Ihrem Code überprüfen. Keine saubere Möglichkeit, dies nur mit CSS zu tun.Eine Sache, die Sie versuchen könnten, ist die Verwendung des folgenden CSS:
Dadurch kann das untergeordnete Element den Abstand vom übergeordneten Element erben. Anschließend kann das untergeordnete Element so positioniert werden, dass es der Breite und dem Abstand des übergeordneten Elements entspricht.
Außerdem verwende ich
box-sizing: border-box;
für die beteiligten Elemente.Ich habe dies nicht in allen Browsern getestet, aber es scheint in Chrome, Firefox und IE10 zu funktionieren.
quelle
Nun, dies ist möglicherweise nicht die eleganteste Lösung (semantisch), aber in einigen Fällen funktioniert es ohne Nachteile: Verwenden Sie anstelle des Auffüllens einen transparenten Rand für das übergeordnete Element. Die absolut positionierten untergeordneten Elemente berücksichtigen den Rahmen und werden genau gleich gerendert (außer Sie verwenden den Rand des übergeordneten Elements für das Styling).
quelle
Verwenden Sie den Rand anstelle des Auffüllens im übergeordneten Bereich: http://blog.vjeux.com/2012/css/css-absolute-position-taking-into-account-padding.html
quelle
Hier ist mein bester Versuch. Ich habe ein weiteres Div hinzugefügt und es rot gemacht und die Größe deiner Eltern auf 200px geändert, nur um es zu testen. Die Idee ist, dass das Kind jetzt zum Enkelkind und der Elternteil zum Großelternteil wird. Der Elternteil respektiert also seinen Elternteil. Hoffe du bekommst meine Idee.
Bearbeiten:
Ich denke, was Sie versuchen zu tun, kann nicht getan werden. Absolute Position bedeutet, dass Sie ihm Koordinaten geben, die er ehren muss. Was ist, wenn der Elternteil eine Polsterung von 5 Pixel hat? Und Sie positionieren das Kind absolut oben: -5px; links: -5px . Wie ist es anzunehmen, die Eltern und Sie gleichzeitig zu ehren?
Meine Lösung
Wenn Sie möchten, dass es die Eltern ehrt, positionieren Sie es dann nicht unbedingt.
quelle
1.) Sie können keinen großen Rand für Eltern verwenden - falls Sie einen bestimmten Rand haben möchten.
2.) Sie können keinen Rand hinzufügen - falls Ihr Elternteil Teil eines anderen Containers ist und Sie möchten, dass Ihr Elternteil den vollen Rand übernimmt Breite dieses Großelternteils.
Die einzige Lösung, die anwendbar sein sollte, besteht darin, Ihre Kinder in einen anderen Behälter zu wickeln, damit Ihre Eltern Großeltern werden, und dann die neuen Kinderverpackungen / Eltern mit Polstern zu versehen. Oder Sie können die Kinder direkt mit Polstern versehen.
In deinem Fall:
quelle
Könnte leicht mit einem zusätzlichen Level von Div gemacht werden.
Demo: https://jsfiddle.net/soxv3vr0/
quelle
Polsterung hinzufügen : Erben Sie an Ihrer absoluten Position
quelle