【发布时间】:2017-12-14 10:53:58
【问题描述】:
我有一组通过 CSS 网格布局尽可能“自动”排列的 div 磁贴;我的最终想法是,即使我不知道有多少瓷砖,它们的大小和位置都会正确。这工作正常。
现在,我希望将任何被点击的图块的面积加倍。据我所知,这意味着增加此图块的跨度:
grid-row: span 2;
grid-column: span 2;
如果我单击不在最右侧列中的任何图块,我对结果感到满意。当最右边的图块展开时,它们会被包裹到下一行。
有没有什么办法可以强制这些瓦片向左展开,让其他非活动瓦片被包裹起来?
Codepen 示例here
$('div.tile').click(function() {
$('div.tile').not(this).removeClass('chosen');
$(this).toggleClass('chosen');
/*
Attempt to find current placement, to see if we could change the span rules based on results. Probably disregard.
*/
var colCount = $('div.wrapper').css('grid-template-columns').split(' ').length;
console.log(colCount);
var placement = $(this).css('grid-row');
console.log(placement);
});
body {
margin: 0;
padding: 0;
background-color: #eee;
}
.wrapper {
display: grid;
margin: 18px;
grid-template-columns: repeat(auto-fill, minmax(252px, 1fr));
grid-auto-rows: 286px;
grid-gap: 18px;
}
.tile {
position: relative;
background-color: #eee;
background-color: #149;
text-align: center;
box-shadow:
0 3px 12px rgba(0,0,0, 0.15),
0 4px 6px rgba(0,0,0, 0.25);
}
.tile.chosen {
grid-row: span 2;
grid-column: span 2;
}
.tile.chosen::before {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
content: " ";
background-color: rgba(255,255,255,.2);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapper">
<div class="tile">A</div>
<div class="tile">B</div>
<div class="tile">C</div>
<div class="tile">D</div>
<div class="tile">E</div>
<div class="tile">F</div>
<div class="tile">G</div>
<div class="tile">H</div>
<div class="tile">I</div>
</div>
【问题讨论】:
-
我最终选择了 Michael 下面提到的 Javascript (jQuery) 路线。如果有人偶然发现这个问题,我的 codepen 链接会更新。
标签: javascript jquery css css-grid