2016-05-19 5 views
3

Hier ist die fiddle.Wie zur absoluten Position: vor dem Pseudoelement des Kindes relativ zum Elternteil?

Ich habe zwei div-Elemente.

<div class="parent"> 
    <div class="child"> 
    </div> 
</div> 

und CSS-Code für das.

.parent { 
    height: 20px; 
    width: 100px; 
    background-color: #080; 
    position: relative; 
} 

.child { 
    position: absolute; 
    width: 80px; 
    height: 200px; 
    background-color: #008; 
    right: -10px; 
    top: 30px; 
} 

.child:before { 
    border-right: 10px solid transparent; 
    border-bottom: 10px solid #008; 
    border-left: 10px solid transparent; 
    top: -10px; 
    width: 0; 
    height: 0; 
    content: ""; 
    position: absolute; 
    left: 50%; 
} 

Wie .parent ohne JS .child:before Bezug zu positionieren. Ich kenne die Lösung mit .parent:before, aber es ist nicht gut für mich.

+0

Während die '.child' div andere einen Positionswert von etwas hat als' static' dies mit CSS nicht möglich ist. Es ist nicht klar, was Sie versuchen oder warum. –

+0

@Paulie_D Ich versuche, '.child: before' relativ zu den Eltern zu zentrieren. Ohne Verwendung von "parent: before". – cassln

+0

Ja ... aber warum? Was ist los mit '.parent: before'? Wie gesagt, das ist mit CSS nicht möglich. –

Antwort

2

Ich denke, das ist, was Sie versuchen zu tun.

Ich denke, dass Sie das robuster und skalierbar finden werden.

.parent { 
 
    height: 20px; 
 
    width: 100px; 
 
    background-color: #080; 
 
    position: relative; 
 
} 
 
.child { 
 
    position: absolute; 
 
    width: 80px; 
 
    height: 200px; 
 
    background-color: #008; 
 
    left: 50%; 
 
    /* note 50% */ 
 
    top: 30px; 
 
    margin-left: -20px; 
 
    /* 2x your arrow size */ 
 
} 
 
.child:before { 
 
    position: absolute; 
 
    border-right: 10px solid transparent; 
 
    border-bottom: 10px solid #008; 
 
    border-left: 10px solid transparent; 
 
    top: -10px; 
 
    /* your border size */ 
 
    margin-left: 10px; 
 
    /* your border-size */ 
 
    width: 0; 
 
    height: 0; 
 
    content: ""; 
 
    left: 0; 
 
}
<div class="parent"> 
 
    <div class="child"> 
 
    </div> 
 
</div>

+0

Hier ist die [Geige] (https://jsfiddle.net/cassln/qdgp7dwh/3/) wie sieht aus wie was ich brauche. Aber es verwendet '.parent: before', ich brauche dasselbe mit' .child: before'. Aber vielleicht ist das nicht möglich. – cassln

+0

Aktualisiert ... es ist nur eine Frage der Anpassung der Ränder. –

+0

Wie ich in der Geschwisterantwort sage, können beide Elemente eine beliebige Breite haben. – cassln

2

Sie können ein Element absolute nur in Relation zum nächsten übergeordneten Element positionieren. In Ihrem Fall ist das .child.

Wenn .child und .child:before nicht in Ihrem Layout verwendet sind, warum setzt nicht .child:before im Elternelement, entweder als .parent:before oder als eigenes Element?

Alternativ, wenn Ihre Elemente beide feste Breiten wie in Ihrem Beispiel haben, geben Sie dem Pseudo-Element auch eine feste Pixelposition. Demonstration.

+0

Nein, beide Elemente können eine beliebige Breite haben. Ja, "Eltern: vorher" funktioniert. Aber wie Sie sehen, ist das blaue Dreieck ('.child: before') semantisch ein Teil von' .child'. – cassln

Verwandte Themen