程序员如何做出“不难看”的设计

摘要:程序员在写代码的时候往往只注重功能的实现和性能的提升,忽视了外观和易用性,其实很多时候只要注意一些基本的规则,就可以大幅度提高产品的观感。

经常看到程序员展示自己做的东西,有一些是创业项目,有一些是 Weekend Project, 不客气地说,大部分都挺难看的。在 10 年前,只要你做出一个功能齐全的东西,哪怕非常难看也会有很多人叫好,而现在网站和其它互联网产品多如牛毛,没有人再愿意忍受难看的东西了。

我觉得“不难看”是对一个产品最起码的要求,难看的产品往往都很难用。程序员在写代码的时候往往只注重功能的实现和性能的提升,忽视了外观和易用性,其实很多时候只要注意一些基本的规则,就可以大幅度提高产品的观感。作为一个外行,我也算是苦苦自学了好长时间的设计,这里打算分享一些我认为比较实用的技巧,希望可以帮助到同样在摸索的人。

需要声明的是,这里的目标是做出“不难看”的设计,注意,只是“不难看”而已,怎么做得好看我也在学习。另外,我的水平也很低,只是比较能体会外行的痛苦,如果有什么错误的地方,欢迎批评指正。

下面我会从四个方面来入手:对齐,字体排印,配色和装饰元素

1.对齐

之所以把“对齐”单独列出来并且放在开头说,是因为它是一个看上去简单但非常容易被忽视的规则。如果你真的把所有该对齐的东西都对齐了,就会发现只是简单遵循这一个规则就会有如此大的效果。

人的眼睛是喜欢秩序的,对齐就会让人觉得愉悦。不过有一点例外:尽量别用居中对齐,除非你有充足的理由。居中对齐会让人觉得很业余,你自己可以试一下好几段文字都居中是什么效果。

当然,也有靠不规则来出彩的设计,但那是高级玩法,我们还是乖乖对齐比较好。关于对齐有一个很好的网站可以观摩,那就是IA。它的上一个版本其实更容易看到对齐的效果,可以通过这里查看,顶部和底部的导航看上去没什么联系,如果你对比一下会发现它们对齐得都非常好。

2.字体排印(Typography)

字体排印,英文名词叫做Typography, 它包涵的东西很多,不只是字体的选择,还包括行距、行宽以及字体间距等元素的设定,这些东西都左右着我们的阅读体验。我们每天都阅读大量东西,每天都会接触到“文字”,由这一点就可以看出字体排印的重要性。关于字体排印的具体知识我就不多说了,有很多这方面的书和资料,这里只说几点容易被忽视的元素。

首先是行宽的设定,也就是每行显示的文字个数。一般来说,我们的阅读顺序都是从左到右,然后换行。如果每行显示的文字个数太多,那么我们在换行的时候视线移动距离就比较长,就容易感觉到疲劳,所以千万不要搞成只有一栏然后对屏幕自适应宽度,那样的阅读体验非常差。如果非要做流动布局,建议设置一下 max-width 属性。

其次是行距,也就是两行文字之间的距离。经常看到有些人调整了字体大小却忘记了调整行距,结果上下两行几乎挤在了一起,看起来非常累。如果你要调整字体大小,记得把行距也设置一下,就是CSS中的line-height属性。

第三是字间距。有些时候因为需要,我们会把一些文字设置得非常大,有些文字设置得非常小,这个时候每个字之间的间距可能就会变得过大或者过小,这个时候就需要调整一下,字体设计师们在设计一款字体的时候也会考虑这个因素。在 CSS 里面,有个属性叫 letter-spacing ,可以调整字间距。

