javascript - 单击事件更改网格布局

标签 javascript html css css-grid

是否可以通过单击事件更改网格布局?我有一个三行的网格显示,我希望在单击行中的元素时将网格更改为三列。

.gridcontainer {
  display: grid;
  grid-template-rows: 1fr 1fr 1fr;
  justify-content: center;
}

.gridcontainer {
  display: grid;
  grid-template-columns: 1fr 4fr 1fr;
  justify-content: center;
}
<div class="gridcontainer">
  <div class="item">Item</div>
  <div class="item">Item</div>
  <div class="item">Item</div>
  <div class="item">Item</div>
  <div class="item">Item</div>
  <div class="item">Item</div>
</div>

在任何元素的点击事件中,我希望网格显示从三行变为三列。

最佳答案

创建两个独立的类:

.row {
  grid-template-rows: 1fr 1fr 1fr;
}

.col {
  grid-template-columns: 1fr 4fr 1fr;
}

在每次点击时切换 .gridcontainer 上的每个类。详细信息在演示中评论。

// Reference the .gridcontainer
var grid = document.querySelector('.gridcontainer');

// Register click event to grid callback rowCol runs on click
grid.onclick = rowCol;

/* 
Callback function rowCol() passes the Event Object...
if the clicked element (e.target) .matches() class .item...
get the clicked element's (ie .item) .closest() element .gridcontainer and 
add/remove class .col or .row
*/
function rowCol(e) {
  if (e.target.matches('.item')) {
    e.target.closest('.gridcontainer').classList.toggle('row');
    e.target.closest('.gridcontainer').classList.toggle('col');
  }
  return false;
}
.gridcontainer {
  display: grid;
  justify-content: center;
}

.row {
  grid-template-rows: 1fr 1fr 1fr;
}

.col {
  grid-template-columns: 1fr 4fr 1fr;
}
<div class="gridcontainer row">
  <div class="item">Item</div>
  <div class="item">Item</div>
  <div class="item">Item</div>
  <div class="item">Item</div>
  <div class="item">Item</div>
  <div class="item">Item</div>
</div>

关于javascript - 单击事件更改网格布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55739798/

相关文章:

javascript - 优化 Google Apps 脚本中的 for 循环函数(可能是数组)?

html - 奇怪的 :hover behavior when using rowspan

html - 如果页面上的每个元素都按百分比调整大小,那么缩放浏览器窗口会有什么用吗?

php - 在 jquery 中动态设置按钮文本

javascript - 单击父菜单时如何将 + 更改为 -

html - 放置 child 时如何拖动父元素?

javascript - 默认情况下,无法在 foreach 循环中保持第一个 Accordion 打开

javascript - 如何在 JS "onclick"中使用 "setAttribute"运行函数?

javascript - 纬度经度格式错误 DDDMM.MMMM 2832.3396N

html - Bootstrap 将组件导航置于其他组件之上