前端工程师高手说说CSS学习中的瓶颈

article/2025/9/12 22:29:46

一、何为瓶颈?

“瓶颈”指瓶子的颈部,相对狭窄。这是很传神的一个词,因为狭窄,因此难以突破;但是,一旦突破了,就是广阔天空(偌大瓶身)!

小弟不才,凑合画了个瓶颈示意图,如下:
瓶颈示意图 张鑫旭-鑫空间-鑫生活

图中,A → B → C → … 表示进阶,即相关技能的提升;①②③④则表示各个阶段要进入的瓶颈!这个适用于各行业,各学派。

杨过的武功学习与瓶颈
我们都看过《神雕侠侣》,为便于理解,我就以“神雕大侠”杨过的武功成长经历解释上图的含义:

各进阶阶段

阶段A

武功杂:蛤蟆功,玉女剑,打狗棒,弹指神通

阶段B

武功一流:整天蛇胆嗑药,玄武重剑

阶段C

武功顶尖:勤学苦练,木剑之术;自创神功,黯然销魂掌

各阶段瓶颈

瓶颈①

无压力:天资聪慧+主角光环,因此,一些杂七杂八功夫入门迅速

瓶颈②

雕兄:该瓶颈突破全靠雕兄。蛇胆嗑药治伤增内力,武功引导与陪练

瓶颈③

自身:海边多年苦练,内功积累。自身观点想法转变(武功都是人创造的,我也可以……),自创掌法

瓶颈④

小龙女:野史外传,小龙女一起阴阳之类,神一般的存在……

您可以对照您目前CSS或JS的学习,您觉得您目前突破的几个学习瓶颈,目前在第几阶段?

二、只缘身在此山中

CSS的学习入门很容易,也可以说CSS学习的第①个瓶颈很大(见上图①处瓶口),以至于不能称为“瓶颈”。可能只要1年甚至半年的时候,我们就能根据设计图迅速成型页面,能熟练使用些CSS hack,这个阶段我们的成长很快,只要有页面写或只要四处转转,我们每天都能汲取新知识。如果用二维曲线表示就是:
CSS学习快速增长曲线 张鑫旭-鑫空间-鑫生活

满瓶不动半瓶摇,这个阶段实际上是CSS非常初级的阶段,也是广大页面仔们最为浮躁,最自以为是,最觉得CSS不过如此的阶段!所学越多越知所知甚少,那些成天叫嚣的人往往半吊子居多。

所以,我这里有必要提个醒,睡在冻床上不知冷热的“牛人”们,小看CSS的结果就是你丫直接在高速公路上被淹死!

不过,大多数这个阶段的同行们都清楚,自己还有很多东西要学的。但问题在于,每天也努力工作了,也去花时间学习了,只是似乎只是纯粹经验的积累,没有学到多少实质性的东西。这就是学习的瓶颈!

拿“如月”同学举例:工作是很认真的,页面也是能写的,前端书籍也买了很多,技术博客也会逛,前端技术论坛也参加。但是最后的效果呢?在我看来,还是那个层次,没有实质性的提高!为什么呢?

泛泛的经验积累式学习,看不到自己技术的瓶颈所在,总在同一层次添砖加瓦。就跟杨过的A阶段一样,总是不停地学习新功夫,但都不是很深入很牛逼,结果,连对付霍都都吃力。

广度与深度
任何一门学科都有其广度以及深度。在CSS的A级阶段,显然所学基本上是扩展自己知识面的广度:各个CSS属性熟悉,各个基本盒模型,各个声明在不同浏览器下的表现熟悉,兼容性问题如何修复熟悉等。然而,CSS的属性就那么多,如果只从了解每个CSS属性名称、属性值上来看,肯定会有一天达到饱和的。此时,我们就会觉得似乎没有什么新的东西可学了,CSS的那点东西我都知道了;似乎工作就成了每天的重复。这就是瓶颈期!

看看这张图:
A到B阶段以及瓶颈 张鑫旭-鑫空间-鑫生活

我们很自然想到,要从A到B阶段,只要向下,向深度发展就可以了。所以,如果您觉得现在CSS这块学到的东西不多了,试试向垂直方向学习。

