2017-07-17 26 views
1

vueのスタイルバインディングを使用してツールチップを作成したいと思います。私はattr()機能をCSSから使用することを考えています。これは反応性のあるオブジェクトである属性値を取りますdynamicColor。私が今持っているコードは:vueのスタイルバインディングを持つ矢印のツールチップ

<div class="test"> 
    <span class="marker" :style="{'background': dynamicColor}" :color="dynamicColor"> 
     smallText 
    </span> 
</div> 

<style> 
div.test span.marker { 
    position: absolute; 
    width: 28px; 
    height: 15px; 
    border-radius: 2px; 
    display: block; 
    top: -25px; 
    font-size: 10px; 
    text-align: center; 
} 

div.test span.marker::after { 
    content: ""; 
    position: absolute; 
    top: 100%; 
    left: 50%; 
    margin-left: -5px; 
    border-width: 6px; 
    border-style: solid; 
    border-color: attr(color) transparent transparent transparent; 
} 
</style> 

しかし、それは動作しません。私は何らかの理由でブートストラップを使いたくない。私はvueスタイルのバインディングで擬似セレクタを見つけることができますが、多く見つけることができませんでしたかどうかを見てみました。どのようにこれを達成するための任意のアイデア?ありがとう。

+1

ボーダーカラーで苦労しているのであれば、その部分をインライン化しないのはなぜですか?あなたは 'border-color'を' border-top-color'で分割することもできます。 –

+0

@ Stephan-v:あなたの提案通りに努力しました。しかし、どういうわけかattr()はうまくいきませんでした。私は 'border-color'行を' border-top-color:attr(color) 'に置き換えましたが動作しません。私は 'dynamicColor'が存在することを確認しました。 – Rohanil

+1

私の意図は正確ではありませんが、正しく実装されていても私の提案はうまくいかないことがわかりました。私は、擬似セレクタに色を付ける唯一の方法は、この場合にクラスを使用することです、あるいは、擬似セレクタを取り除いて要素を単純に作成する必要があります。 –

答えて

1

@ Stephan-vがコメントで示唆したように、私は矢印のために別の要素を追加しました。最終的なコードは次のようになります。

<div class="test"> 
    <span class="markertip" :style="{'border-color': dynamicColor + ' transparent transparent transparent'}"></span> 
    <span class="marker" :style="{'background': dynamicColor}"> 
     smallText 
    </span> 
</div> 

<style> 
div.test span.marker { 
    position: absolute; 
    width: 28px; 
    height: 15px; 
    border-radius: 2px; 
    display: block; 
    top: -25px; 
    font-size: 10px; 
    text-align: center; 
} 

div.test span.markertip { 
    content: ""; 
    position: absolute; 
    top: -45%; 
    margin-left: -5px; 
    border-width: 6px; 
    border-style: solid; 
} 
</style> 
関連する問題