期末监考那天,端期我站在机房最后一排,末考看着屏幕上密密麻麻的试题代码。有个学生把display: flex写成了display: flexbox,端期页面瞬间塌成一条竖线。末考他盯着屏幕愣了三秒,试题然后默默删掉重写。端期那一刻我突然明白,末考web前端期末考试考的试题不是知识点,是端期你在浏览器面前认不认怂。
试卷第一题是末考经典的盒子模型计算。题目给了一个div,试题宽度200px,端期内边距20px,末考边框5px,试题问实际占位多少。全班三十个人,有十二个写了200px。他们记住了box-sizing的默认值是content-box,却忘了border和padding会往外撑。这题我每年都出,每年都有人掉坑。不是他们笨,是教材上那个示意图太干净了,干净到让人以为浏览器真的会按图索骥。
第二题考flex布局。给了三个子项,要求水平居中并等间距分布。有人写了justify-content: space-around,有人写了space-between,还有人写了space-evenly。这三种写法的区别,光看文档永远记不牢。但如果你真在手机上划过三个按钮,你会发现space-around左右两边留白只有中间的一半,space-evenly才是真正均匀。浏览器不会骗你,它只是把数学事实摆在你面前。
还有道题是事件委托。一个ul列表,点击li弹出对应文字。有个学生写了五个addEventListener,分别绑在每个li上。功能没错,可当我把ul里动态追加到五十个li时,他的页面卡了一下。而另一个用事件委托的同学,只监听ul一次,性能对比肉眼可见。考试里我不会让你跑五十个节点,但真实项目里,用户的每一次点击都在替你打分。
最让我意外的是最后那道开放题:用原生JS实现一个简单的轮播图。大部分人都写了setInterval配合transform位移。有个女生没写位移,她每次直接替换img的src,然后加了个fade-in的CSS动画。效果看起来一样顺滑,代码却短了三分之一。我批卷时在她旁边画了个星号,不是因为她用了最优雅的方案,而是她明白考试题没规定不能换图片源。这种“绕路”的思维,恰恰是前端最稀缺的——规范是死的,页面是活的。
考完有个男生追出来问我,老师,我写了position: absolute但父元素没加relative,结果定位跑到页面左上角去了,这题扣几分。我说扣两分,但你知道吗,你在调试工具里拖那根参考线的时候,已经比任何分数都值钱了。前端这行,错误就是最好的教材。你踩过的每一个坑,都会变成你以后写代码时的肌肉记忆。
改完卷子,我统计了一下,全班平均分72.5。不高不低,像极了真实的前端生态——有人精通布局,有人擅长交互,有人只会复制粘贴然后祈祷别出bug。但期末考试只是一张纸,浏览器才是真正的考官。它不在乎你背没背过flex的语法,只在乎你写的代码能不能让它听话地渲染出像素。
最后一题我给了那个换src的女生满分。不是因为她的答案标准,而是因为她让我看到,当规则没规定“必须怎么做”的时候,有人愿意跳出惯性想一个更轻的解法。这种能力,期末考试考不出来,但工作三五年后,它会让你和那些只会堆框架的人拉开差距。