在内部调用时,将变量从一个mixin传递到另一个

问题描述 投票:0回答:1

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

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

=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:我希望font-vars中保存的变量在调用mixin时传递给font-size和line-height,但只有在我在每个mixin中定义它们时它才有效。

variables sass mixins
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.