【问题标题】:rearranging / interweaving elements with CSS使用 CSS 重新排列/交织元素
【发布时间】:2019-02-28 13:03:21
【问题描述】:

有没有办法用 CSS 来“交织”元素?

假设我已经做出反应,生成图像列表和文本列表。

html 看起来像

<div>
  <p>Paragraph 1</p>
  <p>Paragraph 2</p>
  <p>Paragraph 3</p>
  <p>Paragraph 4</p>
  <p>Paragraph 5</p>
  <img src="image1.jpg" />
  <img src="image2.jpg" />
  <img src="image3.jpg" />
  <img src="image4.jpg" />
  <img src="image5.jpg" />
</div>

我希望它们像这样显示

<div>
  <p>Paragraph 1</p>
  <img src="image1.jpg" />
  <p>Paragraph 2</p>
  <img src="image2.jpg" />
  <img src="image3.jpg" />
  <p>Paragraph 3</p>
  <img src="image4.jpg" />
  <p>Paragraph 4</p>
  <img src="image5.jpg" />
  <p>Paragraph 5</p>
</div>

我觉得它可以在 React 组件中轻松完成,但我想知道是否有一种方法可以使用 CSS 网格或 flex。

【问题讨论】:

标签: javascript css flexbox css-grid


【解决方案1】:

您可以使用网格元素的 order 属性来做到这一点。

下面的代码应该可以解决问题:

div { display: grid; }

p:nth-child(1) { order: 1; }
p:nth-child(2) { order: 3; }
p:nth-child(3) { order: 6; }
p:nth-child(4) { order: 8; }
p:nth-child(5) { order: 10; }
img:nth-child(6) { order: 2; }
img:nth-child(7) { order: 4; }
img:nth-child(8) { order: 5; }
img:nth-child(9) { order: 7; }
img:nth-child(10) { order: 9; }
<div>
  <p>Paragraph 1</p>
  <p>Paragraph 2</p>
  <p>Paragraph 3</p>
  <p>Paragraph 4</p>
  <p>Paragraph 5</p>
  <img src="image1.jpg" />
  <img src="image2.jpg" />
  <img src="image3.jpg" />
  <img src="image4.jpg" />
  <img src="image5.jpg" />
</div>

默认情况下,所有网格项的顺序值为 0,顺序值越低,网格项出现的位置越高。我建议您对元素使用不同的选择器(向它们添加类)。

【讨论】:

  • 如果我不知道有多少个 p 或 img 标签怎么办?有没有动态的编号方式?
  • 是的。您可以使用 javascript 添加 order 属性: element.style.order = x 其中 x 是 order 值, element 是 javascript 代码中的元素
猜你喜欢
  • 2016-08-31
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
  • 1970-01-01
  • 2014-03-31
相关资源
最近更新 更多