2017-09-07 3 views
1

Ich habe ein zentriertes div (mit absoluter Positionierung und Transformation: translate (-50%, - 50%) wie beschrieben here). Wenn der Inhalt des Child Div kurz ist, funktioniert alles gut. Wenn der Inhalt lang ist, ist die untergeordnete div-Breite auf 50% des Container-Div beschränkt (wahrscheinlich, weil left auf 50% gesetzt ist).Maximale Breite des absolut positionierten Elements

Gibt es eine Möglichkeit, die untergeordnete div nur auf die volle Breite zu erweitern, wenn der Inhalt lang ist?

.container { 
 
    position: relative; 
 
    display: inline-block; 
 
    width: 200px; 
 
    height: 200px; 
 
    margin-left: auto; 
 
    margin-right: auto; 
 
    border: 2px solid black; 
 
} 
 

 
.child { 
 
    position: absolute; 
 
    transform: translate(-50%, -50%); 
 
    left:50%; 
 
    top:50%; 
 
    background:lightgreen; 
 
}
<div class="container"> 
 
    <div class="child">short</div> 
 
</div> 
 

 
<div class="container"> 
 
    <div class="child">long long long long long long long</div> 
 
</div>

bearbeiten: Ich fand eine Erklärung, die mich um diese in this Antwort wickeln meinen Kopf geholfen.

Antwort

0

in einem zusätzlichen verschachtelten Elemente hinzufügen, ihnen mehr Kontrolle über die Dynamik ermöglichen Positionierung und Skalierung der betreffenden Elemente.

.container { 
 
    position: relative; 
 
    display: inline-block; 
 
    width: 200px; 
 
    height: 200px; 
 
    margin-left: auto; 
 
    margin-right: auto; 
 
    border: 2px solid black; 
 
    box-sizing: border-box; 
 
} 
 

 
.child { 
 
    position: absolute; 
 
    top: 50%; 
 
    left: 0; 
 
    right: 0; 
 
    text-align: center; 
 
} 
 

 
.child-inner { 
 
    background: lightgreen; 
 
    left: 0; 
 
    right: 0; 
 
    display: inline-block; 
 
}
<div class="container"> 
 
    <div class="child"><div class="child-inner">short</div></div> 
 
</div> 
 

 
<div class="container"> 
 
    <div class="child"><div class="child-inner">long long long long long long long</div></div> 
 
</div>

+0

Ihre Lösung ist nicht vertikal zentriert. – cyrix

+1

Meine Lösung sollte nicht vertikal zentriert werden, sondern nur, um die ursprüngliche Sorge von OP zu adressieren: "Max Breite des absolut positionierten Elements" - was es hat. Ich finde Ihren Downvote nicht gerechtfertigt. – UncaughtTypeError

+1

Danke für die Beschreibung Ihrer Absicht, ich habe den Downvote entfernt und das OP entscheiden lassen. – cyrix

1

Fügen Sie einfach ein display: table zum Child div hinzu, dies sollte Ihnen das gewünschte Ergebnis geben.

.container { 
 
    position: relative; 
 
    display: inline-block; 
 
    width: 200px; 
 
    height: 200px; 
 
    margin-left: auto; 
 
    margin-right: auto; 
 
    border: 2px solid black; 
 
} 
 

 
.child { 
 
    display: table; 
 
    position: relative; 
 
    transform: translate(-50%, -50%); 
 
    left: 50%; 
 
    top: 50%; 
 
    background:lightgreen; 
 
}
<div class="container"> 
 
    <div class="child">short</div> 
 
</div> 
 

 
<div class="container"> 
 
    <div class="child">long long long long long long long</div> 
 
</div>

Wenn Sie flexbox verwenden können, können Sie dies auch:

.container { 
 
    display: inline-flex; 
 
    align-items: center; 
 
    justify-content: center; 
 
    vertical-align: top; 
 

 
    width: 200px; 
 
    height: 200px; 
 
    border: 2px solid black; 
 
} 
 

 
.child { 
 
    background:lightgreen; 
 
}
<div class="container"> 
 
    <div class="child">short</div> 
 
</div> 
 
<div class="container"> 
 
    <div class="child">long long long long long long long</div> 
 
</div>

+0

Nizza. Funktioniert aber nicht unter Firefox ... – Elad

+0

Die Position wurde relativ geändert, um in Firefox zu arbeiten, aber ich weiß nicht, ob es das ist, was du willst. – cyrix

Verwandte Themen