如果字符串包含或以结尾,SASS中有什么方法可以做到?
我需要sass中的if语句,如so:如果字符串包含或以结尾,SASS中有什么方法可以做到?,sass,Sass,我需要sass中的if语句,如so: @each $name, $char in $font-icons { @if ($name ends with "-outline") { //do something } } 有什么方法可以做到这一点吗?不完全是您想要的,但我认为它与Sass尽可能接近 使用str索引($string,$substring)可以发现$name是否包含-outline: @每个$name,$char字体图标{ @if(str索引($name
@each $name, $char in $font-icons {
@if ($name ends with "-outline") {
//do something
}
}
有什么方法可以做到这一点吗?不完全是您想要的,但我认为它与Sass尽可能接近 使用
str索引($string,$substring)
可以发现$name
是否包含-outline
:
@每个$name,$char字体图标{
@if(str索引($name,'-outline')){
//做点什么
}
}
编辑:刚刚编写了一个快速Sass函数,以实际查明字符串是否以另一个字符串结尾:
@函数以($string,$find)结尾{
@如果(str索引($string,$find)==(str长度($string)-str长度($find)+1)){
@返回true;
}@else{
@返回false;
}
}
@每个$name,$char的$font图标{
@if(以($name,'-outline')结尾){
//做点什么
}
}
更新#2:如果$string
多次包含$find
,上述函数将返回false。如果$string
以$find
结尾,则此函数将返回true:
@函数以($string,$find)结尾{
@if(str slice($string,(str length($string)-str length($find)+1))==$find){
@返回true;
}@else{
@返回false;
}
}
更新#3:简化:
@函数以($string,$find)结尾{
@返回str切片($string,(str长度($string)-str长度($find)+1))=$find;
}
请尝试以下内容:
这是为了达到以下目的:
或
注意,海蛞蝓与我们的@不匹配。如果,硬编码的“4”是我们的搜索条件(-slug)-1的长度
您可以在测试您的sass,因为我只是在搜索它,我将添加以下选项:index($list,$value)
返回一个int
(基于1的索引)或null
表示它可以在布尔上下文中使用
下面是一个很好的用例:
@mixin flexbox($args:'') {
@if index($args, 'inline') {
display: inline-flex;
} @else {
display: flex;
}
@if index($args, 'bar') == null {
/* style if 'bar' ISN'T passed */
}
}
.foo {
@include flexbox(inline);
}
您可以创建令人愉快的复杂的mixin和for循环,使用单个字符串的空格连接关键字代替映射。(想想浏览器如何处理背景:红色url(image.png)无重复中心;
)使用此SCSS代码:
@function str-ends-with($string, $find) {
@return str-length($string) >= str-length($find) AND str-slice($string, (str-length($string) - str-length($find) + 1)) == $find;
}
这是做这件事的唯一方法
@if (str-index($name, "-outline")!=null) {
#{$name}{
background-color:$char;
}
//do something
}
}
str index($name,“-outline”)
返回$string($name
)中$substring(-outline
)的第一个索引,如果$name
不包含-outlineUPDATE,如果$string的长度,则null
。我添加了一个解决此错误的答案。
@mixin flexbox($args:'') {
@if index($args, 'inline') {
display: inline-flex;
} @else {
display: flex;
}
@if index($args, 'bar') == null {
/* style if 'bar' ISN'T passed */
}
}
.foo {
@include flexbox(inline);
}
@function str-ends-with($string, $find) {
@return str-length($string) >= str-length($find) AND str-slice($string, (str-length($string) - str-length($find) + 1)) == $find;
}
@if (str-index($name, "-outline")!=null) {
#{$name}{
background-color:$char;
}
//do something
}
}