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

CSS Grid布局无响应:调整textarea时元素出现间隙问题

解决Grid布局中textarea调整大小导致的间隙问题

问题根源

使用grid-template-columns: auto auto ...定义Grid列时,列宽仅基于元素初始尺寸计算。当拖动textarea的调整手柄改变宽度时,Grid不会自动重新计算列宽,导致被调整的textarea超出原有列宽,与相邻元素出现间隙,且其他元素无法响应尺寸变化。

解决方案

通过CSS调整Grid布局规则,结合JavaScript监听尺寸变化同步列宽,实现拖动textarea时其他元素自动响应:

1. 修正CSS代码

@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap');
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
  font-family: 'Poppins', sans-serif;
}

.grid-container {
  position: relative;
  background-color: pink;
  display: grid;
  padding: 20px;
  /* 初始列宽匹配textarea初始尺寸 */
  grid-template-columns: repeat(6, min-content);
  gap: 0; /* 移除Grid默认间隙 */
  text-align: center;
}

.item {
  background-color: green;
  border: 1px solid black;
  font-size: 40px;
  resize: horizontal;
  width: auto; /* 让textarea宽度决定网格项宽度 */
  min-width: 100px; /* 设置最小宽度避免过窄 */
}

2. 添加JavaScript监听

const gridContainer = document.querySelector('.grid-container');
const textareas = document.querySelectorAll('.item');

// 更新Grid列宽为每个textarea的当前宽度
function updateGridColumns() {
  const columnWidths = Array.from(textareas).map(ta => `${ta.offsetWidth}px`);
  gridContainer.style.gridTemplateColumns = columnWidths.join(' ');
}

// 初始化列宽
updateGridColumns();

// 监听每个textarea的尺寸变化
textareas.forEach(ta => {
  const observer = new ResizeObserver(() => {
    updateGridColumns();
  });
  observer.observe(ta);
});

3. 修正HTML中的无效ID

你的代码中有三个textarea使用了相同的id="item10",ID必须唯一,需修改为item10、item11、item12:

<link rel="stylesheet" href="https://unicons.iconscout.com/release/v4.0.0/css/line.css">

<div class="grid-container">
  <textarea class="item" id="item1">1</textarea>
  <textarea class="item" id="item2">2</textarea>
  <textarea class="item" id="item3">3</textarea>
  <textarea class="item" id="item4">4</textarea>
  <textarea class="item" id="item5">5</textarea>
  <textarea class="item" id="item6">6</textarea>
  <textarea class="item" id="item7">7</textarea>
  <textarea class="item" id="item8">8</textarea>
  <textarea class="item" id="item9">9</textarea>
  <textarea class="item" id="item10">10</textarea>
  <textarea class="item" id="item11">11</textarea>
  <textarea class="item" id="item12">12</textarea>
</div>

效果说明

拖动任意textarea的右侧调整手柄时,ResizeObserver会立即捕获尺寸变化,同步更新Grid的列宽,所有相邻元素会自动调整位置,不会出现间隙,实现响应式的尺寸联动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:06:34