Die Breite des absoluten Positionselementes wird abgeschnitten, wenn es sich über den rechten Rand des relativen übergeordneten Elements hinaus erstreckt

8

Diese position: absolute; divs, die in / um ein position: relative; parent platziert sind, erhalten Höhe / Breite von der Größe und Länge des enthaltenen Textes.

Wenn jedoch einer von ihnen über den rechten Rand des relativen übergeordneten Elements hinausgeht, scheint seine Breite abgeschnitten zu sein.

Wie kann ich das div, das sich über die rechte Seite des relativen Elternteils hinaus verhält, wie die anderen verwenden, die nicht nur CSS verwenden? (Sollte in allen gängigen Browsern funktionieren, einschließlich Edge, aber nicht IE)

Hier ist eine Geige , aber ich werde auch den Code + Screenshot unten kopieren:

HTML:

%Vor%

... und die Stile. Beachten Sie, dass die absolute div-Breite vor dem Wickeln maximal 200 Pixel erreichen soll. Andernfalls sollte die Breite durch die Länge des enthaltenen Textes bestimmt werden:

%Vor%

Dieses Problem trat beim Implementieren eines Tooltips auf, der sich, wenn er von einem Entwickler verwendet wird, selbst als WRT positionieren muss. offsetParent (oder der Hauptteil, wenn in seinem DOM-Zweig kein vorangestelltes offsetParent existiert).

Bearbeiten: Wie kann ich das gewünschte Verhalten nur mit CSS erreichen?

Die Lösung muss in allen gängigen Browsern funktionieren, einschließlich Edge, aber nicht IE. Und um es noch einmal zu wiederholen, die width der absoluten divs 'können nicht vorhergesagt werden, da sie durch die Länge der Texte bestimmt werden sollte ... die einzige Ausnahme ist, dass es ein max-width geben wird (in diesem Beispiel ist es das) 200px).

    
Manningham 01.02.2017, 05:49
quelle

1 Antwort

5

Für das #absolute-problem div wird links ein bestimmter Wert, ein auto width und ein auto right festgelegt. Laut dieser Regel in §10.3.7 der Spezifikation , dies würde die Breite der div verkleinern, um ihren Inhalt anzupassen.

  

'Breite' und 'rechts' sind 'automatisch' und 'links' ist nicht 'automatisch', dann wird die Breite verkleinert. Dann löse nach "rechts".

Obwohl es keine zuverlässige Möglichkeit gibt, das genaue gewünschte Verhalten zu erreichen (da für die Berechnung der Breite nicht genügend Eigenschaften definiert sind), gibt es einige Möglichkeiten, dieses Problem zu umgehen.

Setze width für das absolute div

Eine triviale Lösung wäre, seine Breite so einzustellen, dass sie nicht schrumpft .

%Vor%

%Vor% %Vor%

Setze right für das absolute div

Es ist die Breite deines Divs unbekannt, eine Möglichkeit, das zu umgehen, ist es, auch right zu setzen. Dies passt die Breite deines Divs entsprechend an.

%Vor%

%Vor% %Vor%

Setzen Sie width auf fit-content / max-content

Ein anderer Weg wäre die Verwendung von fit-content oder max-content ( begrenzt Browserkompatibilität ) für das absolute div, anstatt dessen right einzustellen. Dies hilft, wenn der Inhalt Ihres div nicht unbedingt bis zur maximalen Breite reicht.

%Vor%

%Vor% %Vor%

Set min-width und max-width

Ein realistischer Ansatz wäre es, die Größe innerhalb eines gegebenen Bereichs anzupassen, um den Überlauf in Schach zu halten.

%Vor%

%Vor% %Vor%
    
John Bupit 01.02.2017 06:16
quelle

Tags und Links