You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP表单与Isotope图片网格兼容问题及布局修正咨询

Isotope图片网格功能失效的修复方案

问题根源

你当前代码里,Isotope的目标容器work_content_area被嵌套在PHP循环内的<form>标签中,导致每个产品生成一个独立的Isotope容器,而非所有网格项共享一个父容器,这直接导致Isotope无法正确识别和管理整个网格布局。同时,网格项缺少对应的过滤类,也会让筛选功能失效。

修正后的代码

HTML/PHP代码

<section id="portfolio" class="gray_bg section_padding">
    <div class="container">
        <div class="col-md-12 col-sm-12-col-xs-12">
            <div class="section_heading text-center">
                <h1 class="port-title">OUR <span>PORTFOLIO</span></h1>
            </div>
        </div>
        <div class="row">
            <div class="work_filter text-left">
                <ul>
                    <li class="active" data-filter="*">All</li>
                    <li data-filter=".Media">Media</li>
                    <li data-filter=".Interior-Design">Interior Design</li>
                </ul>
            </div>
            <!-- 将Isotope容器移到循环外部,作为所有网格项的父容器 -->
            <div class="work_content_area">
                <?php
                $select_products = $conn->prepare("SELECT * FROM `products`");
                $select_products->execute();
                if ($select_products->rowCount() > 0) {
                    while ($fetch_product = $select_products->fetch(PDO::FETCH_ASSOC)) {
                        // 假设products表有category字段,转换为对应过滤类
                        $filterClass = str_replace(' ', '-', $fetch_product['category']);
                        ?>
                        <div class="col-md-3 col-sm-6 col-xs-12 <?= $filterClass ?>">
                            <!-- 表单嵌套在列容器内,保留单个产品的表单功能 -->
                            <form action="" method="post">
                                <div class=" thumbnail img-scale-in" data-hover-easing="easeInOut" data-hover-speed="700"
                                    data-hover-bkg-color="#ffffff" data-hover-bkg-opacity="0.9">
                                    <input type="hidden" name="pid" value="<?= $fetch_product['id']; ?>">
                                    <input type="hidden" name="name" value="<?= $fetch_product['name']; ?>">
                                    <input type="hidden" name="price" value="<?= $fetch_product['price']; ?>">
                                    <input type="hidden" name="image" value="<?= $fetch_product['image_01']; ?>">
                                    <img src="uploaded_img/<?= $fetch_product['image_01']; ?>" alt="">
                                </div>
                            </form>
                        </div>
                        <?php
                    }
                } else {
                    echo '<p class="empty">no products found!</p>';
                }
                ?>
            </div>
        </div>
    </div>
</section>

JS代码

/* START ISOTOP JS */
$(document).ready(function() {
    var $grid = $('.work_content_area').isotope({
        itemSelector: '.col-md-3', // 明确指定网格项选择器
        layoutMode: 'masonry' // 可选,根据需求设置布局模式
    });
    // 合并过滤与激活状态逻辑,避免重复绑定事件
    $('.work_filter').on('click', 'li', function () {
        var filterValue = $(this).attr('data-filter');
        $grid.isotope({ filter: filterValue });
        $(this).addClass('active').siblings().removeClass('active');
    });
});
/* END ISOTOP JS */

关键修改说明

  1. 容器位置调整:把work_content_area移到PHP循环外部,作为所有网格项的统一父容器,确保Isotope能正确识别并管理整个网格。
  2. 表单嵌套修正:每个产品的<form>标签放在列容器内部,既保留单个产品的表单功能,又不破坏网格结构。
  3. 过滤类添加:根据产品分类动态生成对应过滤类(需确保products表有category字段),让筛选按钮能匹配对应网格项。
  4. JS优化:用$(document).ready()确保DOM加载完成后初始化Isotope,合并重复的点击事件处理逻辑,指定itemSelector让Isotope明确识别网格项。

内容的提问来源于stack exchange,提问作者Abdelrahman Hamdy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 15:47:28