【问题标题】:Why do my CSS variables add comment markup?为什么我的 CSS 变量会添加注释标记?
【发布时间】:2020-01-08 09:39:28
【问题描述】:

我想定义几个线性渐变并仅使用 CSS 规则应用它们: 我试过这个:

console.log(
  window
    .getComputedStyle(document.querySelector('body'))
    .getPropertyValue('--btnPrimary')
);
:root{
  --primary: #4169e1;
  --secondary :#ef3c3a;
  --grey: #585f74;
  --g-light: #b6bbc8;

  --p2s-3: #c44764;
  --s2p-3: var(--p2s-1);

  --p-btngrad-a: var(--primary);
  --p-btngrad-b: var(--p2s-3);

  --lgrad-angle: 75;
  --lgrad-stop-a: 45;
  --lgrad-stop-b: 99;

  --btnPrimary: linear-gradient(
    var(--lgrad-angle)deg,
    var(--p-btngrad-a) var(--lgrad-stop-a)%,
    var(--p-btngrad-b) var(--lgrad-stop-b)%
  );
  --btnSecondary: linear-gradient(
    var(--lgrad-angle)deg,
    var(--s-btngrad-a) var(--lgrad-stop-a)%,
    var(--s-btngrad-b) var(--lgrad-stop-b)%
  );
}

div.demo{
  height:200px;
  width:200px;
  background:var(--btnPrimary);
}

div.demo:hover{
  background:var(--btnSecondary);
}
<h1>css only linear gradient by parameters</h1>
<div class="demo">hover me</div>

但它不起作用。 控制台显示了原因:

 linear-gradient(75/**/deg, #4169e1 45/**/%, #c44764 99/**/% )

为什么 CSS 变量后跟注释标记(“/**/”)?

我该如何解决这个问题?

【问题讨论】:

  • 哪个浏览器?似乎在最新的 chrome 中给出了正确的输出

标签: css css-variables


【解决方案1】:

您需要将您的 var 与您要使用的单位相乘。(chrome 似乎不需要它)

//console.log(
//  window
//    .getComputedStyle(document.querySelector('body'))
//    .getPropertyValue('--btnPrimary')
//);
:root{
  --primary: #4169e1;
  --secondary :#ef3c3a;
  --grey: #585f74;
  --g-light: #b6bbc8;

  --p2s-3: #c44764;
  --s2p-3: var(--p2s-1);

  --p-btngrad-a: var(--primary);
  --p-btngrad-b: var(--p2s-3);

  --lgrad-angle: 75;
  --lgrad-stop-a: 45;
  --lgrad-stop-b: 99;

  --btnPrimary: linear-gradient(
    calc(var(--lgrad-angle) * 1deg),
    var(--p-btngrad-a) calc(var(--lgrad-stop-a) * 1%),
    var(--p-btngrad-b) calc(var(--lgrad-stop-b) * 1%)
  );
  --btnSecondary: linear-gradient(
    calc(var(--lgrad-angle) * 1deg),
    var(--s-btngrad-a) calc(var(--lgrad-stop-a) * 1%),
    var(--s-btngrad-b) calc(var(--lgrad-stop-b) * 1%)
  );
}

div{
  height:200px;
  width:200px;
  background:var(--btnPrimary);
}

div:hover{
  background:var(--btnSecondary);
}
<h1> css only linear gradient by parameters</h1>
<div>hover me </div>
<code>    var(--s-btngrad-a) &     var(--s-btngrad-b)</code> are missing 

【讨论】:

    【解决方案2】:

    您尚未指定变量的单位(度和百分比); and it says here that:

    请注意,var() 替换发生在 CSS 标记级别 [css-syntax-3],不在文本级别;你不能建立一个单一的 其中的一部分由变量提供的标记:

    直接在变量中给出维度,而不是之后连接它。

    //console.log(window.getComputedStyle(document.querySelector('body')).getPropertyValue('--btnPrimary'));
    :root{
      --primary: #4169e1;
      --secondary :#ef3c3a;
      --grey: #585f74;
      --g-light: #b6bbc8;
    
      --p2s-3: #c44764;
      --s2p-3: var(--p2s-1);
    
      --p-btngrad-a: var(--primary);
      --p-btngrad-b: var(--p2s-3);
    
      --lgrad-angle: 75;
      --lgrad-stop-a: 45;
      --lgrad-stop-b: 99;
    
     
        --lgrad-angle:75deg;
        --lgrad-stop-a:45%;
        --lgrad-stop-b:99%;
    
        --btnPrimary:linear-gradient(var(--lgrad-angle), var(--p-btngrad-a) var(--lgrad-stop-a), var(--p-btngrad-b) var(--lgrad-stop-b));
        --btnSecondary:linear-gradient(var(--lgrad-angle), var(--s-btngrad-a) var(--lgrad-stop-a), var(--s-btngrad-b) var(--lgrad-stop-b) );
      
    }
    
    div{
      height:200px;
      width:200px;
      background:var(--btnPrimary);
    }
    
    div:hover{
      background:var(--btnSecondary);
    }
    <h1> css only linear gradient by parameters</h1>
    <div>hover me</div>

    【讨论】:

    • 您的解决方案非常完美,我将使用 G-Cyr 的解决方案:
    猜你喜欢
    • 2018-07-27
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    相关资源
    最近更新 更多