我下面有scss,它会生成如下图所示的UI。但是,正如您所看到的,很多代码都是魔术数字,我反复尝试使用sass函数来提出函数来获取css规则值。
但是我意识到使用SCSS函数只能完成简单的数字计算,而返回复杂的规则值可能会很困难。我想知道是否有任何可能获得期望结果的方法
// Current Code
$light: white;
$dark: gray;
div {
height: 400px;
width: 100px;
background: linear-gradient(to bottom,
$light, $light 90px,
$dark 90px, $dark 102px,
$light 102px, $light 105px,
$dark 105px, $dark 117px,
$light 117px, $light 120px,
$dark 120px, $dark 132px,
$light 132px, $light 135px,
$light 100%
)
}
// What I am trying to achieve
@function get-line-skeleton($height-of-bar, $verticle-spacing, $start-at)
{
// code to return value of rule with series of auto generated gradient
}
$light: white;
$dark: gray;
div {
height: 400px;
width: 100px;
background: @get-line-skeleton(12, 3, 90)
}
答案 0 :(得分:0)
是的,您可以创建一个混合生成条纹。 Sassmeister demo。
@mixin linear-gradient($stripe-size, $stripe-color, $gutter-size, $gutter-color, $count) {
$stripes: null; // it's like array
@for $i from 1 through $count {
$start-position: ($stripe-size + $gutter-size) * ($i - 1);
$end-posotion: $start-position + $stripe-size;
$stripe: $stripe-color $start-position, $stripe-color $end-posotion;
$stripes: append($stripes, $stripe, comma); // `push` gradient step to `array`
@if ($i != $count) {
// don't apply gutter after last stripe
$gutter: $gutter-color $end-posotion, $gutter-color $end-posotion + $gutter-size;
$stripes: append($stripes, $gutter, comma);
}
}
background: linear-gradient(to bottom, $stripes);
}
div {
@include linear-gradient(10px, red, 5px, green, 3);
}
有趣的是:@mixins,无礼的lists,@for loops,@if rules。
此mixin生成以下代码:
div {
height: 40px; /* not from mixin */
background: linear-gradient(to bottom, red 0px, red 10px, green 10px, green 15px, red 15px, red 25px, green 25px, green 30px, red 30px, red 40px);
}
<div></div>