CSS仅在条件允许的情况下最后三个孩子

约翰

我正在尝试学习如何选择<li>a的最后三个元素,以<ul>使其(基于一个)索引大于3的最大倍数,而3的最大倍数小于列表元素的数量。

因此,例如:

  • 如果中有9个<li>元素<ul>,我希望元素1-6具有font-weight:normal,元素7,8和9具有font-weight:bold。
  • 如果中有8个<li>元素<ul>,我希望元素1-6具有font-weight:normal,元素7和8具有font-weight:bold。
  • 如果中有7个<li>元素<ul>,我希望元素1-6具有font-weight:normal,元素7具有font-weight:bold。

我尝试了这个CSS选择器,但似乎使所有内容都变为粗体:

li:nth-last-child(1n+0),
li:nth-last-child(2n+0),
li:nth-last-child(3n+0) {font-weight:bold;}

我还要怎么做?

i

我想你要

li:nth-last-child(-n+3):nth-child(3n+1),
li:nth-last-child(-n+3):nth-child(3n+1) ~ * {
   font-weight: bold;
}

也就是说,它在索引mod 3为1的最后3个元素中选择元素。然后,它还添加了以下同级元素(如果有)。

/* Tests */
document.styleSheets[0].ownerNode.textContent += ".fail { color: red; } .fail::after { content: ' - FAIL'; }"
for (var i=0; i<10; ++i) {
  var ul = document.body.appendChild(document.createElement('ul'));
  for (var j=0; j<=i; ++j) {
    var li = ul.appendChild(document.createElement('li'));
    li.appendChild(document.createTextNode(j+1+'-th item '));
  }
  for (var j=0; j<=i; ++j) {
    var li = ul.children[j];
    var isSelected = getComputedStyle(li).fontWeight === '700';
    if(isSelected !== (j >= Math.floor(i/3)*3)) li.className = "fail";
  }
}
li:nth-last-child(-n+3):nth-child(3n+1),
li:nth-last-child(-n+3):nth-child(3n+1) ~ * {
   font-weight: bold;
}

如果有三个以上的元素,可以将其简化为

li:nth-last-child(-n+4):nth-child(3n) ~ * {
   font-weight: bold;
}

也就是说,它从索引为3的倍数的最后4个元素中获取元素,然后选择以下同级元素。

/* Tests */
document.styleSheets[0].ownerNode.textContent += ".fail { color: red; } .fail::after { content: ' - FAIL'; }"
for (var i=0; i<10; ++i) {
  var ul = document.body.appendChild(document.createElement('ul'));
  for (var j=0; j<=i; ++j) {
    var li = ul.appendChild(document.createElement('li'));
    li.appendChild(document.createTextNode(j+1+'-th item '));
  }
  for (var j=0; j<=i; ++j) {
    var li = ul.children[j];
    var isSelected = getComputedStyle(li).fontWeight === '700';
    if(isSelected !== (j >= Math.floor(i/3)*3)) li.className = "fail";
  }
}
li:nth-last-child(-n+4):nth-child(3n) ~ * {
  font-weight:bold;
}

如果您不喜欢通用选择器,

li:nth-last-child(-n+3):nth-child(3n+1),
li:nth-last-child(-n+2):nth-child(3n+2),
li:nth-last-child(-n+1):nth-child(3n+3)

/* Tests */
document.styleSheets[0].ownerNode.textContent += ".fail { color: red; } .fail::after { content: ' - FAIL'; }"
for (var i=0; i<10; ++i) {
  var ul = document.body.appendChild(document.createElement('ul'));
  for (var j=0; j<=i; ++j) {
    var li = ul.appendChild(document.createElement('li'));
    li.appendChild(document.createTextNode(j+1+'-th item '));
  }
  for (var j=0; j<=i; ++j) {
    var li = ul.children[j];
    var isSelected = getComputedStyle(li).fontWeight === '700';
    if(isSelected !== (j >= Math.floor(i/3)*3)) li.className = "fail";
  }
}
li:nth-last-child(-n+3):nth-child(3n+1),
li:nth-last-child(-n+2):nth-child(3n+2),
li:nth-last-child(-n+1):nth-child(3n+3) {
  font-weight: bold;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

添加一个复合 AND 条件,该条件允许循环仅在以下情况下继续迭代

如何在没有$ unwind的情况下加入三个集合并根据条件获取嵌套结果?

是否有一个matplotlib.pyplot代码可以在没有'axes.grid'代码的情况下允许三个子图?

在不使用第三个温度的情况下交换 2 个号码

如何在不倾斜三个js的情况下向上移动相机

仅在使用最后一个属性的情况下进行循环

在第三个映射/联接表中给定值的情况下,从2个表中检索值

如何在不使用第三个变量的情况下交换两个Perl变量?

如何在条件链接到第三个表的情况下联接两个表

仅在前一个元素包含类的情况下应用条件

&& 运算符是否仅在满足前一个条件的情况下评估右侧?

仅在满足一个条件的情况下,ON DUPLICATE KEY UPDATE的Terser语法?

如何在不创建新表的情况下从三个表中创建所需的答案?

在考虑事务的情况下如何使用prepare语句将数据插入MySQLi中的三个不同表

如何在不使用python每三个字符的情况下打印字符串?

xpath如何在孩子的数量并不总是相同的情况下获取第一级孩子的最后一个值

Firebase回收器视图仅在第三个孩子上显示错误

仅在具有两个基类的情况下,才允许在模板参数中使用类类型

仅在满足条件的情况下添加到dict

关键字“仅在条件成立的情况下使用”

仅在满足条件的情况下运行SQL查询

仅在满足条件的情况下更新行

仅在满足条件的情况下如何更新文档?

仅在满足条件的情况下才执行CHECK语句

仅在满足条件的情况下如何开始活动

仅在满足条件的情况下进行Rails模型计算

条件在何处子句的情况。如果仅在条件匹配的情况下使用过滤条件

MySQL-仅在父母怀孕的情况下计算partents的孩子数

使用htaccess,仅在URL包含查询字符串的情况下才允许访问网站,但允许网站资源(CSS,JS等)工作吗?