September 11th, 2007 |
htmlor |
开发, 译文 |
9 Comments »
好久没翻译解馋了,来一篇吧,《10 Tips for Budding Web Programmers and Designers》。感谢Eric同学指点迷津。
给网站开发和设计者的10点建议
作者:Chrys Bader
翻译:htmlor
1. 使用Firefox
Firefox是你触手可及的最重要的平台,网站开发时必不可少。并不是说你非得把它作为默认浏览器——平时上网时,你想用哪个都行。
自Firefox问世,就有一些居家旅行必备扩展随之产生。如果你想事半功倍立竿见影,快用它们。
必备扩展
Web Developer (Chris Pederick)
这个扩展有很多功能,虽然多数已被FireBug(下文会谈到)涵盖,还是有一些颇为好用的。其中包括:
- 缩放浏览器窗口
简单迅速的缩放窗口,800×600、1024×768… 任何指定的尺寸。使用此功能,可以查看各种分辨率下网站的表现。到你的Google Analytics帐户里看看哪种分辨率的访问者最多吧,然后重点为它设计。(FireBug没这个功能)

- 编辑CSS/HTML无需刷新
使用此功能,不必刷新页面即可修改CSS,并将结果实时呈现于页面。太节省时间了。(Firebug里有类似功能,但没这么方便)
(htmlor注:靠,用了这么久居然都没发现这个好东西,真是太逊了~)
- 查看页面加载的所有Javascript
使用此功能,可以在一个页面内查看所有已加载的JS。查看自己或别人的JS代码,方便的很。(Firebug能显示出所有JS名称,但代码没有摆在一起,不方便查询)
- 查看生成的源代码
如果你有用AJAX或者Javascript改变页面内容,此功能绝对实用。因为通常的“查看源文件”模式下,是看不到动态生成的HTML代码的。(Firebug也有此功能)
Firebug (Joe Hewitt)
在办公室里,我们常常会问:“还记得没有Firebug时怎么过么?”它确实改变了我的生活。其主要好处如下:
- 检阅DOM
点击“Inspect”,然后鼠标放到页面元件上,就能看到此元件的HTML和CSS代码。
- 显示样式继承的实时CSS编辑
简直就是钱啊——这大大节省了布局设计的时间。例如,在Firebug里可以选择一个DIV标记,点击margin属性后手工调整,上下键为加减1个像素,上下翻页键为加减10个像素。(htmlor注:任何数值属性都可以这样调整) 还可以在当前样式添加新属性。效果满意之后,再把修改的CSS代码贴到实际文件中去。
- 详尽的Javascript调试
这里的JS控制台比Firefox自带的稍好。它更详尽,是默认控制台不错的替代品。
- 查看页面加载的所有文件及总字节数
对于优化站点加载时间来说,这很关键。你可以测试单个文件会加载多久,图片,JS文件,AJAX调用等。在“Net”部分的最后一行,可以看到页面加载文件的总字节数。
2. 保持兼容性
保持跨浏览器的兼容性很重要。对我来说,这是不怎么好玩的一件事。我之前说过最好在Firefox下开发,但也别忘了检查一下页面在IE6、IE7、Safari(或者还有Opera)中的表现。还有,到Google Analytics里看看你的访问者都用什么浏览器。他们用哪些,你就得重点照顾哪些。

