首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用javascript将css-grid元素放置到网格容器中

如何使用javascript将css-grid元素放置到网格容器中
EN

Stack Overflow用户
提问于 2019-09-23 00:32:18
回答 1查看 1.4K关注 0票数 1

我正在用普通的js和css网格做一个记忆游戏。我已经看到了使用flex-box的解决方案,但是我想用css-grid代替它。我现在面临的挑战是使用javascript将网格元素放入网格容器中。我知道如何在css中这样做,但不能用js来完成。到目前为止,我已经尝试了以下几种方法,但没有运气:

代码语言:javascript
复制
const fillGrid = () => {
    let i = 1;
    document.getElementsByClassName('grid-item').forEach(element => {
        element.style.gridArea = `block${i++}`;
        document.getElementById('grid').appendChild(element);
    });
}

fillGrid();

我的意图是为javascript中的每个网格项分配“网格区域”属性,同时将css -网格的其余属性保留在css部分中。我想使用javascript,因为我想动态地更改每个元素的位置。

HTML:

代码语言:javascript
复制
    <div class="grid-container" id="grid">
        <div class="grid-item">
            <img src="img/2.jpg" class="frot-face"/>
        </div>
        <div class="grid-item">
            <img src="img/1.jpg" class="frot-face"/>
        </div>
        <div class="grid-item">
            <img src="img/3.jpg" class="frot-face"/>
        </div>
        <div class="grid-item">
            <img src="img/5.jpg" class="frot-face"/>
        </div>
        <div class="grid-item">
            <img src="img/6.jpg" class="frot-face"/>
        </div>
        <div class="grid-item">
            <img src="img/7.jpg" class="frot-face"/>
        </div>
        <div class="grid-item">
            <img src="img/8.jpg" class="frot-face"/>
        </div>
        <div class="grid-item">
            <img src="img/9.jpg" class="frot-face"/>
        </div>
    </div>

CSS:

代码语言:javascript
复制
  .grid-container {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr 1fr;
    grid-template-rows: 1fr 1fr 1fr 1fr;
    grid-template-areas: 'block1 block2 block3 block4' 'block5 block6 block7 block8' 'block1 block2 block3 block4' 'block5 block6 block7 block8';
    padding: 3em 2em 3em 2em;
    grid-gap: 1em;
    width: 73vmin;
    margin: auto;
    border-radius: 10px;
  }
EN

回答 1

Stack Overflow用户

发布于 2019-09-23 23:31:10

我已经解决了这个问题。我的代码不能工作的主要原因是我滥用了gridArea属性。与CSS grid-area属性不同,在JS(或DOM)中,该属性不用于为网格项分配名称。相反,它是

用作网格行开始、网格列开始、网格行结束和网格列结束属性的简写属性。

参考资料:https://www.w3schools.com/cssref/pr_grid-area.asphttps://www.w3docs.com/learn-css/grid-area.html。我的最后代码如下:

代码语言:javascript
复制
const fillGrid = () => {
    let col = 1, row = 1;
    const items = [...document.getElementsByClassName('grid-item')];
    const grid = document.getElementById('grid');
    items.forEach(item => {
        item.style.gridArea = `${row} / ${col}`;
        col++;
        if(col>4){
          col=1;
          row++;
        }
    });
}

fillGrid();

CSS:

代码语言:javascript
复制
 .grid-container {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr 1fr;

    padding: 3em 2em 3em 2em;
    grid-gap: 1em;
    width: 73vmin;
    margin: auto;
    border-radius: 10px;
    border: 2px solid black;
  }

  img{
    width: 100px;
    height: 100px;
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58054418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档