【问题标题】:Angular 2+ - how to pass variables to SASS :before / :after pseudo selectorsAngular 2+ - 如何将变量传递给 SASS :before / :after 伪选择器
【发布时间】:2018-12-26 10:11:15
【问题描述】:

在 Angular 2+ 中,我需要将存储在组件变量中的值传递给 :before 样式之一中使用的 CSS top 属性。在这种情况下,我不能直接使用 [ngStyle],因为它不允许访问 CSS 伪选择器。我试图用它来影响这样的 CSS 变量:

HTML:

<div class="summaries-graph-box">
     <div class="summaries-graph">
          <div [ngStyle]="{'--odds-top-height': graphOddsTopHeight + 'px'}" 
               class="summary-graph-column summary-plan summary-odds">
                  <span class="summary-value">123</span>
          </div>                 
      </div>
</div>

TS:

graphOddsTopHeight = 40;

在我使用的 CSS 中:

 .summary-odds {
    --odds-top-height: 20px;
 }

  .summary-odds:before {
      min-height: 30px;
      top: var(--odds-top-height);
  }

CSS 变量正在工作,但该值仍然是 20px(最初在 CSS 中设置)而不是 40px(由组件变量提供)。

我也尝试过像这样使用 attr:

HTML:

 <div [attr.odds-top-height]="graphOddsTopHeight + 'px'" 
      class="summary-graph-column summary-plan summary-odds">
          <span class="summary-value">123</span>
 </div>                

然后在 CSS 中:

summary-odds:before {
    top: attr(odds-top-height);
}
//or
summary-odds:before {
    top: attr(data-odds-top-height);
}

但是,在这种情况下,浏览器会简单地忽略 top 属性并将其删除。

有谁知道我的代码有什么问题,或者我还能做些什么来将变量从组件传递到 CSS :before 伪选择器?

【问题讨论】:

    标签: angular variables sass css-selectors


    【解决方案1】:

    你应该使用绑定指令,像这样:

    <div class="summaries-graph-box">
         <div class="summaries-graph">
              <div [style.height.px]="getSummaryHeight(summary.Plan)" 
                   class="summary-graph-column summary-plan summary-odds">
                      <span class="summary-value">123</span>
              </div>                 
          </div>
    </div>
    

    还有你在 .ts 上的功能:

    getTheRightHeight();
    

    应该返回一个数值,例如:40。(不是40px,只是40)

    --更新
    如果您仍想访问变量或 css,您可以这样做:

    @ViewChild("myDiv") myDiv: ElementRef;
    

    然后您可以通过this.myDiv.nativeElement 访问 div 属性并访问变量
    (&lt;HTMLDivElement&gt;this.myDiv.nativeElement).style.setProperty('--YouCSSVariable', YourNewValue)
    的样式属性,就像在 Javascript 中一样

    【讨论】:

    • 嘿。感谢您提供线索,但问题不在于 getSummaryHeight(summary.Plan) 函数和 height 属性,而是如何将变量传递给:我无法使用 ngStyle 的选择器之前。 getSummaryHeight(summary.Plan) 函数与这种情况无关,它只是我的代码的一部分;) 编辑:我已经更改了属性名称以使本示例中的内容更加清晰。
    • 我给你的答案是如何根据来自 .ts 文件的值设置元素的特定值。 getSummaryHeight() 只是一个基于某种逻辑返回值并将其绑定到 css 样式的函数的示例。您不能将值发送到 scss,因为 scss 是一个预编译器,最后它编译为一个普通的 css。 @Morgoth
    • @Morgoth,我用另一种方法更新了,祝你好运
    • 谢谢,看起来很有希望。我会试一试,让你知道结果。
    猜你喜欢
    • 2012-05-31
    • 2021-09-03
    • 2023-03-13
    • 2016-06-26
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    相关资源
    最近更新 更多