补充:
1. 有时候,如果我们CSS的基础足够得扎实与强大,我们会自热而然进入到B阶段,但这种完全经验积累的进阶学习需要很长的时间周期。
2. 如果没有一定的CSS基础以及经验做支撑,我们是无法进入B阶段的。
3. 深度才是你的核心竞争力。深入的细节掌握,深入的机制理解等,这些都是要下苦功才能掌握的,这是你有别于其他千千万万自认为会写页面的CSSer们的地方!

瓶口间的跳跃
CSS3的出现似乎让一些CSSer们的学习有了新的方向:CSS2.1中的那些CSS代码我闭着眼睛都能敲出来,实在太无趣了,终于出来个小三 – CSS3来调剂生活!

然而,从CSS2到CSS3的学习增加的只是一点广度的知识,多点时间,谁都可以达到你这种程度(学习门槛低啊!)。在我看来,无非就是从一个瓶口跳到另外一个稍显时髦的瓶口而已。

视角的局限
武侠中,主角们的进阶似乎都离不开所谓的“高人指点”;就算现实生活中,我们的人生也可能因为一句话而发生重大改变。那“指点”的是什么呢?“改变”的又是什么呢?——看待问题的方式以及角度!据说阿里有个倒立文化,换个视角看问题,会得到不同的答案。

我们很多人找不到学习的突破口,可能就是由于视角的问题。

我们往往不是这样子看的:
A到B阶段以及瓶颈 张鑫旭-鑫空间-鑫生活

而是从上往下,只看到瓶口——
瓶颈在哪里? 张鑫旭-鑫空间-鑫生活

看不出水有多深,看不到瓶颈在哪里!想起了一部美剧——《迷失》,想起了一句古话——“只缘身在此山中”。

三、瓶颈在哪?

我先问几个问题,看看你是否能够回答上来?

  1. dl, dt, dd三个标签浏览器默认margin值多少?是否有标签默认文字粗体?
  2. line-height:150%和line-height:1.5的区别是?
  3. float为何会让外部容器高度塌陷?这是bug?
  4. vertical-align的表现为何在IE7, IE8, IE9下表现不尽相同?其中的渲染机制是?

以上问题可以大致判别你是A阶段还是B阶段。倒不是问题本身,而是问题所指的类别。

问题1, 2表示“深入的细节掌握”;3, 4表示“深入的机制理解”。再往后可能就是“网页大事,为我所控”,“天下页面,听我号令”,这要C阶段了,先不予讨论。

换句话说,您现在的瓶颈可能在于“细节掌握不够”、“机制等理解不够”。

关于细节
有人可能会反问:我为什么要知道dl, dd, dt标签默认的margin值大小?我一般都是直接在CSS reset中设置:

body,h1,... ,dl,dt,dd,...,th,td { margin:0; padding: 0; }

你看,淘宝网首页就是这么干的(global-min.css)!从实际应用来看,我无需关心!
淘宝首页的CSS reset文件 张鑫旭-鑫空间-鑫生活

很多事情,如果你足够了解之,就能灵活掌控之!即所谓的驾驭能力。CSS细节了解,有助于你更好地驾驭CSS, 而不是被CSS调试,被浏览器劫持。

3~4两的大闸蟹虽然也有人要,但是,多啊,不值几个钱;但是半斤以上的大闸蟹的单价就要翻番。
盲从CSS reset的人也有人要,但是,多啊,不值几个钱;但是,知根究底的人这身价就要翻番了。

如果你有自己想法,知根知底,你可能就是这样做reset的:

body, h1, ..., dl, dd { margin: 0; }

dt标签的reset只是白白浪费,增加页面渲染负荷;padding属性值仅极少标签(ol, ul)有,其他标签无需浪费渲染重新设置。
//zxx: 对于淘宝首页的渲染速度我就不说什么了

有不少人曾问我:“你的那个CSS架构我用了,很不错,使用很方便。但是,我经常CSS库的类名有5个甚至更多!而你写的页面很少会这样,为什么呢?”

<span class="db l h24 lh24 b">注意:</span>我是……

如果你对CSS细节足够掌握,可能您的使用就会是这样:

<strong class="l lh24">注意:</strong>我是……

这就是我说过的,如果页面开发工程师对CSS属性理解不够透彻,我的这种架构对其而言反而会略显吃力!

