如何通过Sass中的嵌套将其他信息添加到属性选择器?

亚当·JB

我正在尝试避免“ class'itis”,并利用SASS嵌套来实现以下CSS输出:

a[class^="utility-button"], a[class*=" utility-button"] { //some shared css rules}
.utility-button-one {//some unique css rules}
.utility-button-two {//some unique css rules}

这就是我想要做的(我目前正在尝试的):

a[class^="utility-button"], a[class*=" utility-button"] {
    //some shared css rules

    &-one {
        //some unique css rules
    }
    &-two {
        //some unique css rules
    }
}

现在我知道,如果将其编译,从技术上将输出的内容是:

a[class^="utility-button"], a[class*=" utility-button"] { //some shared css rules}
a[class^="utility-button"]-one {//some unique css rules}
a[class^="utility-button"]-two {//some unique css rules}
a[class*=" utility-button"]-one {//some unique css rules}
a[class*=" utility-button"]-two {//some unique css rules}

这显然是行不通的。

有没有办法解决这个问题-不必在<a>我希望根据第二个类继承实用程序按钮样式的每个标签上添加两个类,真是太棒了。

西曼侬

父选择器不能以这种方式使用,它仅包含对前一个选择器的引用。Sass无法将属性选择器的内容作为目标(至少,不在当前可用的任何字符串操作功能之外)。

最好的办法是编写自定义函数或使用具有内容感知能力的mixin来为您做变量的肮脏工作。这是一个mixin版本的样子(假设您想继续使用嵌套):

@mixin my-sel($append: false) {
    $class: if($append, selector-append(&, $append), &);
    @at-root a[class^="#{$class}"], a[class*=" #{$class}"] {
        @content;
    }
}


utility-button {
    @include my-sel {
        /* some shared css rules */
    }

    @include my-sel(-one) {
        /* some unique css rules */
    }
    @include my-sel(-two) {
        /* some unique css rules */
    }
}

输出:

a[class^="utility-button"], a[class*=" utility-button"] {
  /* some shared css rules */
}
a[class^="utility-button-one"], a[class*=" utility-button-one"] {
  /* some unique css rules */
}
a[class^="utility-button-two"], a[class*=" utility-button-two"] {
  /* some unique css rules */
}

如果您需要将其嵌套到其他选择器中,那么它将变得更加复杂:

@function class-to-attribute-selector($class) {
    // the following line is completely optional, but you definitely need the @return
    $class: if(str-index($class, '.') == 1, str-slice($class, 2), $class);
    @return #{'[class^="#{$class}"]'}, #{'[class*=" #{$class}"]'};
}

@mixin class-sel {
    $sel-list: &;

    $new-sel: ();
    @each $sel in $sel-list {
        @if length($sel) > 1 {
            $s: ();
            @for $i from 1 to length($sel) {
                $s: append($s, nth($sel, $i));
            }
            $class: nth($sel, length($sel));
            $new-sel: append($new-sel, selector-nest($s, class-to-attribute-selector($class)));
        } @else {
            $new-sel: join($new-sel, class-to-attribute-selector(nth($sel, 1)));
        }
    }

    @at-root #{$new-sel} {
        @content;
    }
}

.foo {
    .utility-button {
        @include class-sel {
            /* some shared css rules */
        }

        &-one {
            @include class-sel {
                /* some unique css rules */
            }
        }
        &-two {
            @include class-sel {
                /* some unique css rules */
            }
        }
    }
}

.bar {
    @include class-sel {
        /* other rules */
    }
}

输出:

.foo [class^="utility-button"], .foo [class*=" utility-button"] {
  /* some shared css rules */
}
.foo [class^="utility-button-one"], .foo [class*=" utility-button-one"] {
  /* some unique css rules */
}
.foo [class^="utility-button-two"], .foo [class*=" utility-button-two"] {
  /* some unique css rules */
}

[class^="bar"], [class*=" bar"] {
  /* other rules */
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将其他信息添加到自定义PSObject属性

来自分类Dev

将其他信息添加到“ visNetwork”

来自分类Dev

我可以将选择器添加到其他类吗?

来自分类Dev

我可以将选择器添加到其他类吗?

来自分类Dev

通过命令行将其他父属性添加到JSON

来自分类Dev

如何将其他信息添加到firebase.auth()

来自分类Dev

如何将其他信息添加到Excel图形

来自分类Dev

遍历数组并将其他信息添加到PHP中的项

来自分类Dev

UpdateExpression:将其他属性的值添加到列表

来自分类Dev

将linq属性选择器添加到Expression

来自分类Dev

如何将其他值添加到DateEntry?

来自分类Dev

为什么来自服务器(PHP)的回显将其他xml信息添加到respose?

来自分类Dev

如何添加到选择器项的链接?

来自分类Dev

如何将其他参数添加到我的Ajax回调中?

来自分类Dev

在JSSOR中,如何将其他幻灯片添加到全宽滑块?

来自分类Dev

如何将其他代理添加到中层DC / OS集群中?

来自分类Dev

在JSSOR中,如何将其他幻灯片添加到全宽滑块?

来自分类Dev

如何将其他参数添加到我的Ajax回调中?

来自分类Dev

如何将其他文件添加到临时Roslyn工作区以将其显示给分析器

来自分类Dev

如何将日期选择器添加到 Django ModelFrom 中?

来自分类Dev

SASS / SCSS中的嵌套选择器

来自分类Dev

如何在sass / scss中的嵌套选择器中间插入父选择器

来自分类Dev

Rails 3,将其他选择添加到集合选择时区

来自分类Dev

SASS正确的函数语法,它将选择器添加到元素

来自分类Dev

将其他字段添加到设备邀请控制器中的允许字段列表中

来自分类Dev

如何将其他编解码器添加到对话框窗口?

来自分类Dev

如何在聚合后不将其他列包括在GROUP BY中的情况下将其他列添加到SELECT查询中?

来自分类Dev

如何从数据框中创建多个其他列并将其添加到同一数据框中

来自分类Dev

如何在休眠JPA中以多对多关系将其他列添加到joinTable中?

Related 相关文章

  1. 1

    如何将其他信息添加到自定义PSObject属性

  2. 2

    将其他信息添加到“ visNetwork”

  3. 3

    我可以将选择器添加到其他类吗?

  4. 4

    我可以将选择器添加到其他类吗?

  5. 5

    通过命令行将其他父属性添加到JSON

  6. 6

    如何将其他信息添加到firebase.auth()

  7. 7

    如何将其他信息添加到Excel图形

  8. 8

    遍历数组并将其他信息添加到PHP中的项

  9. 9

    UpdateExpression:将其他属性的值添加到列表

  10. 10

    将linq属性选择器添加到Expression

  11. 11

    如何将其他值添加到DateEntry?

  12. 12

    为什么来自服务器(PHP)的回显将其他xml信息添加到respose?

  13. 13

    如何添加到选择器项的链接?

  14. 14

    如何将其他参数添加到我的Ajax回调中?

  15. 15

    在JSSOR中,如何将其他幻灯片添加到全宽滑块?

  16. 16

    如何将其他代理添加到中层DC / OS集群中?

  17. 17

    在JSSOR中,如何将其他幻灯片添加到全宽滑块?

  18. 18

    如何将其他参数添加到我的Ajax回调中?

  19. 19

    如何将其他文件添加到临时Roslyn工作区以将其显示给分析器

  20. 20

    如何将日期选择器添加到 Django ModelFrom 中?

  21. 21

    SASS / SCSS中的嵌套选择器

  22. 22

    如何在sass / scss中的嵌套选择器中间插入父选择器

  23. 23

    Rails 3,将其他选择添加到集合选择时区

  24. 24

    SASS正确的函数语法,它将选择器添加到元素

  25. 25

    将其他字段添加到设备邀请控制器中的允许字段列表中

  26. 26

    如何将其他编解码器添加到对话框窗口?

  27. 27

    如何在聚合后不将其他列包括在GROUP BY中的情况下将其他列添加到SELECT查询中?

  28. 28

    如何从数据框中创建多个其他列并将其添加到同一数据框中

  29. 29

    如何在休眠JPA中以多对多关系将其他列添加到joinTable中?

热门标签

归档