通关游戏巩固css选择器的使用

422 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第8天,点击查看活动详情

练习/游戏地址:flukeout.github.io/

源码地址:github.com/flukeout/cs…

游戏玩法

游戏共计32关,每一关都要利用给出的提示,利用选择器来选择相应的道具。

要选择的道具,不仅有文字提示(英文),且道具会左右摇摆,较为直观。

如果选择器书写错误,编辑器会震动;选择的是多个道具时,某个道具写错,对应的道具会震动。

如果选择器书写正确,编辑器里的代码会向上移动,进入下一关。

鼠标悬浮在桌上的道具时,会显示道具的标签,以及在源码里高亮标签。

游戏里,道具的设计非常巧妙,整个div是一张桌子。桌子上从左往右放着一些盘子,水果。

这些盘子和水果都是桌子的子级。

同时,盘子里的水果是盘子的子级。

如果盘子带花纹,表示这个盘子具有特定的class。

盘子里的水果或直接摆放在桌上的水果,可以被贴上标签,表示这个给某人吃的。这里的标签表示html里的属性。

整个设计非常巧妙。

比较可惜的是,通关后,只能看到进度更新了,但是通关的代码却没有被保存下来。(所以其实我做了2遍)

练习过程,巩固了选择器的使用。尤其是伪类,伪类是描述特定状态下的元素,冒号前是被修饰的元素。

游戏界面

左侧是题目和编辑器,右侧是学习/提示,游戏进度。

另外支持跳转到特定关卡。

下方蓝色高亮部分是输入区,也是唯一输入的地方。无论是选择器,还是关卡数。

可以结合之前的青蛙游戏,一起学习下类似这种通过游戏类学习编码的网站的设计与实现。

通关记录

1/32 A

2/32 A

3/32 #id

4/32 A B

5/32 #id A

6/32 .classname

7/32 A.className

8/32 Put your back into it

9/32 A,B

10/32 *

11/32 A*

12/32 A+B

下一个同级

13/32 A~B

后面的所有同级

14/32 A>B

第一个子代

15/32 :first-child

注意不要写成:plate:first-child,应是orange:first-child,表示第一个橘子。

伪类修饰冒号前面的元素。表示选择特定状态的元素,冒号前面是具体的元素。

16/32 :only-child

这题有两种解法:

法一

法二

因为只有一个苹果在盘子里,而黄瓜必须指明是在白色盘子里的。

17/32 :last-child

这题容易出错,

pickle.small:last-child不行?

18/32 :nth-child(A)

19/32 :nth-last-child(A)

在github,开发者特别提到该题容易让人困惑。

容易出错,写成bento:nth-last-child(2)倒数第三个,但是不是按类型算的倒数第二个,而是整体计算的倒数第三个。

20/32 :first-of-type

21/32 :nth-of-type(A)

22/32 :nth-of-type(An+B)

这里的n从0开始数

23/32 :only-of-type

要有父元素,第一个盘子里有两个苹果,所以不会选中。只会选中只有一个苹果的第二个盘子里的苹果。

24/32 :last-of-type

25/32 :empty

26/32 :not(x)

27/32 [attribute]

28/32 A[attribute]

29/32 [attribute="value"]

30/32 [attribute^="value"]

31/32 [attribute$="value"]

32/32 [attribute*="value"]

Ps:由于html的根标签是div,所以选择器省略了处于div下。