动态:最后一个孩子在SASS

问题描述:

我一直在搞SASS一段时间,并做了一些很好的功能,使@if @else如果等等。但是我有以下两段代码在Mixin :动态:最后一个孩子在SASS

&:last-child { float: right; margin-right: 0; } 
&:only-child { float: left; margin-right: 0; } 

这显然将这两段代码应用到我包含此特定Mixin的每个元素上。有没有一种方法来动态检查一个元素是否是:last-child /:only:具有@if语句的子元素或其他方法?

喜欢的东西:

@if :last-child == True { float: right; margin-right:0; } 

希望我已经解释得很清楚。

谢谢

+0

只存在':last-child'独自一人将帮助你测试一个元素是否是最后一个孩子。 – BoltClock

+0

@BoltClock是的,但它重复我包含Mixin的每个元素的代码。如果它是唯一的孩子,我希望它做这个功能,如果它是最后一个孩子,我希望它做一个不同的功能,而不是检查两者。 –

Sass对您的文档一无所知。它不能检查元素是第一个孩子还是独生子。 Sass只能用于生成有效的CSS。

如果你正在寻找的最后一个孩子是不是独生子女,这是你的选择:

&:last-child:not(:only-child) { 
    // styles 
} 

http://tinker.io/1717b

如果你想关闭一个或输出另一个(因为你已经知道在这种情况下只有其中一个适用),那么你需要一个额外的参数传递给你的mixin:

@mixin foo($children: true) { 
    @if $children or $children == last-child { 
    &:last-child { 
     // styles 
    } 
    } 
    @if $children or $children == only-child { 
    &:only-child { 
     // styles 
    } 
    } 
} 
+0

啊,这很糟糕,猜测我正在尝试用SASS进行大量编程?我看起来唯一的选择是将我的:最后孩子规则添加到Mixin中,人们必须将它们自己包含在最后一个子元素中? –

+0

是的,那是我会推荐的。可以使用(或不使用)在一起的多个较小的混合比比较好的混合具有很长的参数。 – cimmanon

+0

唯一的其他解决方案是使用一致的类名,但我的系统的一个特点是,用户可以拥有任意/语义类名。有没有什么方法可以使用其他语言和/或使用数据库来实现动态解决方案? –