一些CSS的设计原则浅谈

   相信大多数人都有过关于CSS的痛苦经历,从我加入公司到现在,不到两年的时间里,听到最多CSS相关的讨论就是‘很难调’。所以我也一直在探究这其中有怎样的问题,为什么很多人觉得CSS很难写,如何才能让其他人更优雅的写CSS。在Code Review的时候,我渐渐的发现了问题所在,其实很多人已经掌握了丰富的CSS知识,但却不知道如何分组属性写成class。最后只好在需要改变样式的元素上随意起个名字做class然后把所有要写的属性丢进这个class里,如果优先级不够,再把前面的选择器都加上。结果就是CSS代码不断堆积,重复和冗余不断增多,维护也变得举步维艰。

  问题找到了,但如何解决呢,虽然我在项目组内做了几次分享,还经常在Code Review的时候提出一些问题,却还是收效甚微。有时候知道什么是正确的很容易,但知道如何才能做到正确却很难。直到最近,看了几本书之后,发现了一个很适合指导设计CSS的方法,那就是五个为什么或者叫五问法。五问法来自丰田的精益生产,后来自然衍生到了精益创业中,在DDD以及UX相关书籍中都会见到这个方法,其主旨是深入发觉大量现象的背后所隐藏的真正原因。乍一看它是一个管理方法,其实我觉得它是一种思维方式,即刨根问底的找到问题的根本原因并解决。所以被应用于各个领域,自然对于CSS所面临的问题也正恰如其分。

  场景示例

  先来举个例子吧,某天Code Review发现了一条CSS代码是这样写的:

  CSS Code复制内容到剪贴板

  .max-width {

  max-width: 300px;

  }

  由此产生了以下对话(纯属虚构):

  UI Dev:“不应该这样写,这和直接写内联样式有什么区别呢?”

  Dev:“如果我不加最大宽度,页面上那个元素左边就会多出一部分,不然加个margin外边距可以吗?”

  UI Dev:“这个...我也不确定,我从没遇到过这样的问题,一定是哪里有问题。”

  Dev:“确实这样写也挺不好的,过一段时间就不知道这行代码什么意思了,也不敢修改它。但究竟应该如何写呢?”

  UI Dev:“呃,这样吧,我们来试试五个为什么,找找问题的根本原因。”

  Dev:“好啊,CSS的问题也困扰我好久了,能解决就最好了。”

  UI Dev:“首先问问,为什么要给元素加最大宽度呢?”

  Dev:“因为不加就就会多出一部分呀。”

  UI Dev:“那为什么这个元素会多一部分呢?”

  Dev:“因为没加最大宽度,开个玩笑,别生气,其实我也不确定,不过用DevTools看了一下,好像它的父元素的宽度也不对。”

  UI Dev:“已经接近了,为什么父元素的宽度不对?”

  Dev:“因为父元素的内边距两边不一样。”

  UI Dev:“为什么父元素的内边距不一致?”

  Dev:“啊,我知道了,原来为父元素的父元素写了一个last的伪选择器,它是用来把padding-right设为0的,因为父元素现在正好是最后一个,所以被影响了。”

  UI Dev:“别急,为什么要把最后一个元素的padding-right设为0?”

  Dev:“因为原先最后面的那个元素里面是一个无法修改样式的控件,需要把padding-right设为0才能放得下。”

  UI Dev:“所以这才是问题所在,我们的意图是给空间的容器加上padding-right为0的属性对吗?而不是给最后一个元素加,所以应该写一个class,也许叫做‘widget-container’之类的,放在那个容器上,然后把last伪选择器删掉,如此一切就正常了。原先出问题的地方其实是没问题的。”

  Dev:“原来是这样,太好了,我学到了,样式出问题的地方不一定是代码有问题的地方,五个为什么太有用了。”

  这样反复问多次“为什么”可以让我们找到问题的根本所在,如果仅仅从表面现象去解决问题很可能导致南辕北辙的后果。而且在例子中的last伪选择器就是因为没有找到根本原因而简单粗暴的写了这样一行代码而导致的。这个例子还很好的展现了五个为什么对于CSS的益处,不仅是找到问题的根本原因,还使得我们在写CSS的时候意图更加明确。如此一来,class命名难的问题也迎刃而解,padding-right应该为的0的元素是那个控件的容器,所以很容易想出“widget-container”这样的名字,因为通过五个为什么的方法找到了真正的意图,此时,class叫什么和应该放在哪都是水到渠成了。

  按比例投入

  但有时候我们所面对的项目不会这么善良,“为什么”的层级越多,说明CSS的关系也越复杂,所以现在我们来谈谈五个为什么中的一个重要原则,按比例投入。其主旨是小问题小投入,大问题大投入,问题等级越高,投入也应该越大。在CSS中来讲,就是当发现样式异常时,使用五个为什么深入找到的根本原因所在之处的重复次数越多,说明问题越严重,对问题的解决方案也应投入的更多。

  再回到上面的例子中,通过一个元素位置异常的问题,找到根本原因来自一个控件需要内边距为0的容器元素,由于第一次发现,所以选择投入较小的解决方案,针对该控件加一个class用来去掉内边距。目前看来是很正确的,但如果接二连三的从不同的问题上深入找到这个控件上,那就说明问题等级提升了,不应该仅仅是在每个调用控件的容器上添加该class。此时我们可以考虑其他方式,比如把所有容器内边距都设为0,而有针对性的对内部元素添加外边距,如果问题等级继续提升,还可以修改甚至替换控件,或者重构其他部分来适应该控件。总之就是要按问题等级选择解决问题的手段,这样的好处不仅仅是原先在精益中那样可以自动调节效率,还可以等样式需求更明确的时候作出相应的重构。

  由于CSS的描述性,使得它很自由,所以同一个需求,往往一百个开发者有一百种实现。在第一次碰到一个需求时,更是很难写出最佳实现,只能有针对性的写一个专属class把需要的属性扔进去。其实问题不在于此,而在于之后是否能在相同问题出现时重构原先的代码,根据所有相关问题写出更具普适性的class。有经验的UI Dev有时会通过经验来判断,直接写出这种class,Bootstrap这类框架就是这样的,但没有或较少经验的开发者就会产生疑惑。五个为什么的按比例投入原则可以很好的驱动CSS的开发,用深入的根本原因连接不同元素甚至不同页面上出现的问题,这样使我们能够安心的以目前的问题等级来组织代码,等到再次碰到问题并找到这里,才再次重构以解决问题。

