2016-09-10 32 views
1

::after CSS擬似要素のセンタリングに問題があります。主要素が画像である:CSS CSSの疑似要素

  • 画像はページの中央
  • 画像キャプションを示す::after擬似要素であるべきで、画像の中央にオーバーレイされるべきです。ここで

私が持っているものです。

#frame { 
 
    position: fixed; 
 
    top: 50%; 
 
    left: 50%; 
 
    transform: translate(-50%, -50%); 
 
    background-color: black; 
 
    &: after { 
 
    content: 'Caption overlay'; 
 
    color: white; 
 
    top: 50%; 
 
    left: 50%; 
 
    transform: translate(-50%, -50%); 
 
    } 
 
}
<div id="frame"> 
 
    <svg width="200" height="200">...</svg> 
 
</div>

画像フレームが正しくページの中央に配置されますが、そのキャプションは、画像上の中心にされていません。代わりに右下にあります。

Codepen

答えて

4

あなたの:after擬似要素にもposition: fixed;text-align:center;とを追加することによってそれを行うことができます。

#frame { 
    position: fixed; 
    top:50%; 
    left:50%; 
    transform:translate(-50%,-50%); 
    background-color: black; 
    &:after { 
    position:fixed; 
    content: 'Caption overlay'; 
    color: white; 
    top:50%; 
    left:50%; 
    transform:translate(-50%,-50%); 
    text-align:center; 
    } 
} 
+0

ありがとうございました。それはほぼ完璧です。 divをオーバーフローさせても、キャプション全体を強制的に1行に表示する方法はありますか? – BeetleJuice

+0

はい、可能です。これを行うには、white-space:nowrapを追加します。 :after擬似要素。 –

1

あなた::after pseudo elementposition:absoluteを追加します。

&:after { 
    position:absolute; 
    width:100%; 
    text-align:center; 
    ........ 
    ........ 
    } 
+0

ありがとうございます。私はそれを試みました。キャプションは、改行のために好きなように中央に配置されません。 http://codepen.io/anon/pen/mAZrbj?editors=1100#0を参照してください。 divをオーバーフローさせたとしても、どのようにして1行に強制することができますか?そのようにすると、中央に表示されます – BeetleJuice

+0

@BeetleJuice text-align:center;これを追加。 – frnt

+0

改行は残ります – BeetleJuice

2

また、SVG独自のtext elementtext-anchorと一緒に使用することができます。

さらに、どのような方法でも、white-space: nowrapは1行にテキストを保持する必要があります。

<div id="frame"> 
    <svg width="200" height="200"> 
    <circle cx="100" cy="100" r="75" stroke="green" stroke-width="15"/> 
    <text x="100" y="100" text-anchor="middle">Caption Overlay</text> 
    </svg> 
</div> 

svg:not(:root) { 
    overflow: visible; 
} 
text { 
    fill: red; 
    white-space: nowrap; 
} 
+0

これは本当にクールです。そのままの解決策は私の最初のOPの要件を満たしていませんが、調整することができます。 +1 – BeetleJuice

+0

SVGの背景を透明にする簡単な方法はありますか? – BeetleJuice

+0

私は知っています。テキストだけでさらに多くのことを行うことができます。私は 'pseudo'要素の' content'プロパティに追加できるものには制限があると確信しています。 – AA2992

関連する問題