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

如何根据窗口宽度动态添加、移除元素CSS类实现页面适配?

页面布局适配窗口宽度的问题修复

问题场景

当前通过PHP输出带Bootstrap栅格类的视频容器,希望根据窗口宽度动态调整布局:

echo "<div class=\"col-6\"><div class=\"videoTitle\">Dyno 1a</div><iframe src='cam1a.shtml' width='100%' height='240' scrolling='no' frameborder='0'></iframe></div>";

echo "<div class=\"col-6\"><div class=\"videoTitle\">Dyno 1b</div><iframe src='cam1b.shtml' width='100%' height='240' scrolling='no' frameborder='0'></iframe></div>";

echo "<div class=\"col-4\"><div class=\"videoTitle\">Dyno 2</div><iframe src='cam2.shtml' width='100%' height='240' scrolling='no' frameborder='0'></iframe></div>";

echo "<div class=\"col-4\"><div class=\"videoTitle\">Dyno 3</div><iframe src='cam3.shtml' width='100%' height='240' scrolling='no' frameborder='0'></iframe></div>";

echo "<div class=\"col-4\"><div class=\"videoTitle\">Dyno 4</div><iframe src='cam4.shtml' width='100%' height='240' scrolling='no' frameborder='0'></iframe></div>";

尝试用jQuery动态调整类,但窗口宽度变化时布局未更新,视频被截断:

$(document).ready(function(){
  if ($(window).width() <= 768) {
    $( ".col-4" ).addClass(".col-12");
    $( ".col-4" ).removeClass(".col-4");

    $( ".col-6" ).addClass(".col-12");
    $( ".col-6" ).removeClass(".col-6");
  } else if ($(window).width() <= 992) {
    $( ".col-4" ).addClass(".col-6");
    $( ".col-4" ).removeClass(".col-4");
  }
});

问题分析

原代码存在三个核心问题:

  • 类名格式错误:addClass和removeClass的参数不需要加.,带点会导致添加无效类(比如.col-12会被当成类名的一部分)。
  • 仅初始化执行:代码只在页面加载时运行一次,窗口大小变化时不会重新执行布局调整逻辑。
  • 未处理恢复逻辑:当窗口从窄变宽时,没有恢复原始栅格类,导致布局无法还原。

修复后的代码

// 封装布局调整函数
function adjustLayout() {
  const windowWidth = $(window).width();
  
  // 标记并筛选原始col-4的容器
  const col4Elements = $(".col-4, .col-6, .col-12").filter(function() {
    if (!$(this).data('original-col')) {
      $(this).data('original-col', $(this).hasClass('col-4') ? 'col-4' : 'col-6');
    }
    return $(this).data('original-col') === 'col-4';
  });
  
  // 标记并筛选原始col-6的容器
  const col6Elements = $(".col-4, .col-6, .col-12").filter(function() {
    if (!$(this).data('original-col')) {
      $(this).data('original-col', $(this).hasClass('col-6') ? 'col-6' : 'col-4');
    }
    return $(this).data('original-col') === 'col-6';
  });
  
  if (windowWidth <= 768) {
    col4Elements.removeClass('col-4 col-6').addClass('col-12');
    col6Elements.removeClass('col-6').addClass('col-12');
  } else if (windowWidth <= 992) {
    col4Elements.removeClass('col-4 col-12').addClass('col-6');
    col6Elements.removeClass('col-12').addClass('col-6');
  } else {
    // 窗口宽度大于992时恢复原始类
    col4Elements.removeClass('col-6 col-12').addClass('col-4');
    col6Elements.removeClass('col-12').addClass('col-6');
  }
}

// 页面加载时执行一次
$(document).ready(function() {
  adjustLayout();
  // 监听窗口resize事件,防抖避免频繁执行
  let resizeTimer;
  $(window).on('resize', function() {
    clearTimeout(resizeTimer);
    resizeTimer = setTimeout(adjustLayout, 200);
  });
});

更优方案:使用Bootstrap原生响应式类

无需JS,直接利用Bootstrap的栅格响应式类即可实现,更简洁且性能更好:

// col-md-6在中等屏幕及以上生效,小屏幕及以下变为col-12
echo "<div class=\"col-md-6 col-sm-12\"><div class=\"videoTitle\">Dyno 1a</div><iframe src='cam1a.shtml' width='100%' height='240' scrolling='no' frameborder='0'></iframe></div>";
echo "<div class=\"col-md-6 col-sm-12\"><div class=\"videoTitle\">Dyno 1b</div><iframe src='cam1b.shtml' width='100%' height='240' scrolling='no' frameborder='0'></iframe></div>";

// col-lg-4在大屏幕及以上生效,中等屏幕变为col-6,小屏幕变为col-12
echo "<div class=\"col-lg-4 col-md-6 col-sm-12\"><div class=\"videoTitle\">Dyno 2</div><iframe src='cam2.shtml' width='100%' height='240' scrolling='no' frameborder='0'></iframe></div>";
echo "<div class=\"col-lg-4 col-md-6 col-sm-12\"><div class=\"videoTitle\">Dyno 3</div><iframe src='cam3.shtml' width='100%' height='240' scrolling='no' frameborder='0'></iframe></div>";
echo "<div class=\"col-lg-4 col-md-6 col-sm-12\"><div class=\"videoTitle\">Dyno 4</div><iframe src='cam4.shtml' width='100%' height='240' scrolling='no' frameborder='0'></iframe></div>";

Bootstrap的CSS媒体查询会自动根据窗口宽度切换类,完全不需要JS干预。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:42:55