关于理解
你是否有这样的调试经历:尼玛IE(x)浏览器下出了个奇怪问题,哥哥我不知道原因啊原因啊原因,然后很苦逼地把觉得有可能的CSS属性一个一个试验——改一个刷一下,看看有没有变好。

唉,可怜的娃,宝贵的青春就这么蹉跎掉了,省下来和前台美女MM调调情也比这强多了~~

为什么我们需要深入理解CSS的一些表现?

1. 所谓“对症下药”,你要先知道这个症,这个根才可以。同样,当我们对CSS的底层表现有一定的理解与认识的时候,遇到一些看似奇怪的问题,我们可以一针见血,一语中的,分分钟搞定,然后,聊天,喝茶,把妹~~
2. 所谓“发明创造”,你要先知道其基本原理,工作机制。同样,当我们面对CSS的一些特殊需求的时候,一些看似蛋疼的问题,我们可以发挥我们的创造性思维,创建一个属于你的首创新方法,然后卖萌,邀功,得瑟~~
例如,我之前折腾过的inline-block两端对齐等。

理解的对与错
每个人的成长经历不同,大脑擅长处理的东西也不同,导致其看待与理解事物的方式也不同。因此,对于同一CSS表现的差异,每个人的理解都不同。

一旦有所差异,就有所谓的“对错”之争。估计不少人会拿《CSS权威指南》上的东西说事:你那种理解是错误的,CSS权威指南上说……或W3C官方文档解释说……

我大学电路老师最后一节课专门讲了她的科学观:何为科学?能够自圆其说,自成体系即是科学。中医算科学吗?算!因其有一套自己解释畅通的理论体系。

同样,对于CSS的理解,我个人一直认为什么对错的争执等都是没有意义的。如果你的解释可以自圆其说,自成体系,且应用无误,哪怕你的解释与什么规范啊权威啊八竿子都打不着,别人压根理解不了,你都是对的,OK的!

拘泥只会限制自身的创造力以及认知能力。火影的世界算是世界吗?是,自圆其说,自成体系!海贼王的世界算是世界吗?是自圆其说,自成体系。

因此,如果你是设计出身,或文学出身的。什么复杂逻辑,深奥解释理解不了,你大可摒弃之,用你自己的世界去解释其表现,你的感性思维以及艺术情怀只会让这个世界变得更精彩!那些自以为是,抱残守缺的杂碎们就不用鸟他们,让他们随着时间消逝去吧~~

好比面对“浮动元素会让外部高度塌陷的原因?”这个问题,你可以这样解释:

  • 浮动是敏感词
  • 浮动是海市蜃楼
  • 浮动是个不孝子,会让爸爸颜面无存,显得很矮小
  • 浮动是个魔鬼,和绝对定位是兄弟,本都属于天上人
  • 浮动是中国,讲究面子工程
  • 浮动是中国股市,吸引屁民跟在左右,本身就是个泡沫
  • ……

只要这类解释能够把其他所有的CSS表现都解释地通,成为体系,都是正确且深入的理解。

四、如何突破?

知道问题在哪里,其实已经解决了一大半。下面的问题如何实践了!

杨过16年前就开始意识到要可以自创武功(类似于我们自创CSS实现),但是,最终实现确实N年以后,不断的感悟以及练习才得以成功。

即使你再天才(杨过够天才吧),机遇够神奇(杨过经历够神奇吧),也也是要会很多功夫和精力才能到达另外一个层次的。只是别人可能30年的,你只要20年而已(黄药师说过,杨过20岁的武功修为其30岁才达到)。

我想了想,关于突破瓶颈的建议我有三个:戒骄戒躁、分享讨论、打破重组。

关于戒骄戒躁
如果有人当面说你:“旺财啊,你这个人有时候比较浮躁啊!”你可能心里或嘴上就嘀咕了:“有吗?我不觉得啊。我做事很认真的啊!”

究竟如何呢?人们常说当局者迷旁观者清。

假设你看到了一个用法:

vertical-align:-2px;

