简体   繁体   English

Sass 变量嵌套样式

[英]Sass variables nested styling

I try to optimize my styling which does have repeated styles mostly我尝试优化我的样式,它确实重复了 styles

i have like this我有这样的

.ds-input.ds--valid .ds-input__control:not(#specificity-issue),
.ds-select.ds--valid .ds-select__control:not(#specificity-issue) {
  border-color: var(--my-color);

  &:focus {
    border-color: var(--my-border-color);
  }
}

what i tried to make variables but nested variables gives wrong result我试图制作变量但嵌套变量给出了错误的结果

$dsSelectors: "ds-select, ds-input";

.#{$dsSelectors}.ds--valid.#{$dsSelectors}__control:not(#specificity-issue),
 {
        border-color: var(--my-color);
    
      &:focus {
        border-color: var(--my-border-color);
      }
}

do we have any easy and short syntax to fix this我们有任何简单而简短的语法来解决这个问题吗

at the end, expected css will look like this最后,预计 css 将如下所示

.ds-select.ds--valid .ds-select__control:not(#specificity-issue), .ds-input.ds--valid .ds-input__control:not(#specificity-issue) {
    border-color: var(--my-border-color);
}
.ds-select.ds--valid .ds-select__control:not(#specificity-issue):focus, .ds-input.ds--valid .ds-input__control:not(#specificity-issue):focus {
    border-color: var(--my-color);
}

@each can use for this purpose. @each可以用于此目的。 More information and examples: https://sass-lang.com/documentation/at-rules/control/each更多信息和示例: https://sass-lang.com/documentation/at-rules/control/each

The @each rule makes it easy to emit styles or evaluate code for each element of a list or each pair in a map. @each 规则可以很容易地发出 styles 或评估列表的每个元素或 map 中的每一对的代码。 It's great for repetitive styles that only have a few variations between them.它非常适合重复的 styles,它们之间只有一些变化。 It's usually written通常是这样写的

$classes: ds-select, ds-input;

@each $class in $classes {
    .#{$class}.ds--valid .#{$class}__control:not(#specificity-issue)
    {
        border-color: var(--my-color);
        
        &:focus {
            border-color: var(--my-border-color);
        }
    }
}

I make this function but result is bit different:我做了这个 function 但结果有点不同:

$classes: select, input;

@each $class in $classes {
    .ds {
         &#{-$class}&--valid &#{-$class} {
            &__control {
                &:not(#specificity-issue) {
                    border-color: var(--my-color);
                    
                    &:focus {
                        border-color: var(--my-border-color);
                    }
                }
            }
        }
    }
}

And result:结果:

.ds-select.ds--valid .ds-select__control:not(#specificity-issue) {
     border-color: var(--my-color);
}
.ds-select.ds--valid .ds-select__control:not(#specificity-issue):focus {
     border-color: var(--my-border-color);
}
.ds-input.ds--valid .ds-input__control:not(#specificity-issue) {
     border-color: var(--my-color);
}
.ds-input.ds--valid .ds-input__control:not(#specificity-issue):focus {
     border-color: var(--my-border-color);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM