css - Sass 中的 If/Else 语句根据列表中的元素数更改 css

标签 css if-statement sass flexbox

我有一个我正在使用 flex 的元素列表。它们水平排成一排。

我想知道是否可以编写一个基本上执行以下操作的 if/else 语句:

如果列表中有 4 个或更少的元素,请使用 justify-content: space-between,但如果有 5 个或更多元素,请使用 justify-content: space-evenly。

我正在努力思考如何编写这样的东西来测试它,但在 Sass 文档中找不到任何涵盖这种情况的内容 - 这样的事情可能吗?

最佳答案

因为你不能使用 SASS 来计算元素,你可以使用 CSS 根据他们的数量来定位 parent 的 child (当/如果我们有一个父选择器,我们也可以定位父 :)

基于此解决方案Can CSS detect the number of children an element has?如果有 5 个或更多,我们可以更改 nth-child 以定位所有。

在您的特定情况下,如果您想更改 justify-content 属性,这将无济于事,因为该属性是在父级上设置的,尽管还有其他方法可以在两者之间创建空间 flex 元素,即自动边距,可以使用此方法的地方。

堆栈片段

ul {
    list-style: none;
    margin: 0;
    padding: 0;
}

li {
    background: blue;
    height: 20px;
    margin: 5px;
}

/* five or more items */
li:first-child:nth-last-child(n+5),
li:first-child:nth-last-child(n+5) ~ li {
    background: red;
}
<ul>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
</ul>

<ul>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
</ul>


如果这没有帮助,如果其子级超过 4,则使用一个小脚本将一个类添加到父级。

堆栈片段

$('ul').each(function(idx, el) {
  if(el.children.length > 4) {
    $(el).addClass('more_than_4');
  }
});
ul {
    list-style: none;
    margin: 0;
    padding: 0;
}

li {
    background: blue;
    height: 20px;
    margin: 5px;
}

ul.more_than_4 {
    background: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
</ul>

<ul>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
</ul>

关于css - Sass 中的 If/Else 语句根据列表中的元素数更改 css,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46971097/

相关文章:

css - 如何创建此渐变?

Excel - 跨多列或具有多个值的一列进行多值搜索

php - 在 JS 不好的做法中使用 PHP if/else 吗?

css - React 组件有我没有导入的 css 文件

css - 如何使显示属性可能发生变化的 div 居中?

css - rake assets:precompile > Sass::SyntaxError: Invalid CSS after "padding": expected ";"是 ":20px;"

javascript - HTML DOM 更改父元素的样式

html - 单选按钮标签定位

javascript - 将绝对定位的元素固定到滚动视口(viewport)的顶部

arrays - Powershell -notin 数组不会触发 if 语句