javascript - 绘制后避免重排 css3 列

标签 javascript jquery html css multiple-columns

我正在使用 css3 列在 3 列中显示无序列表。列表项还包含列表,可以通过使用 jQuery 单击标题来显示或隐藏这些列表。

html 看起来像(用类名来描述布局和交互):

<ul class="i-display-in-3-columns">
  <li>
    <h3 class="slide-toggle-sibling-list-on-click">column title 1</h3>
    <ul class="i-am-initially-hidden">
      <li>item 1</li>
      <li>item 2</li>
      <li>item 3</li>
      <li>item 4</li>
    </ul>
  </li>
  <li>
    <h3 class="slide-toggle-sibling-list-on-click">column title 2.</h3>
    <p>This can be very long with perhaps an additional paragraph as well.</p>
    <ul class="i-am-initially-hidden">
      <li>item 1</li>
      <li>item 2</li>
      <li>item 3</li>
      <li>item 4</li>
    </ul>
  </li>
  /* some more items */
</ul>

这可行,但每次打开或关闭子列表时,列都会重新绘制。

我想在最初绘制列后卡住它们以避免这种重排,以便每个元素都保留在最初绘制的列中。

我当然可以在 javascript 中编写类似砖石结构的解决方案,将我的列表转换为 3 个彼此相邻显示的列表,但我希望有一个更简单的解决方案,最好是在 css 或 javascript 中保持我的列表作为列表。

这可能吗,还是我只需要重写 DOM?

最佳答案

我认为您无法通过 CSS 列实现这一目标。可以选择切换子列表的 visibility 而不是 display,但我假设您不希望这样。

另一种可能的 CSS 解决方案是使用 flexbox 模块(并处理浏览器支持问题)。例如,我相信这可能是您想要的(在 Chrome 29 上工作):

.i-display-in-3-columns {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
}

.i-display-in-3-columns>li {
    flex: 1 1 200px; /* 200px is the column width */
}

Demo

关于javascript - 绘制后避免重排 css3 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18709240/

相关文章:

javascript - Ajax 无法从 php 加载数据到 div

javascript - 通用 Tensorflow.js 训练示例

jquery - 日期选择器应用于错误的字段

javascript - 未捕获错误 : Syntax error, 无法识别的表达式:a[href*=#]:not([href=#])

jquery - 有没有办法将变量添加到 jquery css 方法?

css - 导航栏中的等间距

javascript - 是否可以在 React 中连接 img src?

If 语句中的 Javascript 元素验证

php - 在将值写入文本文件 php 之前检查值是否存在

javascript - 拖动时更改光标