你的反应以及做法会是?
A. 我擦,原来vertical-align还支持数值啊,学习了!
B. 哟,vertical-align支持数值?我去查查~~呀,果然~~
C. 切,大惊小怪,我早就知道vertical-align支持数值,包括负值了,百分比值~~
D. 阿拉,我要自己试验下,新建个HTML页面,做个简单demo,看看兼容性什么的~~
E. 啊,什么,我刚扫视了,没注意到~~

对应下表:

选择项浮躁程度原因
A比较浮躁用法合理性未作验证,直接接收
B略微浮躁快餐式的接收,接收证明的观点,但未自己验证,可能会遗留真实的使用细节
C浮躁自以为是是学习的大忌,看上去小小的属性其实水很深
D不浮躁实践式的验证其实是比较繁琐,费时费力的,浮躁的人都是避免的,沉寂的人才能收心研究之
E相当浮躁好吧,如果这里都能pass掉,我就没法再说什么了~~~

A, B的行为实际还是只停留在表层,D行为似乎蛮靠谱的,但是,实际上,你想比别人走得更远,更快突破瓶颈,仅仅是将代码再实践一篇是不够的。我们还需要思考,对比以及整理、分享等。

如果是我,我会更近一步,对比思考:vertical-align:-2px;margin-bottom:-2px;之间有什么差异,我会试验之~~

实际对比我会发现差异不大,但是我不会认为其没有差异,因为高中大学做实验很基本的一条就是多个条件的实践,于是,我会使用vertical-align:-200px;margin-bottom:-200px;再做一次验证(当然,会设置其他用来观察的条件——背景色,边框或其他元素),结果,差异非常明显地出来了(这里先忽略IE6/IE7下margin-bottom负值极限bug):
vertical-align会增加容器的高度,而margin-bottom负值则是减小!

您可以狠狠地点击这里:vertical-align/margin-bottom负值的差异demo

vertical-align负值与margin-bottom负值的差异demo截图 张鑫旭-鑫空间-鑫生活

然后,我可能会整理,然后……(接下面)

关于分享讨论
分享看似把东西授予他人,自己做了吃力不讨好的事情。而实际上,准备分享内容以及在分享的过程中,你会提炼总结思考你要分享的东西,这对于学习而言是非常重要的,这个阶段好比模具成型,鱼入网袋,妹子推倒。

讨论的作用也很大,别人或中肯或傻逼的批评以及建议都会让你发现你知识上的不完善或不准确之处,群众的眼睛是雪亮的。

还是说我自己,接上面,如果是我,我可能就会把vertical-align负值与margin-bottom负值的差异整理成一篇文章发布出来(实际上是不会的,因为内容太少,质量档次不够,一般只会穿插在其他文章中,比如本文)。在发布书写制作demo的过程中,我肯定会有观点的提炼等,我就会发现一些新的东西,比方说IE6/IE7的margin-bottom负值数值超过一定限度时候的兼容性问题。

在写文章的时候,我可能会使用一些激烈的措辞,激发与他人的互动与讨论,从别人的评论中查漏补缺,获取新的知识。

当然,每个人分享的方式可能不一样。我因为嘴皮子的表达欠佳,因此,大多借助文章这个渠道分享与讨论。传播技术的同时自身也得到提高,如此一举两得的事情,何乐而不为呢!而你呢?如果你擅长交际组织什么的,分享会什么的,都是很赞的方式!

关于打破重组
华为貌似做过这样的事情,所有的老员工一律辞职,自己再重新去应聘。而且,好像类此的操作不只做了一次,“始作俑者”为任正非老先生。这种打破重组的效果如何呢?据说奇效,当年华为业绩可见一斑。

在突破瓶颈的时候,我们也可以,而且建议这么尝试。限制于惯性思维中,是很难突破瓶颈的。我们可以将自己过往的一切全盘否定,然后重新再来,你可能就会看到另外一个自己。

举个例子,如果你一直都是固定布局的,自己在心里默念三遍:固定布局就是个屎,我要投奔流体布局!如果你一直都是流体布局的,自己心里也默念三遍:流体布局就是个屎,我要投奔固定布局!如果你固定/流体布局兼修,自己心里也默念三遍:什么固定/流体布局都是屎,我要投奔时髦的响应布局!

放开自己,拥抱未来,拥抱变化。舍弃过往,接受新颖的架构,思想,理念。你就会发现,很短的时候,自己有了质地提升。

