2017-12-08 43 views
5

attr()のような動的値に基づいてカスタムプロパティを使用しようとしています。var()に動的プロパティ名を設定する方法

たとえば、以下のコードでは、現在の要素のid属性に基づいて両方のカスタムプロパティにアクセスしようとしました。

:root{ 
 
    --app-foo: 'Hello'; 
 
    --app-bar: 'World'; 
 
    } 
 
div::after{ 
 
/* expected : 
 
      'Hello' for #foo 
 
      'World' for #bar */ 
 
    content: var('--app-'attr(id)); 
 
    }
<div id="foo"></div> 
 
<div id="bar"></div>

しかし、それは明らかに失敗しました。

これを実現する方法はありますか?

+0

JSはCSSを変更できません。スタイルは変更できますが、CSSは変更できません。 – Rajesh

+0

@Rajesh * JSはCSS *を変更できません。本気ですか?これは何ですか? https://developer.mozilla.org/en-US/docs/Web/CSS/Reference#DOM-CSS_CSSOM – zer00ne

+0

Kaiido私は、ボタンのid属性を使用してcss変数の名前を完成させ、適切なcss変数を挿入してボタンの内容の:: after。 – Tygari

答えて

4

は、var()式の最初の引数が、ハードコードされた1つのカスタムプロパティ名以外のものであることを許可しません。これは、CSSを使用してvar()式で参照するカスタムプロパティを選択できないことを意味します。プロパティ名に対して文字列(または文字列を返す式attr())を受け入れないためです。 JSを使用してvar()式を含む値を設定する必要があります。

+0

実際、私は問題が本当にカスタムプロパティ'var()'式で文字列を使うことができないのではなく、 – Kaiido

+0

@Kaiido:おそらく私はこの答えを削除し、質問を明確にしないでください。多くのコードがあり、簡単な英語の説明はほとんどないので、実際にやっていることの頭や尾を作るのは難しいです。 (しかし、質問者が普通の英語で目標を表現するのが難しい場合はどうすればいいですか?) – BoltClock

+0

いいえ、私はあなたが望むものに近づいていると思います(IMKは不可能です)。最後のスニペットを見て、 ''( 'var( - app-id)' 'のように' '(' var( ' - ' attr(id)) ')'それらのバージョンは実際には無効な ''(' var( ' - app-id') ')''と同等です。 – Kaiido

関連する問題