shokun0803
@shokun0803

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

css で attr() と var() と counter() の組み合わせ

Discussion

Closed

解決したいこと

CSS の特定の組み合わせでなぜか動かない…
動かない理由が何なのか、解決策はあるのか、誰か教えてください。

発生している問題

HTML が以下の場合の時

<label>1:</label>
<div class="bar" style="--percent: 60"></div>
<label>2:</label>
<div class="bar" style="--percent: 40"></div>
<label>3:</label>
<div class="bar" style="--percent: 20"></div>

動く

.bar::before {
    counter-reset: progress var(--percent);
    content: counter(progress);
}

HTML が以下の場合の時

<label>1:</label>
<div class="bar" start="60"></div>
<label>2:</label>
<div class="bar" start="40"></div>
<label>3:</label>
<div class="bar" start="20"></div>

これも動く

.bar::before {
    --percent: attr(start);
    content: var(--percent);
}

でも、これは動かない

.bar::before {
    --percent: attr(start);
    counter-reset: progress var(--percent);
    content: counter(progress);
}

組み合わせると途端に動かなくなる…なぜに?

0

どちらかというとこれはattr()の問題で,現状この関数は文字列型でしか用いることができません.

<label>1:</label>
<div class="bar" start="#00a"></div>
.bar::before {
  display: block;
  background-color: attr(start); /*NG*/
  content: attr(start);
  width: 320px;
  height: 1rem;
}

CSS上の型を指定してattr()を用いる方法は定義されているものの,現状メジャーブラウザではサポートされていません.

1Like

attr() で取得されるデータが文字列とのことで、数値化できないか検討したけれども、number の値はまだ対応しているブラウザがないので、 calc() で変換できないかも検討してみたが、 calc() では文字列と数値の計算は失敗することが分かったので、現時点では無理だと判断しました。
やっぱりスクリプト使うしかなさそうですね…

0Like

Your answer might help someone💌