我是Sass的新手,并希望使用'if'语句来检测元素上的现有类,以便生成相关的css。
我的设置包含大量Javascript生成的图像,这些图像被分配了一个唯一的ID,以及一组“图片”和一个随机分配的顶级,右侧,底部或左侧的类。
我也在使用Sass的随机函数(在这里找到:https://gist.github.com/chriseppstein/1561650),并希望为每个ID分配不同的值,以便每个元素随机定位。
我的SCSS具有以下功能,可根据分配的类别定位图像:
@for $i from 0 through $number-of-pictures {
#picture-#{$i}{
&.top {
left: random($stage-width);
}
&.right {
top: random($stage-height);
}
&.bottom {
left: random($stage-width);
}
&.left {
top: random($stage-height);
}
}
}
这很有效,但会产生大量未使用的声明块。例如,#picture-38被赋予类“.top”,所以我需要的是第一个声明块,但CSS导出所有选项:
#picture-38.top {
left: 38px; //This is a random number that is different for each ID.
}
#picture-38.right {
top: 28px;
}
#picture-38.bottom {
left: 12px;
}
#picture-38.left {
top: 47px;
}
我需要的是一个if语句,它在解析css之前检测元素是否有类。类似的东西:
@if "#picture-#{$i} has class $class-top" {
&.top {
left: random($stage-width);
}
}
有什么想法吗?
答案 0 :(得分:5)
答案是你不能用SASS / SCSS做到这一点。
您正在尝试检测DOM元素的拥有/分配。
与DOM元素交互的方式是JavaScript
您需要做的是使用JavaScript来检测“picture-x#”是否具有“class-top”类,然后相应地设置一个随机top
值。
E.g。
var picture = document.GetElementById('picture-1');
var pic_class = picture.className
if(pic_class.indexOf('class-top') != -1)
{
/*Returns a random number between 1 and 100*/
picture.style.top = Math.floor((Math.random()*100)+1) + 'px';
}
旁注:top
需要一个度量单位(例如px
),因此+ 'px'
答案 1 :(得分:0)
现在有点旧,但我最近做过类似的事情 - 在这里我使用一个数组循环遍历不同类别的按钮并相应地添加样式。 请注意,代码段中有未声明的变量。
$buttonSizes: large-buttons, medium-buttons, small-buttons;
@each $buttonSizesItem in $buttonSizes {
%#{nth($buttonSizesItem, 1)}{
@if (nth($buttonSizesItem, 1))== large-buttons{
@include font-size(2);
@include rounded(6);
padding: 8px 15px;
}
@if (nth($buttonSizesItem, 1))== medium-buttons{
@include font-size(1.8);
@include rounded(5);
padding: 4px 12px;
&.button-loading {
&:before{
top: 2px;
}
}
}
@if (nth($buttonSizesItem, 1)) == small-buttons{
@include font-size(1.6);
@include rounded(4);
padding: 4px 10px;
&.button-loading {
&:before{
top: 0;
}
}
}
}
}
答案 2 :(得分:0)
听起来像您想要的东西,它可以找出哪些代码路径在您的CSS中不使用并相应地缩小。不知道是否存在类似的东西,因为它必须假设您以后不会使用JS动态分配这样的路径,这并不是一个安全的假设(即使它试图解析JS来这样做,总是可以根据用户输入分配一个类...),因此对于某些插件,例如gulp / grunt / etc,它必须是默认关闭的可配置选项。
在您的特定情况下,您确实有一些选择,但是它们超出了sass / scss的范围。基本上,如果要在服务器端使用定位类生成这些图像,则可以在同一时间构造相同的代码,然后再由sass导入匹配文件。包含所有可能类的“主”文件不会被处理,而仅被该其他文件用作参考。
如果您正在客户端进行操作,那么您的建议就没有意义。您可以使用javascript动态注入CSS规则,但是您只是将所有规则发送到JS中添加到那里,而不是仅仅将它们包含在CSS中,所以这有什么意义呢?为了避免这种情况,您必须根据需要将它们从服务器导入,这是一个可怕/荒谬的想法。
不过,我要说的是,这听起来像是过度优化。有一些额外的CSS规则有什么问题?您是否真的要节省一些字节?将所有内容都扔到CSS文件中,除非您有充分的理由,否则不必担心。