javascript – 在CSS网格布局中填充空单元格
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 在CSS网格布局中填充空单元格,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5079字,纯文字阅读大概需要8分钟。
内容图文
我有一组div瓷砖,我通过CSS网格布局尽可能“自动”排列;我最后的想法是,即使我不知道有多少瓷砖,它们都可以调整大小并正确放置.这工作正常.
现在,我希望将所点击的任何图块的区域加倍.据我所知,这意味着增加这个瓷砖的范围:
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>
解决方法:
使用CSS网格自动放置
CSS grid-auto-flow属性控制自动放置的网格项在网格中的放置方式.
此属性有三个可能的值:
>行(默认值)
>专栏
>密集
对于密集,自动放置算法使未占用的单元格填充适合的项目.
这是你的代码,网格自动流:网格容器密集:
$('div.tile').click(function() {
$('div.tile').not(this).removeClass('chosen');
$(this).toggleClass('chosen');
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;
grid-auto-flow: dense; /* NEW */
}
.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>
从规格:
07001
Grid items that aren’t explicitly placed are automatically placed into
an unoccupied space in the grid container by the auto-placement
algorithm.
grid-auto-flow
controls how the auto-placement algorithm works,
specifying exactly how auto-placed items get flowed into the grid.
row
The auto-placement algorithm places items by filling each row in turn, adding new rows as necessary. If neither
row
norcolumn
is provided,row
is assumed.
column
The auto-placement algorithm places items by filling each column in turn, adding new columns as necessary.
dense
If specified, the auto-placement algorithm uses a “dense” packing
algorithm, which attempts to fill in holes earlier in the grid if
smaller items come up later. This may cause items to appear
out-of-order, when doing so would fill in holes left by larger items.
使用CSS网格定义的放置
CSS Grid规范提供了许多用于调整和定位网格项的属性和方法.因此,如果您不必依赖自动放置,请使用已定义的放置以获得更多控制权.
grid-container {
display: grid;
grid-template-rows: repeat(4, 25%);
grid-template-columns: repeat(4, 25%);
grid-gap: 5px;
width: 400px;
height: 400px;
}
[left]:hover {
grid-column: -1 / -3;
grid-row: 1 / 2;
background-color: orange
}
[right]:hover {
grid-column: 1 / 3;
grid-row: 2 / 3;
background-color: orange
}
[down]:hover {
grid-column: -1 / -2;
grid-row: 2 / 4;
background-color: orange
}
[up]:hover {
grid-column: 3 / 4;
grid-row: -4 / -2;
background-color: orange
}
grid-item {
background-color: lightgreen;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
}
<grid-container>
<grid-item></grid-item>
<grid-item></grid-item>
<grid-item></grid-item>
<grid-item left>HOVER<br>to go left</grid-item>
<grid-item right>HOVER<br>to go right</grid-item>
<grid-item></grid-item>
<grid-item></grid-item>
<grid-item down>HOVER<br>to go down</grid-item>
<grid-item></grid-item>
<grid-item></grid-item>
<grid-item up>HOVER<br>to go up</grid-item>
<grid-item></grid-item>
</grid-container>
内容总结
以上是互联网集市为您收集整理的javascript – 在CSS网格布局中填充空单元格全部内容,希望文章能够帮你解决javascript – 在CSS网格布局中填充空单元格所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。