我正在研究一个Sass框架,以练习我的技能,扩展我的知识以及使自己有所建树的东西可用于以后的项目中。框架的当前阶段是排版的简单模块化比例尺。我试图使其保持干燥,但也要灵活,因此我为字体大小和行高创建了一个单独的mixin。但是,这些混入基于map-deep-get函数使用相同的变量。因此,我创建了第三个混合字体,称为font-vars,以容纳所有这些变量并调用font-size和line-height混合像素。
它们都是基于映射中的断点的,因此将它们用作全局变量是没有意义的。在font-size和line-height混合中定义变量时,一切都按预期工作,但是在单独的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中定义它们时,它才起作用。
答案 0 :(得分: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)