时间: 2024-10-26 22:54:06

一些CSS的设计原则浅谈的相关文章

UCD思想:横竖屏切换的设计的浅谈

文章描述:横竖都要给力--浅谈移动客户端的横竖屏切换设计评论. 随着技术与用户体验的发展,移动客户端产品中越来越多的需要横竖屏切换的设计.横竖屏旋转切换的设计在理想的情况下保持不变就能满足用户的需求.但也有很多时候,横竖屏切换时用户操作行为和屏幕比例的改变决定了客户端产品在设计时必须做出适当的针对性变化,于是对于交互设计而言,变不变.怎么变就成了一个普遍存在的问题. 应用背景 先从横竖屏切换需要的产生的背景说开. 横竖屏切换策略最早应用于QWERTY侧滑全键盘按键设计的手机上(早期塞班S60与W

DIV CSS制作网页之浅谈CSS编码与组织技巧

css|编码|技巧|网页 如何让 CSS 代码简洁而易于编写?这恐怕是许多开发者都关心的问题.我想,大概没有什么魔法,可以保证一下就把你的样式表缩小到百分之多少,但合理的 CSS 编码与组织技巧,的确能够帮助你的更有效率地写出更清晰高效的代码,自然,样式表大小的缩减还能减少下载的时间. 组织你的样式表 尽管我们有种种 CSS 的开发工具,比如 TopStyle,比如 StyleMaster,它们可以让你对当前这个样式表里面定义了哪些规则,涉及哪些 class,哪些 ID 一目了然,但这不等于说你

设计网站浅谈SEO诊断的“奇招妙术”

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 对于搞设计的这些网站来说,由于之前一直对网站优化不太懂,以至于网站经过很长一段时间的优化之后,效果却不尽人意,网站没预先的流量和转化率还不说,甚至还差点把自己的站给毁了,网站被降权,搜索引擎不再来光顾,收录只剩下首页,心里那个着急相信做站长的都明白,不过幸运的是,经过A5 SEO诊断优化小组的全面检测诊断之后,网站目前不但恢复了,并且流量和转

专题页设计技巧浅谈

  先以CP设计的的这个奥运专题为例分析专题设计中常遇到的一些问题. 这个页面存在的问题很多,我们来一个个分析. 首先第一个问题首屏高度: 分析一下常见分辨率及浏览器下高度数据: 在window XP常见分辨率1024×768下我们除掉任务栏,浏览器菜单栏以及状态栏后剩下的网页首屏高度平均值是584. Win7下是574.在window XP常见分辨率1440×900下我们除掉任务栏,浏览器菜单栏以及状态栏后剩下的网页首屏高度平均值是716.Win7下是706. 综合上面表中个分辨率及浏览器下的

交互设计理论:浅谈信息可视化

1910年,病卧床上的魏格那(德国气象学家,以"大陆漂移学说"闻名),无意地注视着墙上的世界地图--地图表面之下的隐藏信息惊现了:"大西洋两岸的轮廓竟是如此相对应--". 地图,将地面坐标的信息可视化而产生的图形工具,更便于人们探索其中关系,进而发掘隐藏的真理.Let's zoom out. 其实任何事物都是一类信息:表格,图形,地图,甚至文本,无论静态或动态,都为我们提供认识世界的手段.而可视化(visualization),将数倍放大他们的威力.让我们看看Ta是

设计网站浅谈SEO诊断的高深莫测

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 现在越来越多的设计公司重视起了网络推广,现在这社会无论什么行业想要生存,那就都不能轻视网络的作用,现在甚至是三岁的小孩子都会上网,想要什么东西都会在网上买,这就在向我们发出警示设计行业也要进军网络才行,否则,迟早会被这个社会淘汰的.或许正是因为大家都看到了网络推广的影响力,现在设计公司都纷纷招专门的网络推广SEO人才,但由于老板对这不太懂,因

三步设计:浅谈B2b网站E-mail营销之路

中介交易 SEO诊断 淘宝客 云主机 技术大厅 前言:这一段注意到E-mail营销得到了不少站长的关注,特整理一些内容,希望可以做到抛砖引玉之作用,让E-mail营销成为我们站长营销与推广的利器. (注: B2B网站是企业与企业之间通过互联网进行产品.服务及信息交换的网站.它将各个行业中相近的交易过程集中到一个场所,为企业的采购方和供应方提供了一个交易的机会,象Alibaba.八方资源网等.) 什么是E-mail营销 ? E-mail营销是在用户事先许可的前提下,通过电子邮件的方式向目标用户传递

浅谈c#设计模式之单一原则_实用技巧

单一原则: 程序设计时功能模块独立,功能单一更有助于维护和复用. 例如:个人计算机功能很多,如果想从中只拿出一个功能来制造一个新的东西是困难的.同时如果你的计算机开不机,同时你的计算器功能也不能用了. 在编程中如果一个类封装了太多功能和上面的结果是类似的. 单一职责原则 例1: 大家应该能看出来这个类图中的接口设计是有问题的,用户的属性和用户的行为没有分开.我们根据用户的属性和行为拆开这个接口. 重新拆分成两个接口,IUserBo 负责用户的属性,IUserBiz负责用户的行为.当我们实例化除U

浅谈UED设计流程与原则

UED设计流程在各个公司之间可能会有所不同,国内的设计师在知乎社区上讨论了各自公司(包括腾讯.百度等)的UED设计原则.流程等,希望大家从中可以得到帮助. 来自腾讯的交互设计师eviliu强调设计流程主要考虑以下两方面的问题:一是设计原则是怎么来的,二是要怎么配合设计的上下游团队.就设计原则来说,从四个方面进行了阐述: >始终将用户体验放在第一位--在设计流程中将用户体验融入其中,将其贯穿于设计的始末,使用户体验的结论能够直接影响到设计的方向.同时设计过程中通过展开脑暴.竞品分析.焦点小组等方式