用CSS Grid Shepherd技术对数据进行排序[每日前端夜话0x7B]
CodePen上的演示:https://codepen.io/Achilles_2/embed/WWypav
由于微信公众号不能引用并显示CodePen上的效果,请大家点击文末的查看原文或者复制链接并粘贴到浏览器【http://blog.yidengxuetang.com/post/201906/01/】,到我的博客上修改代码并查看效果。另外请在查看原文之前顺便点一下“在看” ^_^
为了放养这些动物,我们必须将它们围在一个公共区域内,这就是我们 元素要做的事。通过使用
display:grid
设置该栅栏,我们创建了一个网格格式化上下文【 https://www.w3.org/TR/css-grid-1/#grid-containers 】,可以在其中定义每种动物应该占据的列(或行)。
1.sheep { grid-column: 1; } 2.cow { grid-column: 2; }
通过 grid-auto-flow:dense
,每只动物都会让自己进入对应定义区域的第一个可用点。也可以用于任意数量的不同排序规则—— 只需再定义另一个列,数据就会被神奇地引导到其中。
1main 2 display: grid; 3 grid-auto-flow: dense; 4} 5 6.sheep { grid-column: 1; } 7.cow { grid-column: 2; }
CodePen:https://codepen.io/Achilles_2/embed/bJKqQG
更专业的使用 Shepherd
我们还可以通过 CSS Counters 【 https://css-tricks.com/custom-list-number-styling/ 】进一步丰富这个例子。这样我们可以计算每一列中有多少只动物,并根据这个数量来有条件地设置它们的样式。
数量查询依赖于某种类型的选择器来计算其数量 —— 这对于伪类表示法 :nth-child(An+B [of S\ ]?)
来说会很好。但它目前仅在 Safari 中可用。这意味着我们必须用 :nth-of-type()
选择器来解决这个问题。
我们需要一些新的元素类型才能实现。这可以通过 Web 组件实现,也可以将 HTML 元素重命名为自定义名称。即使这些元素不在 HTML 规范中,也同样适用,因为浏览器对未定义的标记使用 HTMLUnknownElement
,这会导致他们的表现很像一个div。该文档现在看起来像这样:
1 2 Lisa 3 Bonnie 4 Olaf 5 Jenn 6
现在我们可以访问自己的自定义元素类型了。当羊或牛的数量小于等于 10 时应用红色背景。
1sheep:nth-last-of-type(n+10), 2sheep:nth-last-of-type(n+10) ~ sheep, 3cow:nth-last-of-type(n+10), 4cow:nth-last-of-type(n+10) ~ cow, { 5 background-color: red; 6}
可以通过在父元素上使用 counter-reset:countsheep countcow;
并使用 before
选择器来定位每个元素并计数,这样就实现了一个简单的计数器。
1sheep::before { 2 counter-increment: countsheep; 3 content: counter(countsheep); 4}
你可以通过下面这个演示观察在不同的排序规则下,对动物进行添加和移除时的效果:
CodePen演示:https://codepen.io/Achilles_2/embed/YMgrpy
Grid Shepherd 还可以和任何非有序数据一起使用:
-
根据实时增长的投票数据对选民进行分组和统计;
-
根据人们的地理位置、年龄、身高等进行分组;
-
根据规则创建层次结构。
Shepherd 和可访问性
grid-auto-flow:dense
不会改变网格的 DOM 结构 —— 它只是在视觉上对包含的元素重新排序。最后一个例子中会看到副作用:按字母顺序排序时, counter
的数字被混淆了。更改 DOM 结构不仅会影响使用屏幕阅读器的用户,还会影响对标签遍历的效果。
圆满结束!
本文描述了如何将一个功能强大的 CSS 布局工具(如grid)用于不符合传统布局需求的案例。我们可以看到 CSS Grid 的布局优势和 JavaScript 的动态数据处理功能是重叠的,它可以为我们提供更多的选择和功能,是我们能够随心所欲的去渲染数据。
原文:https://css-tricks.com/using-the-grid-shepherd-technique-to-order-data-with-css/
推荐图书
下面夹杂一些私货:也许你和高薪之间只差这一张图
2019年京程一灯课程体系上新,这是我们第一次将全部课程列表对外开放。
愿你有个好前程,愿你月薪30K。我们是认真的 !
在公众号内回复“体系”查看高清大图
长按二维码,加大鹏老师微信好友
拉你加入前端技术交流群
唠一唠怎样才能拿高薪
往期精选
小手一抖,资料全有。长按二维码关注 前端先锋 ,阅读更多技术文章和业界动态。