砌体仅在 window 调整大小后才能正常工作

masonry only works properly after window resize

站点:www.zrrdigitalmedia.com

当图像加载到项目部分时,masonry 会将其重叠到下一个部分。当您调整 window 的大小并返回时,它看起来很好 - 就像它在我的 XAMPP 网站上所做的那样。

下面的 HTML 代码用于包含砌体部分的项目部分(未使用 JS 进行砌体)。我正在使用 Wordpress & Zurb Foundation(基于名为 FoundationPress 的模板。)我也在使用 Masonry 和 Foundation 的块网格。

<div id="projects-section" class="row">
<h1 id="projects">PROJECTS</h1>
<div id="projects-divider"></div>
<div class="small-12 columns" role="main">
    <div id="container" class="js-masonry" data-masonry-options='{ "itemSelector": ".item" }'>
        <?php do_action( 'foundationpress_before_content' ); ?>
        <ul class="small-block-grid-1 medium-block-grid-2 large-block-grid-3">

        <?php
        $args = array('cat' => 'uncategorized',
                      'post_type' => 'post',
                      'post_status' => 'publish',
                      'posts_per_page' => -1,
                      'caller_gets_posts' => 1
                      );
        $category_posts = new WP_Query($args);

        if($category_posts->have_posts()) : 
            while($category_posts->have_posts()) : 
                $category_posts->the_post();
            ?>
            <li class="item">
                <div class="post-thumbnail"> 
                    <a href="<?php the_permalink();?>"><?php if(has_post_thumbnail()){the_post_thumbnail();} ?></a>
                </div>
                <h2><?php the_title() ?></h2>
                <div class='post-content'><?php the_content() ?></div>      
                <div class="post-divider"></div>
            </li>

            <?php
            endwhile;
            else: 
                ?>
            Oops, there are no posts.
            <?php
        endif;
        ?>
        </ul>
        <?php do_action( 'foundationpress_after_content' ); ?>
    </div>
</div>

我不确定为什么网站上线后它的行为会有所不同。任何帮助都会很棒。如果我需要 post 更多代码,也请告诉我。谢谢!

听起来像您所描述的一个非常常见的问题是,Masonry 设置了您的元素,但您的图像尚未加载。

Masonry 文档建议使用 imagesLoaded()

http://masonry.desandro.com/appendix.html

var container = document.querySelector('#container');
var msnry;
// initialize Masonry after all images have loaded
imagesLoaded( container, function() {
  msnry = new Masonry( container );
});