当前位置: 首页 > Web前端 > CSS

使用CSS网格排序数据ShepherdTechnique

时间:2023-03-31 00:20:45 CSS

牧羊人非常擅长照料他们的羊群,为牛群带来秩序和结构。即使有数百只毛茸茸的动物,牧羊人仍会在一天结束时将它们全部带回农场。对于程序员来说,我们在处理数据的时候,通常并不知道数据是否经过了正确的过滤或者排序。尤其是当你想按照稍微复杂一点的规则在页面上展示数据的时候,这个就比较痛苦了。GridShepherd是一种使用CSSGrid来帮助定位和排序的技术,完全不需要JavaScript的参与。这是本文要解决的问题。GridShepherd技术可以为我们的数据赋予我们需要的顺序和结构,让我们更好地理解它的使用方式和应用场景。让我们再深入一点。在JavaScript中排序我们首先对农场中动物的无序列表进行排序。想象牛羊在农场放松。我们可以使用Array.prototype.sort方法以编程方式对它们进行排序和分组,并将它们显示在页面上:'绵羊'},{name:'Fink',animal:'sheep'},{name:'Olga',animal:'cow'},]letsortedAnimals=animals.sort((a,b)=>{if(a.animalb.animal)return1return0})console.log(sortedAnimals)/*返回:[{name:'Elga',animal:'cow'},{name:'Olga',animal:'cow'},{name:'Liam',animal:'sheep'},{name:'Fink',animal:'sheep'}]*/认识GridShepherdGridShepherd方法可以不依赖JavaScript实现数据的排序,只依赖CSSGrid本身。下面的结构与上面的JavaScript对象数组完全相同,但以DOM节点表示。

Edna
Liam
Jenn
Fink
CodePen上的演示:https://codepen.io/Achilles_2...为了饲养这些动物,我们必须将它们圈在一个公共区域,这就是我们的
元素会做。通过使用display:grid设置此栅栏,我们创建了一个网格格式化上下文,我们可以在其中定义每个动物应占据的列(或行)。.sheep{网格列:1;}.cow{网格列:2;使用grid-auto-flow:dense,每只动物都会让自己进入对应于定义区域的第一个可用点。也可以与任意数量的不同排序规则一起使用-只需定义另一列,数据就会神奇地导入其中。主显示:网格;grid-auto-flow:dense;}.sheep{grid-column:1;}.cow{网格列:2;}CodePen:https://codepen.io/Achilles_2...更专业使用Shepherd我们可以用CSSCounters进一步丰富这个例子。这样我们就可以计算每列中有多少动物,并根据该数字有条件地设置它们的样式。数量查询依赖于某种类型的选择器来计算它们的数量——这与伪类表示法:nth-child(An+B[ofS\]?)会很好。但它目前仅在Safari中可用。这意味着我们必须使用:nth-of-type()选择器来解决这个问题。我们需要一些新的元素类型来实现这一点。这可以通过Web组件或通过将HTML元素重命名为自定义名称来实现。即使这些元素不在HTML规范中,这同样适用,因为浏览器将HTMLUnknownElement用于未定义的标签,这导致它们的行为很像div。文档现在看起来像这样:LisaBonnieOlafJenn现在我们可以访问您自己的自定义元素类型也是如此。当绵羊或牛的数量为10或更少时,应用红色背景。绵羊:第n个最后类型(n+10),绵羊:第n个最后一个类型(n+10)~绵羊,牛:第n个最后一个类型(n+10),牛:第n个-last-of-type(n+10)~cow,{background-color:red;}你可以使用counter-reset:countsheepcountcow;在父元素上并使用before选择器定位每个元素并计数,这样就实现了一个简单的计数器。sheep::before{counter-increment:countsheep;内容:计数器(countsheep);可以使用下面的demo观察在不同排序规则下添加和移除动物的效果:并根据实时增长的投票数据计算选民人数;按地理位置、年龄、身高等对人进行分组;按规则创建层次结构。Shepherd和accessibilitygrid-auto-flow:dense不会改变网格的DOM结构——它只是在视觉上重新排列包含的元素。在最后一个示例中可以看到副作用:按字母顺序排序时,计数器的数字会混淆。更改DOM结构不仅会影响使用屏幕阅读器的用户,还会影响对选项卡遍历的影响。完美完成!本文介绍如何在无法满足传统布局需求的情况下使用强大的CSS布局工具(如grid)。我们可以看到,CSSGrid的布局优势与JavaScript的动态数据处理功能重叠,可以为我们提供更多的选择和功能,让我们可以随心所欲地渲染数据。