【问题标题】:Pass variables from one mixin to another when called inside在内部调用时将变量从一个 mixin 传递到另一个 mixin
【发布时间】:2019-09-10 18:04:04
【问题描述】:

我正在开发一个 Sass 框架来练习我的技能,扩展我的知识,并拥有一些我自己构建的东西,以便在我未来的项目中使用。该框架的当前阶段是用于排版的简单模块化规模。我试图让它保持干燥,但也很灵活,所以我为字体大小和行高创建了一个单独的 mixin。但是,这些 mixin 使用基于 map-deep-get 函数的相同变量。所以我创建了第三个名为 font-vars 的 mixin 来保存所有这些变量并调用 font-size 和 line-height mixin。

它们都基于地图中的断点,因此将它们用作全局变量是没有意义的。在 font-size 和 line-height mixin 中定义变量时,一切都按预期工作,但是当保存在单独的 mixin 中时,它们不会被传递给正在调用的 font-vars。

=font-vars($element, $size: null)
  $element-exponent: map-deep-get($typography, font-sizing, $element)
  $base-fs: map-deep-get($base, sizes, $size, font-size)
  $base-lh: map-deep-get($base, sizes, $size, line-height)
  $scale: map-deep-get($base, sizes, $size, scale)
  $fs: pow($scale, $element-exponent) * 1em
  $lh: $base-fs * $base-lh / $fs

=font-size($element, $size: null)
  +font-vars($element, $size)
  @if map-deep-get($base, sizes, type-breakpoint) != false
    font-size: $fs

=line-height($element, $size: null)
  +font-vars($element, $size)
  @while $lh < 1
    $lh: $lh + $lh

  $lh: $lh * 1em

  @if map-deep-get($base, sizes, type-breakpoint) != false
    line-height: $lh

p
  +font-size(p)
  +line-height(p)

TL;DR:当在其中调用 mixin 时,我希望 font-vars 中保存的变量传递给 font-size 和 line-height,但它仅在我在每个 mixin 中定义它们时才有效。

【问题讨论】:

    标签: variables sass mixins


    【解决方案1】:

    您可以使用返回变量映射的@function 而不是mixin。例如:

    @function get-colors()
      @return (red: #ff0000, blue: #0000ff)
    
    =colors
      $colors: get-colors()
      color: map-get($colors, red)
    
    p
      +colors
    

    将返回:

    p { color: #ff0000; }
    

    因此,在您的情况下,您的 function 将是:

    @function get-font-vars($element, $size: null)
      @return (
        element-exponent: map-deep-get($typography, font-sizing, $element),
        base-fs: map-deep-get($base, sizes, $size, font-size),
        base-lh: map-deep-get($base, sizes, $size, line-height),
        scale: map-deep-get($base, sizes, $size, scale),
        fs: pow($scale, $element-exponent) * 1em,
        lh: $base-fs * $base-lh / $fs
      )
    

    然后你可以打电话给:

    $font-vars: get-font-vars($element, $size)
    

    【讨论】:

    • 这几乎奏效了,但绝对引导我朝着正确的方向前进。由于其中一些变量引用了其他变量,所以我不得不在函数中声明它们,然后返回变量的映射(元素指数:$element-exponent 等),然后使用 $font-vars 命名映射,然后使用 map-get 调用每个变量。但这绝对有助于干掉代码。谢谢你:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 2012-07-18
    • 1970-01-01
    • 2013-06-03
    • 2015-05-07
    • 1970-01-01
    相关资源
    最近更新 更多