javascript - 将 CSS 网格布局与动态创建的行一起使用

标签 javascript html css grid-layout

我正在尝试使用 CSS 网格布局来为具有动态创建的行的“ Controller ”设置样式。我无法正确设置间距。

在我所拥有的情况下, slider 容器不会出现在它们自己的行中(尽管 grid-auto-rows: auto)并且 slider 容器中的内容不会出现在同一行中行(尽管 grid-template-columns: 1fr 2fr 1fr)。第 2 列和第 3 列之间还出现了一些奇怪的意外间距(无论如何都不应该存在)。

最终我想要的是每行包含 1 个标签、1 个 slider 和 1 个值(所有这些都相互关联)并且每列中的元素具有相同的宽度,最好是保留相应列中最大长度的内容。

我好奇的是

  • 这个 Controller 是否应该有绝对定位/绝对宽度(我怎样才能使宽度适合内容?)
  • 我如何编写 CSS,使其能够在用户调整屏幕大小时很好地调整大小
  • 如果标签列宽是所有标签内容的最大值的最小值,值列宽是所有值内容的最大值的最小值,如果我为 slider 设置最小宽度,那应该给我最小值容器的宽度,对吗?
  • 如果行是动态创建的,我如何通过 grid-row 属性引用它们?

感谢您的帮助。

var slidersContainer = document.createElement("div");
slidersContainer.id = "sliders-container";

var body = document.getElementsByTagName("body")[0];
body.appendChild(slidersContainer);

for (i = 0; i < 10; i++) {
  var sliderContainer = document.createElement("div");
  sliderContainer.className = "slider-container";
  slidersContainer.appendChild(sliderContainer);

  var label = document.createElement("div");
  label.className = "slider-label"
  label.innerHTML = "some-label-" + i;
  sliderContainer.appendChild(label);

  var input = document.createElement("input");
  input.className = "slider";
  input.min = 0;
  input.max = 100;
  input.type = "range";
  sliderContainer.appendChild(input);

  var value = document.createElement("div");
  value.className = "slider-value";
  value.innerHTML = "0.0000001";
  sliderContainer.appendChild(value);
}
#sliders-container {
  position: absolute;
  top: 0;
  right: 0;
  margin: 20px;
  padding: 5px;
  background-color: #333333;
  display: grid;
  grid-auto-rows: auto;
  grid-template-columns: 1fr 2fr 1fr;
  grid-gap: 10px;
}

.slider-container {}

.slider-label {
  font-family: "Trebuchet MS", Verdana, sans-serif;
  font-size: small;
  color: white;
  grid-column: 1;
}

.slider {
  grid-column: 2;
}

.slider-value {
  font-family: "Trebuchet MS", Verdana, sans-serif;
  font-size: small;
  color: white;
  grid-column: 3;
}
<!DOCTYPE html>
<html>

<head></head>

<body></body>

</html>

最佳答案

CSS 网格 属性应用到 slider-container 而不是 absolutely positioned 容器 - 请参见下面的演示:

var slidersContainer = document.createElement("div");
slidersContainer.id = "sliders-container";

var body = document.getElementsByTagName("body")[0];
body.appendChild(slidersContainer);

for (i = 0; i < 10; i++) {
  var sliderContainer = document.createElement("div");
  sliderContainer.className = "slider-container";
  slidersContainer.appendChild(sliderContainer);

  var label = document.createElement("div");
  label.className = "slider-label"
  label.innerHTML = "some-label-" + i;
  sliderContainer.appendChild(label);

  var input = document.createElement("input");
  input.className = "slider";
  input.min = 0;
  input.max = 100;
  input.type = "range";
  sliderContainer.appendChild(input);

  var value = document.createElement("div");
  value.className = "slider-value";
  value.innerHTML = "0.0000001";
  sliderContainer.appendChild(value);
}
#sliders-container {
  position: absolute;
  top: 0;
  right: 0;
  margin: 20px;
  padding: 5px;
  background-color: #333333;
}

.slider-container { /* CHANGED */
  display: grid;
  grid-template-columns: 1fr 2fr 1fr;
  grid-gap: 10px;
}

.slider-label {
  font-family: "Trebuchet MS", Verdana, sans-serif;
  font-size: small;
  color: white;
  grid-column: 1;
}

.slider {
  grid-column: 2;
}

.slider-value {
  font-family: "Trebuchet MS", Verdana, sans-serif;
  font-size: small;
  color: white;
  grid-column: 3;
}

关于javascript - 将 CSS 网格布局与动态创建的行一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54857910/

相关文章:

html - CSS 图片(动态大小)在右上角,其他元素填充空间

javascript - 更改jquery中元素的id?

javascript - 如何获取 MongoDB 集合中嵌套对象内具有最大值的键?

html - 响应式设计 - 使用 css 重新排列元素位置

html - 列 CSS 空白

html - 为什么将 body 标签的样式设置为 "position: relative"会导致绝对定位的 div 起始位置较低?

javascript - 在网站的不同部分使标题/导航改变颜色

javascript - 如何让DataTable绘制新的结果?

javascript 如何从两个对象数组中查找?

html - 如何制作网站 "title"之前的图标?