其中玄奥我是很难道明,要看你自己能不能体会出来了!

五、事在人为

其实,广大页面屌丝们并不畏惧那些学习能力强的人,畏惧的是那些学习能力强,同时,尼玛学习又拼命的人。

页面仔们,扪心自问下:我每天几点下班?我每天下班后都干嘛了?我有专门花空余时间深入理解学习CSS的一些东西吗?我能够连续坚持数月吗?

最后,我只说一句话:“吃得苦中苦,方为人上人”。


http://chatgpt.dhexx.cn/article/r0y2rfdl.shtml

相关文章

线上服务 CPU 100%?一键定位 so easy!

转自&#xff1a;大数据之路&#xff0c; 链接&#xff1a;my.oschina.net/leejun2005/blog/1524687 背景 经常做后端服务开发的同学&#xff0c;或多或少都遇到过 CPU 负载特别高的问题。 尤其是在周末或大半夜&#xff0c;突然群里有人反馈线上机器负载特别高&#xff0c;不熟…

线上服务 CPU 100% ?一键定位 so easy!

来源&#xff1a;my.oschina.net/leejun2005/blog/1524687 背景 经常做后端服务开发的同学&#xff0c;或多或少都遇到过 CPU 负载特别高的问题。 尤其是在周末或大半夜&#xff0c;突然群里有人反馈线上机器负载特别高&#xff0c;不熟悉定位流程和思路的同学可能登上服务器一…

牛逼的故障诊断工具!秒级定位线上问题

背景 经常做后端服务维护或开发的同学&#xff0c;或多或少都遇到过CPU 负载特别高的问题。尤其是在周末或大半夜&#xff08;有没有同感&#xff0c;平时不出问题&#xff0c;一到休息或下班时间频繁出故障&#xff0c;有的文末点个在看示意一下&#xff09;&#xff0c;突然群…

推荐一款神器,助你秒级定位线上问题!

来源&#xff1a;my.oschina.net/leejun2005/blog/1524687 背景 经常做后端服务开发的同学&#xff0c;或多或少都遇到过 CPU 负载特别高的问题。 尤其是在周末或大半夜&#xff0c;突然群里有人反馈线上机器负载特别高&#xff0c;不熟悉定位流程和思路的同学可能登上服务器一…

最牛逼的故障诊断工具!秒级定位线上问题

点击下方公众号「关注」和「星标」 回复“1024”获取独家整理的学习资料&#xff01; 背景 经常做后端服务维护或开发的同学&#xff0c;或多或少都遇到过CPU 负载特别高的问题。尤其是在周末或大半夜&#xff08;有没有同感&#xff0c;平时不出问题&#xff0c;一到休息或下班…

WheelView地区选择三级联动详解

1. 效果 最近需要做一个地区选择的功能&#xff0c;但是在网上和github上找了很久都没找到满意的&#xff0c;然后朋友推荐了一个给我&#xff0c;我花了点时间把代码大致看懂并改成我想要的&#xff0c;并写上我的理解。效果如图&#xff1a; 2. 注意 a. 首先我们要明白…

如何用美剧真正提升你的英语水平————转自厦大口译的博客

看到很多童鞋讨论有关美剧学习英语到底有没有用&#xff0c;以及用哪部美剧练习&#xff0c;我在这里想说这只是一个参考&#xff0c;世界上没有绝对的事情&#xff0c;究竟有没有用看个人 1. 不是所有的美剧都适合学英语 如果喜欢看如《24小时》这样的动作片, 那你基本会讲一口…

美剧命名规则

缘起 最近工作需要研究了下ffmpeg这个工具.在查资料的时候意外发现美剧制作组发布的美剧的名字是有规则的. 美剧命名规则 剧名.S季数E集数.集名(可以不标).发布年代(可以不标).分辨率(可以不标).信号采集源.音频编码(默认的MP3可以不标).视频编码-制作组 下面举例子说一下吧. 例…

EOS 智能合约

1. EOS智能合约的介绍 1.1. 所需背景知识 C / C 经验 基于EOS.IO的区块链使用Web Assembly(WASM)执行开发者提供的应用代码。WASM是一个已崭露头角的web标准&#xff0c;受到Google, Microsoft, Apple及其他大公司的广泛支持。目前为止&#xff0c;最成熟的用于构建应用及WA…

