javascript - 列表的倒序

标签 javascript css

div > div {
  text-align: center;
  color: white;
  background: black;
  border: 1px solid white;
}

div.row {
  display: flex;
  flex-direction: row-reverse;
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

<div class="row">
  <div class="col-4">1</div>
  <div class="col-4">2</div>
  <div class="col-4">3</div>
  <div class="col-4">4</div>
  <div class="col-4">5</div>
  <div class="col-4">6</div>
  <div class="col-4">7</div>
</div>

我想反转这个数字列表成为

7  6  5
4  3  2
1

我试过用

div.row {
  display: flex;
  flex-direction: row-reverse
}

但没有像我想要的那样工作

是否可以仅使用 css 来做到这一点?

最佳答案

我知道您要求的是纯 CSS 解决方案,但因为使用 Javascript 很容易实现,所以我也想添加该解决方案。也可能对 future 可以选择 Javascript 的读者有所帮助。

另外,在这个时间点上,我认为仅使用 CSS 无法做到这一点。使用 Javascript 的额外好处是元素的源顺序与其视觉顺序保持一致,这对可访问性有很大帮助。

function reverseChildren(el) {
  [...el.children].reverse().forEach(child => el.appendChild(child));
}
div > div {
  text-align: center;
  color: white;
  background: black;
  border: 1px solid white;
}

div.row {
  display: flex;
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

<div class="row" id="row">
  <div class="col-4">1</div>
  <div class="col-4">2</div>
  <div class="col-4">3</div>
  <div class="col-4">4</div>
  <div class="col-4">5</div>
  <div class="col-4">6</div>
  <div class="col-4">7</div>
</div>

<button type="button" onclick="reverseChildren(document.getElementById('row'))">Reverse order</button>

那么让我们试试这对 1000 个 div 的表现如何:

const row = document.querySelector('.row');
const fragment = new DocumentFragment();

for (let i = 1; i<=1000; i++) {
  const div = document.createElement('div');
  div.className = "col-4";
  div.textContent = i;
  fragment.appendChild(div);
}

row.appendChild(fragment);

function reverseChildren(el) {
  const fragment = new DocumentFragment();
  [...el.children].reverse().forEach(child => {
    el.removeChild(child);
    fragment.appendChild(child);
  })
  el.appendChild(fragment);
}
div > div {
  text-align: center;
  color: white;
  background: black;
  border: 1px solid white;
}

div.row {
  display: flex;
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

<button type="button" onclick="reverseChildren(document.getElementById('row'))">Reverse order</button>
<div class="row" id="row"></div>
<button type="button" onclick="reverseChildren(document.getElementById('row'))">Reverse order</button>

在第二个示例中,我修改了 reverseChildren 函数以使用 DocumentFragment,这有助于提高性能。

关于javascript - 列表的倒序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57542345/

相关文章:

javascript - 如何将多个内容依次显示为跑马灯?第二个内容应该需要一些时间来显示

javascript - 无法让 jstree 工作 - "Uncaught TypeError: Object #<Object> has no method ' 委托(delegate)'”

javascript:在另一个函数中获取函数变量的值

css - 响应式网站不适用于 Css 中的媒体查询

css - 用本地存储的版本替换外部 css 库文件

html - 双背景图像顶部和底部

javascript - jquery 星级评级垂直

javascript - 带有多个超链接的 csv 到 html 表

css - 链接悬停动画下划线

html - Bootstrap 导航栏不工作