最后想说一下的是标点。我们平时用到的很多标点符号都是错误的,比如说,英文的省略号不是三个点:…而是…(MacOS X的快捷键是Option +;),英文引号也不是“而是”(MacOS X 的快捷键是 Option + [),注意,这个和全角引号也不一样。平时写文章聊天无所谓,但如果做设计的话,还是把标点用对比较好。另外,名词拼写最好也严谨一些,App Store不是appstore,Xcode不是xcode,iPad不是ipad…

上面提到的除了标点之外,其余都是关于“空白”的问题。很多程序员可能会关注字体的选择,也知道Helvetica和Arial的区别,但是对字体之间的“空白”不太在意。而事实上,字体排印更多是对“空白”的设计,把“空白”的部分做好眼睛才能呼吸顺畅。

3.配色

配色一直以来都是个让我头疼的问题,它看上去很难掌握,事实上也非常难以掌握。有一阵子我甚至怀疑我自己在色彩方面有生理缺陷,不然我他妈那么用功好歹应该有点儿效果啊。后来做了一些色彩识别能力测试,才慢慢打消了破罐子破摔的念头。

关于色彩基础知识的书和资料我看了不少,三原色、互补色、色环和光谱等知识知道了很多,但这些东西对我的帮助微乎其微。并不是这些知识没用,而是它们都需要辅助以大量的练习,可能还需要一个好的老师亲手指导,而我现在已经没时间和精力再从基础开始慢慢学画画了。不过,大量的阅读和无用尝试还是帮助我找到了一些比较实用并有迹可循的东西,下面就说一些窍门。

程序员一般都是用十六进制或者 RGB 来表示色彩,比如说#FF0000或者rgb(100, 210, 241, 0.5)之类。这种认识色彩的方式非常不好,它们对你来说只是一堆随机数字,只是“碰巧”会出现那种色彩。而且即使你知道 #FF0000 是红色,你也很难通过调整这些数字来找出你想要的色彩。现在我们不要再用十六进制或者RGB 考虑色彩了,我们要用HSB模式: H(hues)表示色相,S(saturation)表示饱和度,B(brightness)表示亮度。

使用 HSB 来考虑色彩最大的好处是比较直观,当你调整色相(H),饱和度(S) 或亮度(B)中的某一项时,基本可以大概知道色彩会发生什么变化,这样我们就可以选出比较可控的又“不难看”的色彩搭配。比如说,我们可能选择了某一种色彩作为链接的色彩,那么就可以保持该色彩的色相(H), 饱和度(S)值不变,只调整亮度(B)的值,这样就顺利得到了一种比较深的色彩,可以用来做:hover色彩,如图:

 

这样用户在鼠标移动到链接上的时候,得到的反馈就比较自然,这里是个简单的demo:

如果把色彩比作杠铃的话,那么程序员的“色彩肌肉”可能只能举起 5 磅的重量,所以开始的时候我们不能太勉强,不要试图去掌控跨度很大的色彩,选中一个色彩之后,任何时候都只调整 H, S, B 中的一项即可。控制住变量,事情就不会变得太糟。

因为我们的力量有限,所以要尽可能少的使用色彩,也就是说要尽量重复使用色彩。比如说,有一种色彩我们用作链接的 :hover 色彩,同时一些高亮的文字的背景色也可以使用它,这样不但减少了色彩种类,还会给人一种视觉上的一致性,有个很好的例子就是http://www.subtraction.com/ ,这个网站的主人以前是纽约时报的设计总监,网站除了黑白之外这个网站只有一种橘黄色。

相信很多程序员都听说过Twitter Bootstrap. Twitter Bootstrap是一个很酷的东西,极大地减少了设计工作,非常适合不懂设计的人快速搭建网站。但现在使用 Twitter Bootstrap的人越来越多,很多网站看上去千篇一律,让人非常厌烦。其实完全可以根据提到的规则来定制自己的Twitter Bootstrap,这里我就以顶部的导航条为例简单做一个demo。首先我们看到导航条的背景样式是这样的:

  1. background#2C2C2C;  
  2. background-image: -webkit-linear-gradient(top#333#222);  

现在我们把#333输入到PhotoShop里面,可以看到它的HSB的值为0,0,20. 现在我们保持亮度(B)不变,通过调整H和S找到一种舒服的颜色,比如160,90,20。但是这个颜色亮度太低了,所以我们增加30的亮度,颜色就变成了160,90,50。十六进制为:#.0D8059。

然后我们对其它颜色做同样的转换。#222的HSB为0,0,13, 然后把它的H和S的值设置为和#333一样,就变成了160,90,13, 再增加30的亮度,就变成了160,90,43。十六进制为:#0B6E4D.

同理,#2C2C2C会转换成160,90,47。十六进制为:#0C7854.

然后把原来样式里面的三个相应的颜色都替换掉就行了。背景换了之后,你会发现菜单选中后的背景颜色还没有改,原来的颜色是#222,现在要改成#0B6E4D。此外连接上的文字显得有些暗,原来的颜色是#999,现在改成#DDD。下面是完成后的demo(只测试了Chrome 浏览器):

4.装饰元素

装饰元素都是锦上添花的东西,上面提到的几点如果做不好的话,装饰元素再好看也没用。最常用的装饰元素是纹理和阴影。有时候我们想要给整个网页一个背景,如果是纯色会显得比较呆滞,用纹理平铺会比较好一些,在网上搜texture会找到很多相应图片,我比较喜欢纯色然后加一些noise的背景,这里有一个生成器可以帮你做到http://www.noisetexturegenerator.com/

至于阴影,有text-shadow和box-shadow等。我以前在一些网站浏览的时候,总觉得上面的文字比较特别,选中一看才发现都加了text-shadow。text-shadow如果用得好会产生一些很好的文字效果,而且不会影响阅读体验。而如果想要一些立体效果,可以考虑box-shadow, 但使用的时候要考虑到一致性和假想中的“光源”,相邻的元素最好不要做出相反的阴影。

一般比较专业的网站在细节上都处理得非常好,从装饰元素就可以看出来。因为很喜欢的Twitter的设计,有一阵子我就把它的首页自己实现了一遍(可以在这里查看,请用Chrome浏览器,因为偷懒没用考虑浏览器差异)。在抄袭的过程中,我发现即使在一些常人不会注意到的细节上它都努力做到尽善尽美。比如说输入框上面的 placeholder其实是用span浮动在上面,因为原生的placeholder没那么丰富的效果。还有弹出窗口的那个小三角,乍看之下没什么,但如果你查看代码结构,会发现有两层:

这个让我很好奇:应该一个div就可以实现才对啊。当把caret-inner隐藏掉之后,发现原来caret-outer是一个半透明的层,而且宽高都比caret-inner多了1px,只是用来模拟阴影效果:

仔细看就能看到那个半透明的小三角

抄到这里的时候我感到非常震惊,然后十分肯定这样的代码是设计师自己写的,不然不可能把设计意图实现得那么完美。这才是real Web designer 啊!知名设计师 Zeldman也曾经在Twitter上说过:"Real Web designers write code. Always have, always will." Twitter的设计师肯定都是自己写HTML和CSS代码。

从Twitter的例子可以看出,好的装饰元素可以提升品质感。但是也要注意一点,装饰元素只是用来装饰的,千万不要搞得太惹眼以至于喧宾夺主。

以上说的这几点中,修改容易并且见效最快的就是对齐和字体排印,把这两点做好设计会直接上一个台阶。颜色用不好可以先不用,都用灰度也行,比如背景颜色#EEE , 字体颜色 333, 分割线颜色#CCC,虽然简陋,但是“不难看”。

下面推荐一些资源,其中有书,也有在线的教程,大部分我都看过而且觉得不错。

《写给大家看的设计书》这本书简单易懂,介绍的也都是可以遵循的规则,很适合业余爱好者阅读,非常推荐。

Type is Beautiful很好的字体博客,里面的基础文章非常值得一看。

Thinking with type关于字体设计的好书,可以在线阅读。

《色彩设计的原理》最近出的书,浅显易懂。

《版面设计的原理》和 《色彩设计的原理》 是同一个系列,能学到很多关于布局的知识。

Designing for the Web包含了字体排印、配色和版式设计等多方面内容,值得一看。可以在线阅读。

Twitter & Twitter Bootstrap。如果你可以把Twitter整个网站自己写一遍,一定会受益匪浅。

学习写程序虽然有时候也比较痛苦,但总体来说还是比较开心的,因为你能很快看到解决问题的成果。比如说,有时候程序因为少了一个分号而报错,当你通过调试改正了错误,程序立刻就会运行正常,得到你想要的结果。但是学习设计是完全不同的经验,你很难遇到“只要做了XX就会有XX效果”的情况。它的变量太多了,要完全控制这些变量需要丰富的经验和很好的感性,所以请多一些耐心,不要期望短期有大的进步。而这种耐心也是值得的:一旦你在这方面有所进步,它对你的影响就是全方位的,你不止可以做出好东西,也会在其它方面更有品味。

另外,技术和设计都是为了让自己做的东西更好用,它们都是为产品服务的,而不是要凸显自己的功能和地位。如果你通过努力终于掌握了一些设计知识和技巧以后,仅仅为了让别人知道你也懂设计就故意在自己做的东西里加一些完全不必要的“炫耀”,那真是一件值得羞耻的事情。

来自:豆瓣

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449739.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务实战(二):使用API Gateway

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 当你决定将应用作为一组微服务时,需要决定应用客户端如何与微服务交互。在单体式程序中,通常只有一组冗余的或者…

五步让你成为专家级程序员

摘要:Mark Lassoff是一位高级技术培训师,从事培训工作已有10余年。他培训的客户包括美国国防部、Lockheed Martin等。在多年的培训生涯中,他总结了一些如何快速学习一门语言的技巧,这些技巧非常简单,但是却让人受益匪浅…

Laravel 使用 Aliyun OSS 云存储

对象存储 ( Object Storage Service, 简称 OSS ) OSS 相信大家都听过, 它是阿里云对外提供的海量, 安全和高可靠的云存储服务. 大家可以把自己网站的资源存上面加快自己网站速度, aliyun 官网也有文档不过对于新手来说有点难, 那么这里我给大家推荐一个组件和组件的使用. johnl…

在线学习新编程 技巧全攻略

摘要:有句俗语叫:“技多不压身”,如果你有时间和兴趣,不妨多了解和掌握编程技能,或许随时可能有用。本文为你收集了一些编程技巧,让你轻松学编程。 有句俗语叫:“技多不压身”,如果你…

第 3 章 镜像 - 018 - 镜像命名的最佳实践

为镜像命名 创建镜像时 docker build 命令时已经为镜像取了个名字,例如: docker build -t ubuntu-with-vi 这里的 ubuntu-with-vi 就是镜像的名字。通过 dock images 可以查看镜像的信息。 1 rootubuntu:~# docker images ubuntu-with-vi 2 REPOSITORY …

Jmeter逻辑控制器-ForEach Controller

ForEach Controller 介绍 ForEach Contoller 即循环控制器,顾名思义是定义一个规则。主要有以下一个参数:名称:随便填写注释:随便填写输入变量前缀:可以在“用户自定义变量”中定义一组变量。循环控制器可以从中获取到…

微服务实战(三):深入微服务架构的进程间通信

见:http://www.dockone.io/article/549简介 在单体式应用中,各个模块之间的调用是通过编程语言级别的方法或者函数来实现的。但是一个基于微服务的分布式应用是运行在多台机器上的。一般来说,每个服务实例都是一个进程。因此,如下…

python输出与删除某行或某列

python输出字符,主要为结合变量形成新的变量名 year 2016 event Referendum fResults of the {year} {event}Results of the 2016 Referendum yes_votes 42_572_654 no_votes 43_132_495 percentage yes_votes / (yes_votes no_votes) {:-9} YES votes {:2…

为什么应该用模块取代C/C++中的头文件?

摘要:本文整理自Apple C工程师Doug Gregor的演讲Slide,他表示希望使用模块(Module)这一概念替代C/C中的头文件,现已被C标准化委员会任命为Module研究组的主席,研究该提议的可能性。考虑到Apple的开源项目LL…

Kong Api 初体验、Kong安装教程

见:https://blog.csdn.net/forezp/article/details/79383631Kong是一个可扩展的开源API层(也称为API网关或API中间件)。 Kong运行在任何RESTful API的前面,并通过插件扩展,它们提供超出核心平台的额外功能和服务。 Kon…

从谷歌宕机事件认识互联网工作原理

摘要:谷歌服务器经历了短暂的宕机事件,持续大概27分钟,对部分地区的互联网用户造成了影响。此次事件的原因深究起来需要进入互联网络那深邃的、黑暗的角落。 译者注:本文中提到CloudFlare是一家总部位于美国旧金山的内容分发网络(…

推荐给开发人员的实用命令行工具

摘要:优秀的工具对于定位问题出在何处有着无可估量的价值,而且能在一开始就帮助我们阻止问题的出现,总的来说能使我们的工作更有效率。本文介绍了6个非常强大且灵活的工具,熟练使用这些工具能使你的生活变得更轻松一些。 作为一名…

雷军:启动手机+AIoT双引擎战略 5G春天到来前打持久战

雷帝网 乐天 1月11日报道 小米CEO雷军今日在小米年会上宣布,2019年,小米将正式启动“手机AIoT”双引擎战略,这将是小米未来五年的核心战略。未来5年,小米将在AIoT领域持续投入超过100亿元。从2019年起,AIoT&#xff0c…

Jenkins自定义主题

x下载自定义样式 http://afonsof.com/jenkins-material-theme/ 打开连接 最后点击:DOWNLOAD TOUR THEME! 得到样式文件:jenkins-material-theme.css 上传样式文件到jenkins 将jenkins-material-theme.css 上传到: /var/jenkins_home/userCont…

SSH (Secure Shell)详解

Secure Shell(SSH)是一种加密 网络协议,用于在不安全的网络上安全地运行网络服务。 SSH通过客户端 - 服务器体系结构中的不安全网络提供安全通道,将SSH客户端应用程序与SSH服务器相连接。 常见的应用程序包括远程命令行登录和远程…

2021-08-12 画蜡烛线

画蜡烛线 pip install https://github.com/matplotlib/mpl_finance/archive/master.zip from mpl_finance import candlestick_ochl import matplotlib.pyplot as plt from matplotlib.pylab import date2num# 先画日K线 fig, axes plt.subplots(nrows1, ncols1, figsize(20, …

通达信获取数据

#python第三方库pytdx获取 from pytdx.hq import TdxHq_API api TdxHq_API() # 数据获取接口一般返回list结构,如果需要转化为pandas Dataframe接口,可以使用 api.to_df 进行转化 with api.connect(119.147.212.81, 7709): # 返回普通list data …

股票数据相关性分析

导入相关包 import pandas as pd import numpy as np import matplotlib.pyplot as plt from matplotlib.collections import LineCollection import akshare as ak from sklearn import cluster, covariance, manifold %matplotlib inline #Jupyter Notebook显示图形专用 plt…

分享一个辅助分析内存泄漏的脚本

最近给系统做了一点优化,前几天去查看系统监控,想看看上线前后cpu使用率曲线变化情况。查看的时候意外发现上线前后内存占用相差不少,20%以上。 本来我没怎么在意这个问题,因为我们系统会在运行过程中缓存部分数据内容。但客户觉得…

专访刘伟:软件开发人员的内功修炼之道

摘要:数学修养对软件开发之路起着什么作用?码农如何修炼自己的内功并成长为优秀的软件开发员?带着相关思考,社区之星第10期采访了中南大学副教授——刘伟。他对数学修养、设计模式、软件架构和重构方面的独特见解,相信…