suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Rufen Sie den berechneten Wert einer CSS-Variablen mithilfe eines berechnungsähnlichen Ausdrucks ab

In JavaScript können Sie getPropertyValue(property) 获取 CSS 变量的值。此函数对于检索 :root in Blöcken deklarierte Variablen verwenden, um nützlich zu sein.

:root {
    --example-var: 50px;
}

Aber das gilt auch, wenn dieser Variablenausdruck so etwas wie calc 的函数,则 getPropertyValue 调用将以文本形式返回表达式而不是计算它,即使使用 getCompulatedStyle enthält.

:root {
    --example-var: calc(100px - 5px);
}

Wie erhalte ich den berechneten Wert einer CSS-Variablen mithilfe von CSS-Funktionen wie calc?

Siehe Beispiel unten:


let div = document.getElementById('example');
console.log(window.getComputedStyle(div).getPropertyValue('--example-var'))
:root {
  --example-var: calc(100px - 5px);
}
<div id='example'></div>


P粉111627787P粉111627787436 Tage vor1071

Antworte allen(2)Ich werde antworten

  • P粉936509635

    P粉9365096352023-10-26 00:55:18

    一种奇怪的方法是添加

    
    :root {
      --example-var: calc(100px - 5px);
    }
    
    #var-calculator {
        // can be fetched through .getBoundingClientRect().width
        width: var(--example-var); 
    
        // rest of these just to make sure this element
        // does not interfere with your page design.
        opacity: 0;
        position: fixed;
        z-index: -1000;
    }
    
    
    
     <custom-element>
      <div id="var-calculator"></div>
    </custom-element>
    
    
    const width = document.getElementById('var-calculator').getBoundingClientRect().width

    我不知道这是否适用于您的用例,但我刚刚测试过它并且它有效。

    Antwort
    1
  • P粉838563523

    P粉8385635232023-10-26 00:31:35

    从技术上讲,您不能,因为计算值不是静态的,并且将取决于其他属性。在这种情况下,这很简单,因为我们正在处理像素值,但想象一下您将拥有百分比值的情况。百分比是相对于其他属性而言的,因此在与 var() 一起使用之前我们无法计算它。如果我们使用 emch 等单位,则逻辑相同

    下面是一个简单的例子来说明:

    let div = document.getElementById('example');
    console.log(window.getComputedStyle(div).getPropertyValue('--example-var'))
    console.log(window.getComputedStyle(div).getPropertyValue('font-size'))
    console.log(window.getComputedStyle(div).getPropertyValue('width'))
    console.log(window.getComputedStyle(div).getPropertyValue('background-size'));
    :root {
      --example-var: calc(100% + 5px - 10px);
    }
    #example {
      font-size:var(--example-var);
      width:var(--example-var);
      background-size:var(--example-var);
    }
    <div id='example'>some text</div>

    Antwort
    0
  • StornierenAntwort