Gibt es eine Möglichkeit, eine untergeordnete DIV in einem übergeordneten Container-DIV zu haben, der breiter als die übergeordnete ist? Das untergeordnete DIV muss dieselbe Breite wie das Browser-Ansichtsfenster haben.
Siehe Beispiel unten:
Das Kind DIV muss als Kind des Eltern-Div bleiben. Ich weiß, dass ich willkürliche negative Ränder für das untergeordnete Div festlegen kann, um es breiter zu machen, aber ich kann nicht herausfinden, wie es im Wesentlichen 100% des Browsers breit wird.
Ich weiß, ich kann dies tun:
.child-div{
margin-left: -100px;
margin-right: -100px;
}
Aber ich brauche das Kind so breit wie der Browser, der dynamisch ist.
Aktualisieren
Vielen Dank für Ihre Antworten. Bisher scheint die naheliegendste Antwort darin zu bestehen, die untergeordnete DIV-Position absolut zu machen und die Eigenschaften left und right auf 0 zu setzen.
Das nächste Problem, das ich habe, ist, dass das übergeordnete Element die Position: relativ hat, was bedeutet, dass die linken und rechten Eigenschaften immer noch relativ zum übergeordneten div und nicht zum Browser sind. Siehe Beispiel hier: jsfiddle.net/v2Tja/2
Ich kann die Position relativ zum Elternteil nicht entfernen, ohne alles andere zu vermasseln.
position: relative
? Wofür brauchst duposition: relative
? Ich denke, was ich frage ist: Was versuchst du zu tun?Antworten:
Verwenden Sie die absolute Positionierung
quelle
position:fixed
. warum funktioniert es nicht richtigHier ist eine generische Lösung, die das untergeordnete Element im Dokumentfluss behält:
Wir stellen das
width
untergeordnete Element so ein, dass es die gesamte Breite des Ansichtsfensters ausfüllt, und stellen dann sicher, dass es den Rand des Bildschirms erreicht, indem wir es umleft
einen Abstand von der Hälfte des Ansichtsfensters auf minus 50% der Breite des übergeordneten Elements verschieben.Demo:
Die Browserunterstützung für vw und calc () kann im Allgemeinen als IE9 und neuer angesehen werden.
Hinweis: Dies setzt voraus, dass das Box-Modell auf eingestellt ist
border-box
. Ohneborder-box
müssten Sie auch Auffüllungen und Ränder abziehen, was diese Lösung zu einem Chaos macht.Hinweis: Es wird empfohlen, den horizontalen Überlauf Ihres Bildlaufcontainers auszublenden, da bestimmte Browser möglicherweise eine horizontale Bildlaufleiste anzeigen, obwohl kein Überlauf vorliegt.
quelle
position: relative
übergeordnetes Element zu packen!Ich habe lange nach einer Lösung für dieses Problem gesucht. Idealerweise möchten wir, dass das Kind größer ist als das Elternteil, ohne jedoch die Einschränkungen des Elternteils im Voraus zu kennen.
Und hier habe ich endlich eine brillante generische Antwort gefunden . Wörtlich kopieren:
quelle
90vw
. Es scheint auch, dass diesmargin-right
auf keinen Fall Auswirkungen hat.Basierend auf Ihrem ursprünglichen Vorschlag (Festlegen negativer Ränder) habe ich versucht, eine ähnliche Methode zu entwickeln, bei der Prozenteinheiten für die dynamische Browserbreite verwendet werden:
HTML
CSS:
Durch die negativen Ränder fließt der Inhalt aus dem übergeordneten DIV. Deshalb habe ich das so eingestellt
padding: 0 100%;
, dass der Inhalt wieder an die ursprünglichen Grenzen des Chlid DIV verschoben wird.Durch die negativen Ränder wird auch die Gesamtbreite des .child-div aus dem Ansichtsfenster des Browsers erweitert, was zu einem horizontalen Bildlauf führt. Daher müssen wir die Extrudierbreite abschneiden, indem wir ein
overflow-x: hidden
auf ein Großeltern-DIV anwenden (das das Elternteil des Eltern-Div ist):Hier ist die JSfiddle
Ich habe es mit Nils Kaspersson versucht
left: calc(-50vw + 50%)
. In Chrome & FF funktionierte es einwandfrei (ich bin mir über den IE noch nicht sicher), bis ich herausfand, dass Safari-Browser es nicht richtig machen. Ich hoffe, sie haben das behoben, sobald mir diese einfache Methode wirklich gefällt.Dies kann auch Ihr Problem beheben, bei dem sich das übergeordnete DIV-Element befinden muss
position:relative
Die 2 Nachteile dieser Problemumgehungsmethode sind:
Bitte lassen Sie mich wissen, wenn Sie Probleme mit dieser Methode haben;). Ich hoffe es hilft.
quelle
Mit Flexbox kann ein Kind mit drei CSS-Zeilen breiter als das übergeordnete Element gemacht werden.
Nur ist das Kind
display
,margin-left
undwidth
müssen eingestellt werden.margin-left
hängt vom Kind abwidth
. Die Formel lautet:CSS-Variablen können verwendet werden, um eine manuelle Berechnung des linken Randes zu vermeiden.
Demo Nr. 1: Manuelle Berechnung
Demo Nr. 2: Verwenden von CSS-Variablen
quelle
Ich habe das benutzt:
HTML
CSS
quelle
Sie können versuchen, Position: absolut. und geben Sie Breite und Höhe oben an: 'y-Achse von oben' und links: 'x-Achse'
quelle
Ich hatte ein ähnliches Problem. Der Inhalt des untergeordneten Elements sollte im übergeordneten Element bleiben, während der Hintergrund die gesamte Breite des Ansichtsfensters erweitern musste.
Ich habe dieses Problem behoben, indem ich das untergeordnete Element erstellt
position: relative
und ein Pseudoelement (:before
) hinzugefügt habeposition: absolute; top: 0; bottom: 0; width: 4000px; left: -1000px;
. Das Pseudoelement bleibt als Pseudohintergrundelement hinter dem eigentlichen Kind zurück. Dies funktioniert in allen Browsern (auch in IE8 + und Safari 6+ - ältere Versionen können nicht getestet werden).Kleine Beispielgeige: http://jsfiddle.net/vccv39j9/
quelle
overflow-x: hidden
.Neben der Lösung von Nils Kaspersson entscheide ich mich auch für die Breite der vertikalen Bildlaufleiste. Ich verwende
16px
als Beispiel, das von der Breite des Ansichtsfensters abgezogen wird. Dadurch wird verhindert, dass die horizontale Bildlaufleiste angezeigt wird.quelle
16px
was Sie subtrahieren müssen, weil es die horizontale Bildlaufleiste verursacht, ist der Standardrand / -auffüllungsbereich des Browsers. Anstatt ihn zu subtrahieren, verwenden Sie dies einfach,html, body{ margin:0; padding:0 }
sodass Sie keine zusätzliche Berechnung für die16px
Angenommen, das übergeordnete Element hat eine feste Breite, z. B.
#page { width: 1000px; }
und ist zentriert#page { margin: auto; }
, möchten Sie, dass das untergeordnete Element der Breite des Browser-Ansichtsfensters entspricht, die Sie einfach ausführen können:quelle
Versuchen Sie Folgendes, um Child Div so breit wie den Inhalt zu machen:
quelle
quelle
Ich weiß, dass dies alt ist, aber für jeden, der zu einer Antwort kommt, würden Sie es so machen:
Überlauf für ein Element, das das übergeordnete Element enthält, z. B. den Körper.
Geben Sie Ihrem untergeordneten Element eine Breite, die viel breiter als Ihre Seite ist, und positionieren Sie es absolut links um -100%.
Hier ist ein Beispiel:
Hier ist auch eine JS-Geige: http://jsfiddle.net/v2Tja/288/
quelle
Dann ist die Lösung die folgende.
HTML
CSS
quelle
Ich habe einige Ihrer Lösungen ausprobiert. Dieses :
ist bei weitem das Beste, da wir für kleinere Bildschirme kein zusätzliches CSS benötigen. Ich habe einen CodePen erstellt, um die Ergebnisse anzuzeigen: Ich habe ein übergeordnetes Div mit einem Hintergrundbild und ein untergeordnetes Divon-Div mit innerem Inhalt verwendet.
https://codepen.io/yuyazz/pen/BaoqBBq
quelle