cari

Rumah  >  Soal Jawab  >  teks badan

Campurkan susun atur grid dengan kedudukan lajur dan lajur tetap

Saya mempunyai HTML berikut dengan grid CSS

<div id="grid">
    <div class="main-item">Main</div>
</div>
#grid {
    display: grid;
    grid-template-columns: repeat(5, auto);
    text-align: center;
}

#grid > * {
    border: 1px solid blue;
    padding: 20px;
}

#grid > .main-item {
    grid-row: 3;
    grid-column: 3 / 5;
    background: rgba(0, 0, 0, 0.2);
}

Bahagian penting ialah .main-item mempunyai kedudukan tetap dalam grid.

Saya kini menambah 25 sel pada grid.

const grid = document.querySelector("#grid");

for (let i = 0; i < 25; i++) {
    const item = document.createElement("div");
    item.innerText = i.toString();
    grid.append(item);
}

Masalahnya ialah saya mahu unsur-unsur ini mengabaikan kedudukan .main-item 的位置(将其视为不存在)。不过,CSS 目前已对此进行了纠正,并使元素围绕 .main-item (layan ia seolah-olah ia tidak wujud). Walau bagaimanapun, CSS pada masa ini membetulkan perkara ini dan menjadikan elemen mengalir di sekeliling

. Saya mahukan tingkah laku sekunder berikut:

style.gridRowstyle.gridColumnSaya boleh membetulkannya dengan menetapkan

dalam JavaScript

item.style.gridRow = (Math.floor(i / 5) + 1).toString();
item.style.gridColumn = ((i % 5) + 1).toString();

Adakah terdapat cara untuk melakukan ini tanpa menyediakan semua elemen lain dalam JS? Adakah terdapat CSS untuk menghalang elemen tetap daripada menjejaskan pembetulan aliran?

Pautan Pen Kod🎜
P粉492959599P粉492959599441 hari yang lalu456

membalas semua(1)saya akan balas

  • P粉440453689

    P粉4404536892023-09-16 11:55:19

    Anda boleh memberikan grid kedudukan relatif dan meletakkan item grid khusus secara mutlak.

    const grid = document.querySelector("#grid");
    for (let i = 0; i < 25; i++) {
        const item = document.createElement("div");
        item.innerText = i;
        grid.append(item);
    }
    #grid {
        display: grid;
        grid-template-columns: repeat(5, auto);
        text-align: center;
        position: relative;
    }
    
    #grid > * {
        border: 1px solid blue;
        padding: 20px;
    }
    
    #grid > .main-item {
        position: absolute;
        left: 0;
        right: 0;
        grid-row: 3;
        grid-column: 3 / 5;
        background: rgba(0, 0, 0, 0.2);
    }
    <div id="grid">
        <div class="main-item">Main</div>
    </div>

    balas
    0
  • Batalbalas