css - 防止 CSS3 列在内容更改时回流

标签 css

我创建了一个模板页面,使用 CSS3 column 在两个整齐的列中显示 WordPress 查询结果。属性。结果流畅,除了当我使用(类似)JavaScript 动态更改列的内容时。

在我的例子中,显示的每个 WordPress 结果都是一个 <ul>元素及其 <li> child 最初隐藏。当子元素未隐藏时,列有时会回流以保持相同的对称性。从美学的 Angular 来看,它很棒,但从功能的 Angular 来看,它会跳转我的内容,这不是我的意图。

有什么方法可以轻松防止column从最初建立后回流?我宁愿继续使用这种技术,也不愿使用另一种方法来建立列。

我目前只使用简单的标记和 CSS:

<div class="results-list">
  <!-- PHP/WP Query Stuff in here -->
  <ul class="fa fa-plus"> <!-- The query expand button -->
    <li class="hide-me"> A hidden query result</li>
    <li class="hide-me"> Another hidden result</li>
  </ul>
</div>

.results-list {
  column-count: 2;
  -webkit-column-count: 2;
  -moz-column-count: 2;
}

.hide-me {
  display: none;
}

前图:

Before Expansion

展开一个元素后,请注意右栏的顶行如何回流到左栏的底部:

After Expansion

我宁愿它只是向下推右栏。也许不可能使用 column ,但我想我会问!

最佳答案

以下似乎对我有用;基本上在列正常布局后,添加一些额外的样式来修复每列的顶部:

jQuery(document).ready(function(){
    var last = 0;
    jQuery('.results-list ul').each(function(){
        if (jQuery(this).offset()['top'] <= last) {
            // start of new column
            jQuery(this).css({
                'column-break-before': 'always',
                'break-before': 'column'
            });
        }
        last = jQuery(this).offset()['top'];
    });
});

如果上述工作正常,只有 Office Supplies & Printing 容器应该获得额外的 CSS,这将防止它在任何后续内容更改时回流到第一列。


注意:如果仅通过 CSS 手动设置分栏符,我会使用以下内容:

-webkit-column-break-before: always;
break-before: column;

但是 jQuery 1.8 says it will apply the vendor prefixes ,但是 column-break-before 似乎并没有在 Chrome 中应用,尽管它对我来说仍然可以正常工作。

关于css - 防止 CSS3 列在内容更改时回流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41828769/

相关文章:

javascript - CSS - 如果元素用于事件函数,则无法在 css 中调用元素

css - Websitebaker 菜单失败

HTML 滚动条只显示部分框边框

html - 非程序员的网站更新工具

javascript - Jquery & secton 没有隐藏我的标志 div id

javascript - jQuery 下拉菜单-当用户单击内部 ul 之外的任何地方时隐藏内部 ul

javascript - 从 d3 比例和颜色插值返回 RGB 对象而不是字符串

javascript - 如何根据单击哪个单选按钮显示不同的文本框?

PHP 用于 HTML 元素,确定奇数/偶数,代码忽略背景图像

id 中类的 CSS 选择器