在自己网站的Google Analytics帐户里,我亲眼目睹了IE6占浏览器比例的下滑,持续下滑。等到哪天它跌破5%时,我会开个party庆祝一下——因为再也用不着支持它了。
想要不那么费事的实现兼容,那就简单一点。比如你为了某种效果在一个浏览器里百般调试、费尽周折,它却很可能在另外的浏览器里不好好表现。这就要说到下个建议:少即多。
3. 少即多
把握好分寸。图形设计,编程,页面布局,任何事情都需如此。简单一点。
- 图形设计
现在有一种滥用渐变、斜角和阴影的态势。有时候事情如果没搞好,很可能是东西太多了。简简单单、大方得体就好。
- 花哨的Javascript
用一些很酷的JS效果增强用户界面很好,不过另一方面,它会造成用户的负担,尤其是那些没有像你一样拥有超级电脑的用户。此外,还有跨浏览器不兼容的麻烦。再强调一次,不要对JS倚重太过,什么事都靠它。如果实在想用JS,我强烈推荐jQuery。
4. Javascript?就用jQuery
Javascript用来显示/隐藏信息很棒,它让页面空间开阔,不会挤成一堆。想以一种更新更酷更简单的方式操控JS?一定要试试jQuery。
jQuery
jQuery的主要优点之一:兼容性已广受各大浏览器的考验。也就是说,其所有方法都能保证正常运行。优点之二:极其易用。
jQuery使用CSS的选择器方式操作对象,让你随心所欲的控制它们,一切尽在掌握。例如:
隐藏id为myDiv的DIV里所有的段落
$('#myDiv p').hide();
$('#myDiv p').hide('slow'); // 动画效果隐藏
$('#myDiv p').toggle(); // 点击显示,再点击隐藏
从这里了解更多jQuery。
其他类似的Javascript库也不少,像mootools、prototype和script.aculo.us。
5. AJAX要因地制宜
Web 2.0大潮中,AJAX炙手可热。很多人都问我“你懂AJAX吗?”,好像它是种独立的编程语言似的。说白了,AJAX只是一种手段而已,它通过与服务器端交互,无需刷新页面就能获取和更新数据。
我注意到最近有一种趋势:无论干什么都用AJAX。这并不总是明智的选择。原因?
- 访问量。全盘应用AJAX,会损失掉宝贵的PV。
- 可用性。这一点会有争议,但我认为大多数用户(可能不包括你)仍旧有个习惯:他们依然把页面刷新当作某些事件(如表单提交、页面跳转等)发生的迹象。
AJAX绝对有用武之地,而且某些情况下非它不可。不过重申一遍,少即多。把握分寸,适度使用Javascript和AJAX就好。
6. 搜索引擎喜欢结构化代码
现在有种风潮,人们想尽办法让自己的关键字在搜索结果中名列前茅。作为开发者,你有责任因势利导,用结构化代码尽可能优化网站以适应搜索引擎。
以下是一些重要的结构化标记:
还有一些重要的标记:
- TITLE – 此标记会作为搜索引擎查询结果的标题显示,应该认真对待。
- META – 最好完善一下keywords和description,搜索引擎还是会读取这两项老掉牙的信息的。
<meta name="keywords" content="编程,设计,武侠,小说,足球" />
<meta name="description" content="关注新技术,趣文章,足坛风云;偶尔抒抒情,搞搞笑,装装深沉。" />
7. 布局用DIV 别用TABLE
其实这条我们都已习惯了,现在还用TABLE布局是会被人极度鄙视的。在列举表式数据时用用还差不多。
搞定DIV布局需要很多实践,不过一旦你掌握诀窍,它将变得俯首帖耳。由此获得的灵活性,比你能想到的还要多。
其实它非常简单,就好像 float 和 width 一样。
我在Virb写了个很简单的两栏布局教程,有兴趣就看看吧。
8. 少用行内样式
写代码时,通常会直接在元件标记上加几句样式,这比往CSS文件里加个Class或属性简单顺手一点。不过,最好别这么做,因为代码需要可维护性。
某些时候,你将不得不面对自己以前写的代码。自己的床自己得睡,自己犯懒自己遭罪。10年来,我认识到一个道理:现在额外花时间,将来特别省时间。这就说到了下个建议:代码要考虑将来。
不好的
<p style="font-size:14px;margin-bottom:0;">第一个标题</p>
<p>正文内容</p>
<p style="font-size:14px;margin-bottom:0;">第二个标题</p>
好的
<style type="text/css" media="screen">
p.header{
font-size:14px;
margin-bottom:0;
}
</style>
<p class="header">第一个标题</p>
<p>正文内容</p>
<p class="header">第二个标题</p>
9. 代码要考虑将来
要给代码写注释。整洁,有序,别偷懒。如果觉得匆匆忙忙没心思,休息一会儿再回来写。
某些情况下(比如你的网站将来成功了),别人会来拜读的代码。有时候,这个人会是你。
几年之后,看到自己当年没有注释、乱做一团的代码,你肯定悔不当初。为了避免将来的自怨自艾,现在就把复杂的代码注释一下吧。
注释也不要太多。那些简单到一目了然的代码根本没必要说明,否则泥沙俱下,真正有用的注释会淹没在重重文字之中。
10. 了解标准,但不必束手束脚
别再用SMALL、CENTER、FONT等不被推荐的标记了,这样给人感觉不好。
听说SMALL标记还没被弃用——不过抱歉,我肯定它没几天了。
网站上的有效XHTML和CSS标志告诉人们,你遵守了某些规则。也许这让你感觉与众不同,但是,网站质量与此无关。去看看哪个成功的大网站能完全通过HTML标准验证? 所谓标准,其实跟不上新方法新技术的发展。
开发网站时,要尽量遵循HTML标准。不过有时候,可能需要跳出标准去实现某个功能,这样才能兼容所有浏览器。对此不必耿耿于怀,说到底,功能才是网站的根本。
如果实在想的话,可以用W3的HTML验证器检查你的代码。
讲完了
考虑一下上述建议吧,我推荐的工具可以开始上手了。Good Good Develop, Day Day Up!
(完)
April 11th, 2007 |
htmlor |
web, 译文 |
11 Comments »
再翻一篇不错的文章,《5 Reasons to Create Your First Startup》。惭愧啊,几个月前就关注了,拖拖拉拉直到今天才算完成。在此要大力感谢老罗的答疑解惑。
说明一下,作者Chris Campbell是在线表单创建服务Wufoo的创始人之一,他和兄弟Ryan Campbell以及朋友Kevin Hale共同创建了两个公司、三个产品,并得到Y Combinator的天使投资。因此,本文其实就是他们自己的现身说法。
全文如下:
现在就开始创业的五个理由
作者:Chris Campbell
翻译:htmlor
引言
如果正考虑开始创业,你很可能会查天时观地利,以此判断会否得不偿失。(这么想的话)现在看来时机不错:VC们青睐创业公司,硬件成本越来越低,Google还刚花16.5亿美金买了家公司(htmlor注:Youtube)…… 不过,首次创业的成功或失败,并不一定取决于这些外界的社会经济因素。
假如你是初次创业,SSRN的一篇文章《创业的技巧和运气》(Skill vs. Luck in Entrepreneurship)会告诉你,朋友,你跌倒的可能性很高:
“我们的经验模型表明,前一次取得成功(即开创公司并上市)的创业者有30%的机会再次创业成功。相形之下,初次创业者的成功机会只有18%,而前一次失败的创业者,成功机会是20%。”
即使真如这些数字所说,你的第一次创业就会陷入困境(甚至第二次也会),也不要太灰心。就像走路、说话甚至滑雪一样,商业成功往往来自于执着和不断的学习、进步——这也是败将比新兵更容易成功的原因——因此,你应当尽可能的先实践起来(尤其是年轻且无负担时)。我们列举以下五个理由,只为说明一个道理:第一次创业不论成功与否,都比你想象的有价值的多——因为你将获得宝贵的经验。
一、它会让你知道成功需要多少工作量
许多创业公司失败,是因为创业者没有对成功所必需的、破天荒的工作时间做好思想准备。基本上,对创业的严酷性缺乏准备的人很难成功。在创业成功2006讨论会(Startup Success 2006 Panel Discussion)上,当一名观众问到创业者能否朝九晚五的上班时,LinkedIn创始人Reid Hoffman很有感慨的说:
“在盈利和确立领先地位之前,你基本行走在死亡边缘。你必须意识到这是一场马拉松,不是100米短跑。”
接下来他又说,你们可以想象一下为了产品上线每周工作70多个小时的感觉。如果有过长跑经验,你就会理解精神集中的重要性。举例来说,假如你做好了跑5英里的精神准备,跑够了5英里却被告知要再跑5英里,这时你的精神和心理状态跟开始就准备要跑10英里截然不同。练习马拉松的唯一手段就是不断的跑,练习创业的不二法门就是开始去做。
二、它将教会你如何寻找创业伙伴
在Paul Graham的短文《创业为何失败》(Why Startups Fail)中,他说:
“创业伙伴之间的内讧极其普遍。我们投资的对象中,大约20%的公司都有创始人离开。这种情况如此频繁,以致我们转变了投资的态度。”
如果你和你的伙伴是非常认真的想干一番事业,那就开始干吧。即使不以你的想法为中心,即使压力重重,即使需要很长时间,即使会考验你的奉献精神…… 两个朋友耗费多时精心筹划了一个完美的想法,却在开始创业后分道扬镳——这种事情并不少见。(因此应该尽早的开始创业,期间考察创业伙伴,以避免这种情况。)
Particletree(htmlor注:作者三人共同创立的第一个网站)就是块很好的试验田:初期它风险很低,可以先考验考验我们共同工作的情况(别误会,我们对Particletree的态度始终是认真的)。一旦我们发觉彼此个性冲突(无法继续合作),会很容易停掉服务,也不至于影响太多人。虽然我们三个在创业之前就是好朋友,可好朋友并不一定就是最好的商业伙伴。
三、它会让你明白一个想法的灵活性究竟有多大
在Dharmesh Shah最近的一篇相关文章中,他认为创业失败的原因经常是“一条道走到黑”或者说执拗。用他的话说:
“顽固不化极可能妨碍你事业成功。即使你本能成功。”
同样的,有个风险投资商也告诉我们,一个创业公司的最终产品通常跟最初构想大相径庭。举例来说,我们开始是想做一个ASP的CMS而不是表单创建系统(htmlor注:Wufoo),Flickr最初是个给女孩子玩的游戏,Craig Newmark(htmlor注:Craigslist创始人)只不过想帮助人们找到有意思的活动。想到这些,他应该意识到了什么。现在就开始很重要,不仅因为想法需要时间才会变得成熟,而且一个想法也经常引发其他不相干的想法。假如Joshua Schachter的Loaf和Bill Gates的Traf-O-Data没有失败,我们会看到del.icio.us和Microsoft吗?天知道。(htmlor注:微软大佬Bill Gates与Paul Allen的初创公司Traf-O-Data无疾而终,del.icio.us创始人Joshua Schachter的首个项目Loaf也未能成功。)
四、它会告诉你,保持激情很重要
一旦对某个想法不再抱有激情,创业者往往会选择退出。在线日历Kiko最近卖掉了。原因有很多,其中之一就是缺乏激情。Kiko的联合创始人Richard White声称:
“我无法全情投入了。简单的说,我们丧失了思想的火花。我们没能提升产品品质,这导致了用户的失望。”
后来他又说:
“整个团队已身心俱疲,我们觉得该把火炬传给旁人了。”
不管怎么说,开始一个项目,哪怕马上发现它不是你所钟情的,也绝对要比等到所谓“最好的”时机再开始一个你仍然可能不感兴趣的项目好得多。
五、它会告诉你,你对钱其实一无所知
推出Web开发杂志Treehouse时,为了赚取一点人气,我们提供了免费版。尽管第一周就有3000人下载,可只有300人左右认为值得付费。事实离我们之前的想当然有很大差距,正如Dropsend的联合创始人Ryan Carson所言:
“如果你提供了免费版,就得预计有98%-99%的用户会一直使用。也就是说,只能指望1%-2%的用户付费。我们的经验就是如此,同行业的其他网站也都同意。这大约是行业的平均值。”
让用户为产品付费很难,创业公司也经常因为预算不足和缺乏现金流失败,这不稀奇。SCORE的调查《公司失败的最大原因》(Top Reasons Why Businesses Fail)表明,错误的财政预算经常导致公司失败。
- 82% 缺乏现金流的管理技巧/缺乏对现金流的理解
- 79% 起步时资金太少
- 77% 定价不合理:制定价格时未包含所有必需物品
- 73% 对可实现销售额、所需资金和成功需要的工作量过于乐观
即使Treehouse并不一定会失败,这个经验也给我们上了重要一课:估算现金流。这门学问至关重要,我们就是根据它决定了Wufoo吸收多少天使投资以达到收支平衡。
结论
这篇文章就是想说,现在是创业的大好时机。因为在你真正成功之前,会有很多东西可以学。开始创业能使你的想法成形,能筛选掉不良的创业伙伴,还能让你把握时间/精力的投入度。达拉斯小牛队的老板Marc Cuban(htmlor注:喜欢NBA的朋友对他应该很熟悉),谈到他早期的商业经验时这样说道:
“经过每一次努力,我都学到了很多。从自己及身边人的错误与失败中,我汲取教训。在同我有过来往的成功者们那里,我学习经验。这样,我既体会到了无法承受之恐惧,也感受到了不计其数之希望。更重要的是,这突破了(一个人)时间和精力的极限。”
即使成功者们起步时也经常失败,所以你还犹豫什么?把忧心忡忡抛到九霄云外,现在就开始创业吧!
(完)
October 31st, 2006 |
htmlor |
css, 译文 |
9 Comments »
大约一个月之前,看到了Garrett Dimon的这篇《Architecting CSS》,不禁动了翻过来的念头。联系作者后他满口答应,我也准备3天之内完工。只可惜国庆假期琐事繁多,一直腾不出手来开工。拖啊拖拖啊拖,一直到今天才得完成。这效率……唉,真是愧对作者,希望他别见怪~
废话不说了,回到主题。关于这篇文章,我有两个声明:1.不是css用法指南,而是宏观上的组织架构方法;2.没有提出绝对正确的某种方案,而是列出多种方案以及利弊让你根据具体情况选择。
全文如下:
架构css
作者:Garrett Dimon
翻译:htmlor
在当前浏览器普遍支持的前提下,css被我们赋予了前所未有的使命。然而依赖css越多,样式表文件就会变得越大越复杂。与此同时,文件维护和组织的考验也随之而来。
(曾几何时)只要一个css文件就够了——所有规则(rule)汇聚一堂,增删改都很方便——可这种日子早已远去。(现在)建立新网站时,必须花点时间好好筹划怎么组织和架构css。
文件的组织
构建css系统的第一步是大纲的拟定。(我认为)css组织规划的重要性堪比网站目录结构。(htmlor注:用词夸张一点,让你加深记忆) 没有哪种方案放之四海而皆准,因此我们会讨论一些基本的组织方案,以及它们各自的利弊。
主css文件
通常可以使用一个主css文件,来放置所有页面共享的规则。这个文件会包含默认的字体、链接、页眉和其他等样式。有了主css文件之后,我们开始探讨高级组织策略。
方法一:基于原型
最基本的策略是基于原型页面(archetype page)分离css文件。假如一个网站的首页、子页面和组合页设计不同,就可以采用基于原型的策略。(这种策略下)每个页面都会有专属的css文件。
在原型数量不多的情况下,这个方法简单明了、行之有效。然而,当页面元素并不按部就班的位于各个原型页时,问题就出现了。如果子页面和组合页共享某些元素,而首页却没有,我们应该怎么做呢?
- 把共享元素放入主css文件。这虽不是最纯正的解决办法,却适用于某些具体情况。可是如果网站庞大,(这样做的话)主css文件会迅速膨胀——这就违背了分离文件的初衷:避免导入不必要的大文件。
- 在组合页和子页面的css文件里各放一份样式代码。(这么做)就意味着要维护冗余代码,很显然我们不想这样。
- 创建一个新的文件,由这两种页面共享。这听起来不错。不过假如只有10行代码,我们创建这个文件仅仅是为了共享这10行代码?(htmlor注:杀鸡用牛刀?) 这方法很纯粹,但如果网站庞大有很多对页面共享很少量元素时(htmlor注:比如30对页面分别共享10行代码),就显得很笨重了。
- 创建一个单独的css文件,包含所有共享元素的样式。这方法可能比较简单,却要取决于网站的大小和共享元素的多少。有种情况会很烦:导入了一个很大的css文件,但页面只用到一小部分样式——还是那句话,这违背了分离文件的初衷。
这就是我所说的重叠的两难(overlap dilemma)。零碎css规则的重叠不一而足,并没有一个完全清晰无误的方案来组织它们。
方法二:基于页面元素/块
如果网站使用服务器端include,这个方法会很不错。举例说明,如果使用页眉include,它会有自己相应的css文件。页脚或者其他部分的include可以如法炮制,只须导入自己的css文件。这个方法简单干净,不过可能会产生很多小css文件。
举例来说,假如页脚的样式只需要20行css代码,单独创建一个文件就划不来了。而且这个方法会导致每个页面都包含一堆css文件——因为有多少include,就得有多少css文件。
方法三:基于标记
这个方案直观实际,与前一个类似。如果网站共有30个页面,其中10个含有form,那么可以创建一个css文件专门处理form的样式,只在这10个页面导入它。如果另外10个页面含有table,就创建一个文件专门处理table样式……诸如此类。
另外的组织技巧
除了用主观的方法组织文件,我们还要考虑如打印、手持设备和屏幕等多种媒体类型。这虽然已经很清楚的定义过,可依旧是建立文件结构时应该考虑的一个因素。一旦必须支持多种媒体类型,主css文件里的某些规则可能就得重新考虑。
另外,品牌联合也可能是一个重要因素。(htmlor注:如google和nike联手推出的joga) 如果涉及品牌联合,你就得考虑哪些元素应该调整以适应另一品牌。比如分别使用不同的css文件等。
还有一个常被忽略的技巧:使用嵌套的@import语句。只包含一连串@import语句,或者再加几句css规则,就能创建一个css文件。用这个方法完全可以创建网站的主css文件(用@import导入各部分的样式文件)。假如网站的每个页面都导入了4到5个不同的css文件,无疑你应该考虑使用这个技巧。
规则和选择器的组织
谈完了文件组织,接着讨论一下怎么组织文件里的东西吧。很自然,我们希望在文件里畅通无阻的浏览,迅速找到要编辑的选择器(selector)或规则。
冗余 vs. 附属
正如Dave Shea在其文章《冗余 vs. 附属》(Redundancy vs. Dependency)里所说的,你必须不断了解级联(cascade)。你要决定是对选择器编组(意味着附属),还是把它们分离(意味着冗余)。编组可以保持代码简洁扼要,可是会建立附属关系,导致维护开销增加。如果不编组,就会增加文件大小,让相似的选择器保持一致变得困难。只有做好这种权衡、取舍,才能每次都作出正确的决定。
按相互关系/上下文编组
既然文件组织可以是主观的,那么显然,按照规则和选择器与其他部分的相互关系来进行编组是最好的方法。举例说明,假设你用容器、页眉和页脚来完成布局,就应该把它们编成一组。
这似乎很简单,其实不然。比如,把页眉中的导航加入css时,是将它跟父元素编组还是独立编组?这种情况下,要视乎规则的上下文。通常,页眉与页面布局相关,应该与其他布局元素一起编组。而导航是页眉的一块,应该和页眉的其他块编组,而不是页眉本身。
使用注释
跟大多数代码类似,注释是组织良好与否的关键。应该根据css的控制范围,清楚的标注每节(section)。最好确保注释视觉突出,以便在内容滚动、一目十行时快速定位。
Doug Bowman在其文章《css组织技巧之一:标记》(CSS Organization Tip #1: Flags)里把css注释玩得高明之极。他详细说明了在节名之前加上等号,以便使用文本编辑器的查找功能迅速跳到某节。
别忘了
你应该细致认真的了解了特异性、级联和继承,并善用它们。它们之中的每一项都可以是你最可怕的敌人,也可以是你最友善的朋友。当建立庞大的网站时,是否理解这些细微精妙之处,决定了你所构建的是坚如磐石的系统,还是经不起风雨的豆腐渣工程。(htmlor注:这句完全意译,比较爽)
属性的组织
现在我们了解了文件的组织,也知道了文件内规则的组织,但还有一个重要的组织环节(没有提到),那就是属性(attribute)。虽然属性比前两个概念更简单,可是还有一些非常好的、能够保持规则整洁的方法很值得一提。
按字母排序
提到属性,如果说需要遵循什么原则的话,那就是:按-字-母-排-序。其实这招对于属性浏览帮助不大,不过可以防止属性值覆盖这种偶然事件的发生。
举个例子吧,已经数不清有多少次,我为某个选择器定义过了margin值,之后的某天无意间又加了一个(或前或后)。(这种情况下)后一个属性自然会起作用。假设不知道第二个属性存在,不管我怎么调整第一个属性值、刷新浏览器,也看不到页面变化。(htmlor注:这个问题我深有体会) 如果按照字母顺序排列,你就会发现margin被定义了两次(因为它们挨在一起),这个问题自然可以避免。
优先项
当网站复杂、牵涉太多css文件时,会建立大量的附属关系。一旦需要定制某个元素特有的样式,!important选项似乎是最佳选择。没错,!important是能解一时之需,但最好搞清楚导致问题的根源,然后根据级联关系决定是否真的需要用它。
如果你对上文提到的特异性、级联和继承很熟悉,大可不必抱着!important一颗树不放。(htmlor注:整片森林等着你~) 当然它还是会派上用场,不过使用之前要对具体情况了然于胸。千万不要因为不知问题的症结所在而把!important当作捷径或是补救方案。
小结
当我们变得依赖css而使样式表日渐复杂时,就需要正确的计划来避免犯错,并使代码易于维护。既然完美无缺的方案并不存在,那么了解css的工作方式以及文件、选择器和属性的多种组织方案,无疑有助于我们写出优质的代码,经受住时间考验。
(完)