2017-07-30 34 views
5

Tôi có một Lưới nơi các mục được tự động thêm vào, trong ngắn hạn, tôi muốn mỗi mục chiếm tất cả các cột có sẵn nếu các cột này không được lấp đầy. Ví dụ, trong bức ảnh này, tôi muốn các phần tử màu nâu và lục lam đi qua bên phải. demo
Tôi có thể làm điều đó theo cách thủ công bằng cách cho mỗi mục biết có bao nhiêu cột, nhưng tôi muốn tự động làm điều đó. Một số mã kết quả:Làm cho một mục lưới bao trùm tất cả các cột có sẵn

#wrapper { 
 
    background-color: white; 
 
    width: 96px; 
 
    height: 100%; 
 
    margin: 0 auto; 
 
} 
 

 
.half-hours { 
 
    height: 20px; 
 
    background-color: white; 
 
    border-top: 1px solid rgba(24.7%, 31.8%, 71%, 0.7); 
 
} 
 

 
#timeline_wrapper { 
 
    position: absolute; 
 
    margin: 0 auto; 
 
    margin-left: -24px; 
 
    width: 120px; 
 
    height: 100%; 
 
} 
 

 
#timeline { 
 
    float: right; 
 
    height: 100%; 
 
    width: 96px; 
 
    position: relative; 
 
} 
 

 
#events { 
 
    margin: 0 auto; 
 
    height: 50%; 
 
    width: 85px; 
 
    position: relative; 
 
    display: grid; 
 
    grid-template-rows: repeat(30, 20px); 
 
    grid-gap: 1px; 
 
    grid-template-columns: repeat(3, auto); 
 
} 
 

 
.event { 
 
    width: 100%; 
 
    height: 100%; 
 
    border-radius: 1px; 
 
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); 
 
}
<div id="wrapper"> 
 
    <div id="timeline_wrapper"> 
 
    <div id="timeline"> 
 
     <div class="9 half-hours"></div> 
 
     <div class="9.5 half-hours"></div> 
 
     <div class="10 half-hours"></div> 
 
     <div class="10.5 half-hours"></div> 
 
     <div class="11 half-hours"></div> 
 
     <div class="11.5 half-hours"></div> 
 
     <div class="12 half-hours"></div> 
 
     <div class="12.5 half-hours"></div> 
 
     <div class="13 half-hours"></div> 
 
     <div class="13.5 half-hours"></div> 
 
     <div class="14 half-hours"></div> 
 
     <div class="14.5 half-hours"></div> 
 
     <div class="15 half-hours"></div> 
 
     <div class="15.5 half-hours"></div> 
 
     <div class="16 half-hours"></div> 
 
     <div class="16.5 half-hours"></div> 
 
     <div class="17 half-hours"></div> 
 
     <div class="17.5 half-hours"></div> 
 
     <div class="18 half-hours"></div> 
 
     <div class="18.5 half-hours"></div> 
 
     <div class="19 half-hours"></div> 
 
     <div class="19.5 half-hours"></div> 
 
     <div class="20 half-hours"></div> 
 
     <div class="20.5 half-hours"></div> 
 
     <div class="21 half-hours"></div> 
 
     <div class="21.5 half-hours"></div> 
 
     <div class="22 half-hours"></div> 
 
     <div class="22.5 half-hours"></div> 
 
     <div class="23 half-hours"></div> 
 
     <div class="23.5 half-hours"></div> 
 
     <div class="24 half-hours"></div> 
 
    </div> 
 
    </div> 
 
    <div id="events"> 
 
    <div class="event" style="grid-row: 1/14; background-color: red;"></div> 
 
    <div class="event" style="grid-row: 1/12; background-color: green;"></div> 
 
    <div class="event" style="grid-row: 2/6; background-color: blue;"></div> 
 
    <div class="event" style="grid-row: 6/7; background-color: orange;"></div> 
 
    <div class="event" style="grid-row: 12/14; background-color: brown;"></div> 
 
    <div class="event" style="grid-row: 14/16; background-color: yellow;"></div> 
 
    <div class="event" style="grid-row: 14/15; background-color: cyan;"></div> 
 
    </div> 
 
</div>

grid-row cho từng hạng mục được xác định và bổ sung năng động. Mã này để thêm sự kiện tự động:

addEventToDOM(event) { 
    var wrapper = document.querySelector('#events'); 
    var eventDiv = document.createElement('div'); 
    var gridRowStart = (event.start - 9) * 2 + 1; 
    var gridRowEnd = (event.end - 9) * 2 + 1; 
    var color = availableColors.values().next().value; 
    eventDiv.className = 'event'; 
    eventDiv.setAttribute('style', `grid-row: ${gridRowStart}/${gridRowEnd}; background-color: ${color};`); 
    availableColors.delete(color); 
    wrapper.appendChild(eventDiv); 
} 
+0

@YahyaHussein họ đang bổ sung với JS, với thao tác DOM đơn giản, tôi sẽ thêm mã anyway. Điều gì sẽ thêm một lớp làm gì? –

Trả lời

0

Để thực hiện tác phẩm này, container phải biết:

  1. vị trí của mặt hàng lưới, và
  2. hay không có ô trống trên hàng trong cột liền kề (s)

Sau đó, nó có thể xác định cần bao nhiêu cột bổ sung.

Theo như tôi có thể biết, CSS Grid Specification không cung cấp chức năng như vậy.

Nó có thể được thực hiện bằng tay, như bạn đã lưu ý:

tôi có thể làm nó bằng tay bằng cách nói với từng hạng mục có bao nhiêu cột để span, nhưng tôi muốn làm điều đó tự động.

Dường như bạn sẽ cần một tập lệnh để làm cho nó tự động diễn ra. thông tin

thêm:

Các vấn đề liên quan