EOS智能合约开发(三)EOS创建和管理账户

创建好钱包和密钥后&#xff0c;我们就需要创建账户。为什么创建账户&#xff0c;为了方便人与区块链交互。以太坊40位地址&#xff0c;让我们非常难以记忆。EOS有账户概念&#xff0c;我们就可以定义账户权限。 在区块链上执行操作&#xff0c;需要使用到账号。我们使用cleos…

固化EOS智能合约,监管升级权限,净化EOS DAPP生态

最近EOS版的Fomo 3D狼人杀游戏骗局引发了大家对EOS智能合约的安全性的大讨论。 和以太坊智能合约的不可升级不同&#xff0c;EOS智能合约可升级&#xff0c;因而保存在智能合约中的数据称不上去中心化&#xff0c;因为智能合约的管理员可偷偷的升级智能合约来修改合约里的任何数…

[EOS源码分析]7.EOS智能合约开发实践之合约调用合约(inline action)

首先&#xff0c;目前dawn-4.1, dawn-4.2使用inline action是会报如下错误 transaction declares authority {"actor":"hello.code","permission":"active"}, but does not have signatures for it under a provided delay of 0 ms 这…

区块链实现智能合约

区块链实现智能合约 一、制定生成智能合约 1、首先参与智能合约的用户必须先注册成为区块链的用户&#xff0c;区块链返回给用户一对公钥和私钥。公钥做为用户在区块链上的账户地址&#xff0c;私钥做为操作该账户的唯一钥匙。 2、两个以两个以上的用户根据需要&#xff0c;…

以太坊中的智能合约

以太坊中的智能合约&#xff08;Smart Coantract&#xff09; 创建智能合约 以太坊中的智能合约是运行在区块链上的一段代码&#xff0c;代码的逻辑定义了合约的内容。合约的账户保存了合约当前的运行状态&#xff0c;主要包含了4部分内容。 balance&#xff1a;当前余额non…

智能合约(一)————智能合约入门

1、智能合约的基本组成 1.1.程序版本 1.2. 合约声明 1.3.状态变量 1.4.合约方法 在这里constant相当于他声明这个局部变量不能更改&#xff0c;但是他并没有实际作用&#xff08;实际就只是警示作用&#xff09;2、地址adress - address.balance 账户余额 - adress.transfe…

EOS 智能合约源代码解读 (10)token合约“简介”

1. 记录用户的token&#xff0c;比如有哪些代币 class [[eosio::contract("eosio.token")]] token : public contract {public:using contract::contract;[[eosio::action]]void _create( const text_name& issuer, const asset& maximum_supply);[[eosi…

区块链智能合约介绍

作者&#xff1a;qinyutong、chengyueqiang 智能合约 (smart contract) 是一种由事件驱动的、具有状态的代码合约和算法合同 [11]&#xff0c;随着以比特币为代表的区块链技术的蓬勃发展, 区块链技术已经开始逐步超越可编程货币时代而进入智能合约时代。智能合约作为区块链的核…

智能合约简介

区块链技术简史 区块链技术的第一次应用是在2008年&#xff0c;当时比特币首次亮相。抛弃传统金融机构&#xff0c;比特币引入了促进数字金融交易的新方法。然而&#xff0c;尽管在当时这是革命性的举措&#xff0c;但在这种状态下&#xff0c;区块链技术无法得到广泛应用。 区…

十分钟教你开发EOS智能合约

在CSDN、柏链道捷&#xff08;PDJ Education&#xff09;、HelloEOS、中关村区块链产业联盟主办的「EOS入门及最新技术解读」专场沙龙上&#xff0c;柏链道捷&#xff08;PDJ Education&#xff09;CTO、副总裁康烁&#xff0c;作了「如何在EOS上开发智能合约」的精彩演讲。演讲…

智能合约--如何实现可升级的智能合约

一. 什么是智能合约 智能合约通俗点说就是写在区块链上面的代码&#xff0c;代码里面编写着严谨完善的规则&#xff0c;一旦某个用户满足了合约里面的规则条件&#xff0c;就会触发里面的代码&#xff0c;执行某个方法。 二. 为什么要使智能合约达到可升级 智能合约的特点之一…