Ich habe Bilder und eingefügte Kästchen mit float: rechts (oder links) viele Male oben in einem Container schweben lassen. Kürzlich habe ich die Notwendigkeit festgestellt, ein Div in der unteren rechten Ecke eines anderen Div mit dem normalen Textumbruch zu schweben, den Sie mit float erhalten (Text nur oben und links umbrochen).
Ich dachte, dass dies relativ einfach sein muss, obwohl float keinen unteren Wert hat, aber ich war nicht in der Lage, dies mit einer Reihe von Techniken zu tun, und das Durchsuchen des Webs hat nichts anderes als die Verwendung der absoluten Positionierung ergeben, aber dies ist nicht der Fall Geben Sie das richtige Zeilenumbruchverhalten an.
Ich hatte gedacht, dass dies ein sehr verbreitetes Design sein würde, aber anscheinend ist es nicht so. Wenn niemand einen Vorschlag hat, muss ich meinen Text in separate Felder aufteilen und das div manuell ausrichten, aber das ist ziemlich prekär und ich würde es hassen, es auf jeder Seite tun zu müssen, die es benötigt.
EDIT: Nur eine Notiz für jeden, der hierher kommt. Die oben als Duplikat verlinkte Frage ist in der Tat kein Duplikat. Die Anforderung, dass Text um das eingefügte Element gewickelt wird, macht es völlig anders. Tatsächlich macht die Antwort auf die Antwort mit der höchsten Abstimmung hier deutlich, warum die Antwort in der verknüpften Frage als Antwort auf diese Frage falsch ist. Auf jeden Fall scheint es immer noch keine allgemeine Lösung für dieses Problem zu geben, aber einige der hier und in der verknüpften Frage veröffentlichten Lösungen funktionieren möglicherweise für bestimmte Fälle.
Antworten:
Setzen Sie das übergeordnete Div auf
position: relative
, dann das innere Div auf ...... und los geht's :)
quelle
Eine Möglichkeit, es zum Laufen zu bringen, ist die folgende:
Drehen Sie das übergeordnete Div mit um 180 Grad
JSfiddle: http://jsfiddle.net/wcneY/
Drehen Sie nun alle Elemente, die nach links schweben (geben Sie ihnen eine Klasse), um 180 Grad, um sie wieder gerade zu platzieren. Voila! sie schweben nach unten.
quelle
Nachdem ich einige Tage mit verschiedenen Techniken gekämpft habe, muss ich sagen, dass dies unmöglich erscheint. Selbst mit Javascript (was ich nicht tun möchte) scheint es nicht möglich zu sein.
Zur Verdeutlichung für diejenigen, die es vielleicht nicht verstanden haben - das ist es, wonach ich suche: Beim Veröffentlichen ist es durchaus üblich, einen Einschub (Bild, Tabelle, Abbildung usw.) so zu gestalten, dass sein unteres Ende mit dem unteren Ende des letzten übereinstimmt Textzeile eines Blocks (oder einer Seite) mit Text, der auf natürliche Weise über und rechts oder links um den Einschub fließt, je nachdem, auf welcher Seite der Seite sich der Einschub befindet. In HTML / CSS ist es trivial, den Float-Stil zu verwenden, um den oberen Rand eines Einschubs mit dem oberen Rand eines Blocks auszurichten. Zu meiner Überraschung scheint es jedoch unmöglich zu sein, den unteren Rand des Textes und des Einschubs auszurichten, obwohl dies eine häufige Layoutaufgabe ist .
Ich denke, ich muss die Designziele für diesen Artikel überdenken, es sei denn, jemand hat einen Last-Minute-Vorschlag.
quelle
Ich habe dies in JQuery erreicht, indem ich ein Strebenelement mit einer Breite von Null über dem Schwimmer rechts platziert und dann die Strebe (oder das Rohr) entsprechend der Größe des Elternteils abzüglich der Größe des schwebenden Kindes dimensioniert habe.
Bevor js eintritt, verwende ich den Positions-Absolut-Ansatz, der funktioniert, aber einen Textfluss hinter sich lässt. Deshalb wechsle ich in die statische Position, um den Strebenansatz zu ermöglichen. (Header ist das übergeordnete Element, Cutout ist das, was ich unten rechts haben möchte, und Pipe ist meine Strebe)
CSS
Die Pipe muss zuerst kommen, dann der Ausschnitt, dann der Text in der HTML-Reihenfolge.
quelle
Dadurch wird am unteren Rand der Seite ein festes Div eingefügt und beim Scrollen nach unten am unteren Rand fixiert
quelle
Fügen Sie das div in ein anderes div ein und setzen Sie den Stil des übergeordneten div auf
position:relative;
Dann setzen Sie auf dem untergeordneten div die folgenden CSS-Eigenschaften:position:absolute; bottom:0;
quelle
Wenn Sie damit einverstanden sind, dass nur die unterste Zeile des Textes zur Seite des Blocks geht (im Gegensatz zu vollständig um und unter dem Block, was Sie nicht tun können, ohne den Block zu beenden und einen neuen zu beginnen), ist dies der Fall Es ist nicht unmöglich, einen Block in eine der unteren Ecken eines übergeordneten Blocks zu schweben. Wenn Sie einen Inhalt in ein Absatz-Tag innerhalb eines Blocks einfügen und einen Link in die untere rechte Ecke des Blocks verschieben möchten, fügen Sie den Link in den Absatzblock ein und setzen Sie ihn auf float: right. Fügen Sie dann ein div-Tag mit clear ein : Beide werden direkt unter dem Ende des Absatz-Tags gesetzt. Das letzte Div besteht darin, sicherzustellen, dass das übergeordnete Tag die schwebenden Tags umgibt.
quelle
Wenn Sie das übergeordnete Element als Position: relativ festlegen, können Sie das untergeordnete Element auf die unterste Einstellungsposition setzen: absolut; und unten: 0;
quelle
Wenn der Text gut verpackt werden soll: -
quelle
Ich weiß, dass dieses Zeug alt ist, aber ich bin kürzlich auf dieses Problem gestoßen.
Verwenden Sie absolute Position Divs Ratschläge ist wirklich dumm, weil die ganze Float-Sache irgendwie Punkt mit absoluten Positionen verliert.
Jetzt habe ich keine universelle Lösung gefunden, aber in vielen Fällen verwenden wir schwebende Divs, um etwas in einer Reihe anzuzeigen, wie eine Reihe von Span-Elementen. und das kann man nicht vertikal ausrichten.
Um einen ähnlichen Effekt zu erzielen, können Sie Folgendes tun: Lassen Sie das div nicht schweben, sondern setzen Sie seine Anzeigeeigenschaft auf
inline-block
. dann können Sie es vertikal ausrichten, wie es Ihnen gefällt. Sie müssen nur Satz Eltern div Eigenschaftvertical-align
entwedertop
,bottom
,middle
oderbaseline
Ich hoffe das hilft jemandem
quelle
Mit der Einführung von Flexbox ist dies ohne viel Hacking recht einfach geworden.
align-self: flex-end
auf dem untergeordneten Element wird es entlang der Querachse ausgerichtet .Ausgabe:
Code-Snippet anzeigen
quelle
Ich hatte diese Lösung auch schon lange gefunden. Das bekomme ich:
Align-Self: Flex-End;
Link: https://philipwalton.github.io/solved-by-flexbox/demos/vertical-centering/ Ich kann mich jedoch nicht erinnern, von wo aus ich diesen Link geöffnet habe. Ich hoffe es hilft
quelle
Ich würde nur einen Tisch machen.
Und das CSS:
Sehen Sie es in Aktion:
http://jsfiddle.net/mLphM/1/
quelle
Ich habe mehrere dieser Techniken ausprobiert, und die folgenden haben bei mir funktioniert. Wenn also alles andere hier fehlschlägt, versuchen Sie dies, weil es bei mir funktioniert hat :).
quelle
A wählte diesen Ansatz von @ dave-kok. Es funktioniert jedoch nur, wenn der gesamte Inhalt ohne Scrollen passt. Ich weiß es zu schätzen, wenn sich jemand verbessern wird
Hier ist der Code http://jsfiddle.net/d9t9joh2/
quelle
Dies ist jetzt mit Flexbox möglich. Setzen Sie einfach die 'Anzeige' des übergeordneten div auf 'flex' und setzen Sie die Eigenschaft 'margin-top' auf 'auto'. Dies verzerrt keine Eigenschaft der beiden Div.
quelle
Ich bin mir nicht sicher, aber ein zuvor veröffentlichtes Szenario schien zu funktionieren, wenn Sie position verwenden: relativ statt absolut für das untergeordnete div.
Und keine Tische ...!
quelle
Wenn Sie eine relative Ausrichtung benötigen und DIVs Ihnen immer noch nicht das bieten, was Sie möchten, verwenden Sie einfach Tabellen und setzen Sie valign = "bottom" in der Zelle, in der der Inhalt nach unten ausgerichtet werden soll. Ich weiß, dass es keine gute Antwort auf Ihre Frage ist, da DIVs Tabellen ersetzen sollen, aber das hatte ich kürzlich mit einer Bildunterschrift zu tun und es hat bisher einwandfrei funktioniert.
quelle
Ich habe dieses zuvor veröffentlichte Szenario auch ausprobiert.
Die absolute Positionierung fixiert das Div beim Laden der Seite im untersten Teil des Browsers. Wenn Sie jedoch nach unten scrollen, wenn die Seite länger ist, wird nicht mit Ihnen gescrollt. Ich habe die Positionierung relativ geändert und sie funktioniert perfekt. Das Div geht beim Laden direkt nach unten, sodass Sie es erst sehen, wenn Sie unten sind.
quelle
Ein interessanter Ansatz besteht darin, ein paar rechte Float-Elemente übereinander zu stapeln.
Das einzige Problem ist, dass dies nur funktioniert, wenn Sie die Höhe der Box kennen.
quelle
Stu's Antwort kommt der bisherigen Arbeit am nächsten, berücksichtigt jedoch immer noch nicht die Tatsache, dass sich die Höhe Ihres äußeren Divs ändern kann, je nachdem, wie der Text darin eingeschlossen ist. Es reicht also nicht aus, das innere Div (durch Ändern der Höhe des "Rohrs") nur einmal neu zu positionieren. Diese Änderung muss innerhalb einer Schleife erfolgen, damit Sie kontinuierlich überprüfen können, ob Sie die richtige Positionierung erreicht haben, und diese bei Bedarf neu einstellen können.
Das CSS aus der vorherigen Antwort ist immer noch vollkommen gültig:
Das Javascript sollte jedoch eher so aussehen:
quelle
Ich weiß, dass es ein sehr alter Thread ist, aber ich würde trotzdem gerne antworten. Wenn jemand den folgenden CSS & HTML folgt, dann funktioniert es. Die Kinderfußzeile haftet wie Klebstoff am Boden.
quelle
Verwenden der CSS-
margin-top
Eigenschaft mit dem Ziel, die Fußzeile an den unteren Rand des Containers zu setzen. Und um die CSS-text-align-last
Eigenschaft zu verwenden, setzen Sie den Inhalt der Fußzeile in die Mitte.quelle
Oh, Jugendliche ... Hier sind Sie:
Keine absolute Position! Reaktionsschnell! Alte Schule
quelle
Ziemlich alte Frage, aber immer noch ... Sie können ein Div wie folgt an den unteren Rand der Seite schweben lassen:
Sie können sehen, wo die Magie passiert. Ich denke, Sie könnten das Gleiche tun, um es auf den Grund eines übergeordneten Div zu bringen.
quelle
einfach ...... in der HTML-Datei rechts .... haben Sie die "Fußzeile" (oder das Div, das Sie unten wollen) unten. Also mach das nicht:
TUN SIE DAS: (haben Sie die Fußzeile darunter.)
Danach können Sie die CSS-Datei aufrufen und die "Seitenleiste" nach links schweben lassen. Lassen Sie dann "Inhalt" nach rechts schweben, und lassen Sie "Fußzeile" beide löschen.
das sollte funktionieren. tat für mich.
quelle
Ich habe dies beim ersten Versuch
position:absolute; bottom:0;
zum Laufen gebracht , indem ich der Div-ID im CSS hinzugefügt habe . Ich habe den übergeordneten Stil nicht hinzugefügtposition:relative;
.Es funktioniert perfekt in Firefox und IE 8, habe es noch nicht in IE 7 ausprobiert.
quelle
Eine alternative Antwort ist die umsichtige Verwendung von Tabellen und Zeilenbereichen. Wenn Sie alle Tabellenzellen in der vorhergehenden Zeile (mit Ausnahme der Hauptinhaltszelle) auf rowspan = "2" setzen, erhalten Sie immer ein Loch mit einer Zelle am unteren Rand Ihrer Haupttabellenzelle, das Sie immer mit valign = "bottom" setzen können.
Sie können auch die Höhe so einstellen, dass sie das Minimum für eine Linie ist. So erhalten Sie immer Ihre bevorzugte Textzeile am unteren Rand, unabhängig davon, wie viel Platz der Rest des Textes einnimmt.
Ich habe alle Div-Antworten ausprobiert und konnte sie nicht dazu bringen, das zu tun, was ich brauchte.
quelle
Hier ist meine Lösung:
quelle
Sie können versuchen, ein leeres Element mit einer Breite von 1 Pixel zu verwenden und es zu schweben. Löschen Sie dann das Element, das Sie tatsächlich positionieren möchten, und verwenden Sie die Höhe des leeren Elements, um zu steuern, wie weit es nach unten geht.
http://codepen.io/cssgrid/pen/KNYrey/
quelle