使用sass/less的CSS'lookbehind'

dan*_*nym 2 css sass css3 less modernizr

我目前正在使用sass来帮助构建我的CSS.下面给出了一个小问题.

.container {
    .list {
        .selected {
            background-image : url('highlighted.png');
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我也在使用modernizr(http://modernizr.com/docs/)并希望在可能的情况下使用CSS3.在这个例子中,我想测试可用性border-radius,border-radius而不是使用背景图像.因此,我需要检查元素borderradius上是否存在类html.是否有可能使用某种背后的外观来实现这一目标?或者我必须再次使用.borderradius该类重复代码,最终结果如下:

.container {
    .list {
        .selected {
            background-image : url('highlighted.png');
        }
    }
}

.borderradius .container {
    .list {
        .selected {
            background : yellow;
            border-radius : 10px;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

对我来说,这看起来很麻烦,很难在大型项目中维护.有没有人有更优雅的方法来实现这一目标?

Che*_*Pez 12

您可以使用和号(&)引用父选择器,如下所示:

.container {
    .list {
        .selected {
            background-image : url('highlighted.png');
            .borderradius & {
                background : yellow;
                border-radius : 10px;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个将编译为:

.container .list .selected { 
    background-image : url('highlighted.png');
}

.borderradius .container .list .selected {
    background : yellow;
    border-radius : 10px;
}
Run Code Online (Sandbox Code Playgroud)

看看这篇文章,或这一个有关如何有用这可能是一个更深入的解释:

...你可以在选择器声明的末尾放置一个尾随&符号(&)来代替重复选择器,然后坐下来欣赏Sass的精彩内容

  • '&'告诉SASS将整个父选择器拉到你放置的任何地方.所以,在这个例子中它变成'.container .list .selected' (2认同)