我对以下代码片段有问题: https://codepen.io/Vreesie/pen/yLxmYrQ

This code snippet shows you the following pattern: enter image description here

这些点被放置在环形图案中.但是,在SCSS文件中,我已经硬编码了 node 的数量将是6:

.cluster {
  $count: 6;
  @include on-circle($item-count: $count, $circle-size: 300px, $item-size: 100px);
   
  .node {
    display: block;
    position: absolute;
    top:  50%; 
    left: 50%;
    width:  100px;
    height: 100px;
    border-radius: 50%;
    background-color: #1F1F1F;
    border: #137FE3 3px solid;
  }
}

我真正想要的是使用 Select 器动态确定 node 的数量.因此,当我删除/添加 node 时,模式将根据 node 的数量进行调整.我真的找不到任何关于在变量中存储项目数的内容.我试过这样的东西:

$count: 0;
@for $i from 1 through 10 {
  .node:has(.node:nth-child(#{$i})) {
    $count: $count + 1;
  }
}

在这里,我的 idea 是循环10次(最大 node 数).如果 node 确实存在,则添加计数器,但这总是返回10,而不是我的例子中的6.我如何才能让它在SCSS中工作,这样我只需要修改我的HTML?

推荐答案

以您所描述的方式存储动态变量在CSS中不起作用.

相反,对于另一种解决方案,this answer描述了如何将具有特定数量子项的元素的子项作为目标.从本质上讲:

div:first-child:nth-last-child(#{$item-count}),
div:first-child:nth-last-child(#{$item-count}) ~ div {
    /* ... */;
}

将以恰好包含$item-count个子元素的元素的直接子元素的所有div为目标.

这可以适用于你的情况.然后,您可以为 node 计数的每个排列生成最大值的规则.每条规则将包含特定于 node 数的略微不同的Angular ,从而允许创建与所显示的 node 数完全对应的变换:

.node {
    $maximum: 20;
    $circle-size: 300px;
    $item-size: 100px;
    
    display: block;
    position: absolute;
    top:  50%; 
    left: 50%;
    width:  $item-size;
    height: $item-size;
    border-radius: 50%;
    background-color: #1F1F1F;
    border: #137FE3 3px solid;
    margin: -($item-size / 2);
    
    @for $item-count from 1 through $maximum {
        $angle: (360 /  $item-count);
        $rot: 0;
        
        &:first-child:nth-last-child(#{$item-count}),
        &:first-child:nth-last-child(#{$item-count}) ~ div {
            @for $i from 1 through $item-count {
                &:nth-of-type(#{$i}) {
                    transform: 
                        rotate($rot * 1deg) 
                        translate($circle-size / 2) 
                        rotate($rot * -1deg);
                }
                $rot: $rot + $angle;
            }
        }
    }
}

在HTML中添加或删除 node (最多20个)将导致自动重新计算旋转,以便 node 保持在一个圆圈中.

Here is a codepen个在Sass中实现这一点的人.

Css相关问答推荐

如何获得特定位置的Divs以根据浏览器宽度正确调整大小

如何允许在bslb中 Select 输入重叠卡片?

NextJs - Tailwind css类样式未应用于响应屏幕

如何以Angular 调整下拉控件的高度

在主零部件悬停上对子零部件设置Angular 样式

向左或向右浮动时的不同图像边距

使用最小高度和边框使阴影DOM中的元素达到自定义元素高度的100%,如果溢出,还可以zoom 父元素

排除特定元素的目标元素

为什么所有选项卡都没有显示在 React 的 MUI 选项卡组件中?

如何按列垂直对齐项目,但不在列内水平对齐

使 MUI 自动完成打断长词以适合布局

CSS 字符串变量的正确null值是多少?

使用 MUI 动态绘制多个边框

flexbox 布局中的 Padding-bottom/top

Angular Material 中的样式垫 Select

Bootstrap:在列之间添加边距/填充空间

如何在 html/css 中的图像旁边垂直居中文本?

iPhone X / 8 / 8 Plus CSS 媒体查询

如何让 flexbox 在计算中包含填充?

仅使用 CSS 交换 DIV 位置