当前位置:首页 > JavaScript

js实现grid布局

2026-04-04 15:05:21JavaScript

使用 CSS Grid 布局

CSS Grid 是现代网页布局的强大工具,通过 JavaScript 动态操作 Grid 可以实现灵活的布局调整。

基本 Grid 布局

通过 CSS 定义 Grid 容器和项目:

.grid-container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-gap: 10px;
}
.grid-item {
  background: #ddd;
  padding: 20px;
}

JavaScript 动态修改 Grid

通过 DOM API 获取元素并修改 Grid 属性:

js实现grid布局

const container = document.querySelector('.grid-container');

// 修改列数
container.style.gridTemplateColumns = 'repeat(4, 1fr)';

// 添加新项目
const newItem = document.createElement('div');
newItem.classList.add('grid-item');
newItem.textContent = 'New Item';
container.appendChild(newItem);

响应式 Grid 调整

根据窗口大小动态调整布局:

function updateGrid() {
  if (window.innerWidth < 600) {
    container.style.gridTemplateColumns = '1fr';
  } else {
    container.style.gridTemplateColumns = 'repeat(3, 1fr)';
  }
}

window.addEventListener('resize', updateGrid);

动态 Grid 模板

使用 JavaScript 生成复杂的 Grid 模板:

js实现grid布局

const areas = ['header', 'main', 'sidebar', 'footer'];
container.style.gridTemplateAreas = `
  "${areas[0]} ${areas[0]} ${areas[0]}"
  "${areas[1]} ${areas[1]} ${areas[2]}"
  "${areas[3]} ${areas[3]} ${areas[3]}"
`;

拖拽重新排序

实现 Grid 项目的拖拽排序功能:

let draggedItem = null;

document.querySelectorAll('.grid-item').forEach(item => {
  item.draggable = true;

  item.addEventListener('dragstart', () => {
    draggedItem = item;
    setTimeout(() => item.style.display = 'none', 0);
  });

  item.addEventListener('dragend', () => {
    setTimeout(() => item.style.display = 'block', 0);
    draggedItem = null;
  });
});

container.addEventListener('dragover', e => {
  e.preventDefault();
});

container.addEventListener('drop', e => {
  e.preventDefault();
  container.insertBefore(draggedItem, document.elementFromPoint(e.clientX, e.clientY));
});

动画过渡效果

为 Grid 布局变化添加平滑过渡:

.grid-container {
  transition: grid-template-columns 0.3s ease;
}

浏览器兼容性处理

检测并处理不支持 Grid 的情况:

if (!CSS.supports('display', 'grid')) {
  container.classList.add('no-grid');
  // 添加回退布局代码
}

标签: 布局js
分享给朋友:

相关文章

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js实现上传文件

js实现上传文件

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。 <input type="file"…

js实现按钮点击

js实现按钮点击

实现按钮点击的JavaScript方法 HTML按钮元素 在HTML中创建按钮元素,为其添加id或class以便JavaScript选择: <button id="myButton">点…

vue框架实现布局

vue框架实现布局

Vue 框架实现布局方法 Vue 提供了多种方式实现页面布局,结合其组件化特性和生态工具(如 Vue Router、UI 库等),以下是常见实现方案: 基于组件化布局 通过拆分布局为多个组件(如头部…