我正在try 创建一个具有两个列的动态网格布局,即#red-container#green-container.每个容器或列应该是水平可调整大小的并且主容器#container应该是垂直可调整大小的.调整容器大小应调整子元素的高度.#red-container#green-container具有单元格,这些单元格是以按行方式使用JavaScript函数动态添加到容器中的.我有以下可用的实现:

function addCell(color) {
  let container = document.getElementById(color + "-container");
  
  let cell = document.createElement("div");
  cell.innerText = color;
  container.appendChild(cell).className = "container-item";
}
#container {
  border: 1px solid #ddd;
  display: flex;
  flex-grow: 1;
  flex-direction: row;
  height: 50vh;
  resize: vertical;
  overflow: auto;
}

#red-container {
  flex-grow: 1;
  display: grid;
  grid-auto-flow: row;
  margin: 10px;
  resize: horizontal;
  overflow: auto;
  border: 1px solid red;
}

#green-container {
  flex-grow: 1;
  display: grid;
  grid-auto-flow: row;
  margin: 10px; 
  resize: horizontal; 
  overflow: auto;
  border: 1px solid green;
}

.container-item {
  padding: 10px;
  border: 1px solid black;
}
<button onclick="addCell('red')">add red cell</button>
<button onclick="addCell('green')">add green cell</button>

<div id="container">
  <div id="red-container"></div>
  <div id="green-container"></div>
</div>

然而,它有两个问题:

  1. 当用户第一次点击add red cell时,它会增加#red-container的宽度.
  2. 调整红色和绿色容器的宽度不一致,我无法将红色容器的宽度调整到宽度的50%以下.

对如何解决这两个问题有什么 idea 吗?此外,欢迎任何关于以更简洁的方式编写CSS的建议(#red-container#green-container包含重复的代码).

推荐答案

仅使红色容器可调整大小,初始宽度等于50%,绿色容器使用flex-grow:1

function addCell(color) {
  let container = document.getElementById(color + "-container");
  
  let cell = document.createElement("div");
  cell.innerText = color;
  container.appendChild(cell).className = "container-item";
}
#container {
  border: 1px solid #ddd;
  display: flex;
  gap: 10px;
  padding: 10px;
  height: 50vh;
  resize: vertical;
  overflow: auto;
}

#green-container,
#red-container {
  display: grid;
  overflow: auto;
}
#red-container {
  border: 1px solid red;
  width: 50%;
  resize: horizontal; 
}
#green-container {
  border: 1px solid green;
  flex-grow: 1;
}


.container-item {
  padding: 10px;
  border: 1px solid black;
}
<button onclick="addCell('red')">add red cell</button>
<button onclick="addCell('green')">add green cell</button>

<div id="container">
  <div id="red-container"></div>
  <div id="green-container"></div>
</div>

Html相关问答推荐

角|将动态html属性添加到子组件

创建具有圆锥渐变的水平CSS聚光灯

需要帮助实现悬停动画效果

如何最大限度地减少Cookie同意代码对性能的影响?

将2个Flex列合并为1个交替子列

当光标悬停在(相同)父元素上方时,为多个子元素创建不同的过渡动画

每个元素的CSS网格高度相等,以保持响应性

文本幻灯片显示动画

try 更新我的Node.js应用程序中的用户,但我收到错误.然而,当我使用postman 时,更新工作正常

如何使背景图像在面包屑中相互重叠

div居中碰撞问题

添加带有悬停动画的喜欢图标

用由文本制成的边框包围内容

为什么我的图像在悬停时与固定顶部栏重叠?

为 HTML5 文本字段设置最后六位正则表达式模式

Tailwind:父母动态适应子元素的身高

a with