RSS Feed
  1. April 20, 2012 by Gracian

    引子

    最近阅读Joel Spolsky的著作 More Joel on Software 。该书由Joel的博文组成,涉及内容十分广泛,包括给程序员的建议,如何管理软线开发团队,如何管理需求和进度等等,看完之后觉得大开眼界,收货颇丰。

    早前就在关注Joel Spolsky,偶尔也会访问他的博客Joel on Software。Joel测试(The Joel Test)是由Joel自创的衡量软件团队好坏的一些指标,具体内容参见 The Joel Test: 12 Steps to Better Code 。其中第二个标准是:开发团队是否具有一键式发布。 接下来我将阐述使用microsoft web deopment实现一键式发布。

    具体实现

    Visual Studio 2010 简化了一键式发布的设置。程序员不需要写任何附加脚本就可以实现一键式发布。主要任务为配置服务器和设置Visual Studio。

    服务器配置注意事项

    1.下载并安装web deploy 2.o。

    2. 打开IIS管理器。在左栏中选中主机,右栏中选择管理服务。

    勾选启用远程连接。


     

    3. IIS管理器左栏找到将要发布的网站,右键选中并选择部署->启用web deploy发布。


    4. 打开服务器管理器,选择服务,找到 web deployment service,将其状态由手动开启改为自动开启,并开启。

     

    Visual Studio 2010 一键式发布配置


    发布对话框中选择 Web Deploy

    Service URL: https://主机名:8172/mydeploy.axd

    Site/application: 填上网站的名字

     

    常见的问题

    • 400错误: Site/application填写有误。应按照IIS管理器左栏网站的名字填写
    • 403错误:服务器未打开 Web management service
    • 404错误 :Service URL填写有误
    • 550错误:服务器没有安装web delopment 2.o

  2. [译]响应性设计中的”金发女孩”方法

    September 6, 2011 by Hong

    转载请注明来自Seemeloo西米露

    译者注:金发女孩(Goldilocks)指的是大家耳熟能详的故事——三只熊。金发女孩闯进了三只熊在森林里的小木屋。女孩坐了三把椅子、喝过三碗汤,睡了三张床。前两个不是太大,就是太小,不是太烫,就是太凉,总是在第三次,也恰好是最后一次才找到“刚刚好”的那个。这个故事包含了许多“最恰当”的意味。作者用“金发女孩”应该指的是将复杂的设备情况简化为三种情况:太大、太小、刚好,并且这种方法是“刚好”适合所有设备的。

    这是一篇关于“方法”大于“技术”的文章,作者提出了一种“通用性”设计的思路,并且给出了比较具体的实现方案——先基于可读性做设计,再根据“太大”、“太小”、“刚刚好”三种情况分别处理。至于如何用现有技术来实现,能不能实现,以及响应性设计本身存在的性能问题并不在文章的讨论范围内。

    既然作者提出的是新思路,那么旧的思路是什么?如果你想了解,可以看看这个网站:http://stuffandnonsense.co.uk/projects/320andup/

    =============翻译开始的分割线=============

    原文地址:http://www.designbyfront.com/workinprogress/article/the-goldilocks-approach-to-responsive-design
    作者:Chris Armstrong

    移动浏览器的数量增长得非常快,全世界已有超过4亿的移动设备。我们不能再假设网站只在一个拥有中等分辨率的桌面监视器中被浏览。或许我们从来就不该这样假设。

    问题的答案就是由Ethan Marcotte提出的响应性网页设计(Resposive Web Design)。我们只开发一个适应所有设备的网站,而不是为每个设备开发单独的网站。然而,目前针对响应性设计的方法,仍然是基于一些流行的设备,因此,也很可能会随着这些流行设备一起被淘汰。

    如果我们能创造一种真正通用的、独立于设备的设计呢?无论你使用那种设备浏览,这种设计看起来就像是刚刚好为这个设备而做的。在New Adventures中,Mark Boulton谈到了为内容而设计,而不是画布(designing from the content out, rather than the canvas in),我们很认同他的说法。或许要创造在所有设备中通用的设计的唯一方法,就是把设备统统忘掉。

    试试这个在线例子

    现行惯例

    响应性设计的现行方法是把设计与设备绑定。它根据最常见的设备尺寸来使用像素宽度,但我们不认为这种方法足够好。它导致了设计要基于两个非常容易变化的因素:

    • 设备分辨率;以及
    • 像素

    设备分辨率

    有成千上万种设备和可能的环境,我们无法全部支持。所以我们就选择一些流行的设备,并基于它们的分辨率做设计,忽略市场上其他的产品。随着技术发展,分辨率的提高,我们的网站看起来将会很过时,就像现在看到的600×400的网站一样。

    像素

    像素的大小不是固定的——至少显示出来的大小不是。在iPhone上,16像素的文字可能只有Macbook上的60%那么大。以像素为尺度的设计在不同的设备中会产生不一致的效果,并可能对可读性和可用性产生负面影响。

    设备并不重要

    那么,我们要如何才能像Mark Boulton建议的那样,根据内容做设计?在实践中,这表示从内容的最常见形式——段落元素开始,然后逐步完善整个布局。

    我们常常倾向于先设置body的文字尺寸。但制造商和用户已经为浏览器设置了适合阅读的默认尺寸,我们认为没有太好的理由,你不应该改动它。

    然而,如果你的整个设计是基于这个基本的文字尺寸(即设计中使用em作为单位),随着基本文字尺寸的增加或者减小,你的设计也会发生相应的变化。使用em令你的设计独立于分辨率。

    接下来,用max-width设置段落的行宽,尽可能保证可读性(一行66个字符)。不同的字体之间会有区别,但一般来说,30em左右的效果通常不错。这个设置的是你的单栏布局的宽度,让它刚好适合阅读。

    “金发女孩”方法

    现在,不管使用什么设备来观察你的设计,可用的空间可能是更大、更小,或者刚刚好。你可以用media queries来充分利用它们。

    太大


    如果有比单栏的宽度大很多的宽度,你可以考虑使用一个多栏的排版。例如,如果单栏的宽度是28em(此外左右各有1em的外边距),屏幕的宽度超过45em,你有足够的空间切换到三栏布局——栏宽13.5em,1em的间距,主容器占两栏(这样保留了阅读的最优宽度)。

    太小


    如果空间小于最优阅读宽度,你需要尽量利用所有的空间。例如:

    • 将外边距减少为原来的一半(但不要去掉它);同时/或者
    • 将悬挂的标点设为行内(这样它不会被截断)。

    刚刚好

    如果空间刚好适合你的单栏,你就没什么好担心的。你的工作完成了,去喝杯茶吧。

    我们并不是说单栏布局对每个网站来说都是最好的布局。我们不知道用户会看到哪一种排版,所以我们需要让网站在单栏和多栏状态看起来都一样好。然而,在实践中,我们发现这样有助于做好单栏的状态,再将其他更大或更小的情况处理好。

    优点

    我们认为“金发女孩”方法是有很多优点的。

    使用目前流行的方法,即使你只需要为苹果的设备设计(很幸运哦),也需要考虑五种状态:
    1 iMac(大显示器)
    2 Macbook(小一点的显示器)
    3 iPad(平板,可能是横放的或者竖放的)
    4 iPhone4(Retina屏幕,译者注:640×960)
    5 iPhone(非Retina屏,译者注:320×480)

    Edenspiekermann网站看起来使用了这种方法,并且工作得很好,但不是一个可放大的解决方案。而使用金发女孩方法,你只需要考虑三种状态
    1 太小的屏幕
    2 太大的屏幕
    3 刚刚好的屏幕

    不需要考虑设备的分辨率,你的布局在所有的设备和环境中都能工作,甚至还未出现的设备。如果一个用户的基本字体尺寸是80像素(不管处于何种原因),这种方法应该仍然会为可用的空间提供合适的布局。这就是设备独立的。

    最终,技术会变化,但人体在过去的几千年里一直相当的稳定。为人(的阅读)设计,而不是为技术(设备尺寸和分辨率)设计,你的布局不会很快就过时的。

    从此,设计师们过着幸福的生活……:)


  3. [译]网页设计师的字体替换方法指南

    August 23, 2011 by Hong

    写在这篇文章之前:中文网页字体的窘境

    在国外的设计师幸福地讨论着如何不用图片进行字体替换时,当Google Proudly地提供越来越多的web fonts时,使用中文的网页设计师只能发出一声叹息。中文世界的网页字体窘境,不仅仅是由于中文符号过多造成的字体文件过大这样的技术阻碍;更深一层的原因是,根本就没有几种可用的好字体。

    一方面,尽管一些中文字体提供商也在致力于提供不同平台的解决方案,字体价格还是贵得令人乍舌,方正字库的年费高达万元,这对普通设计师来说很难承受。另一方面,制作中文字体是吃力不讨好的事,几千个符号和26个拉丁字母完全不在一个量级上;使用正版在中国一直是会呼吸的痛,花大力气做出来的字体,拿不到多少钱,这又降低了制作好字体的积极性。

    中文网页的常用字体,过去只有“宋体”,现在微软增加了“雅黑”,但“雅黑”还算不上安全字体。在迫不及待地使用雅黑时,我们仍然要注意降级问题。由于雅黑的字体大小、字距和宋体都有区别,我们需要注意降级后,各个用户代理在排版上可能出现的问题。

    使用非标准字体,最好的方案依然是图片替换。关于图片替换术已有许多文章论述,方法也各有优劣,需要注意的关键点是:
    1 可用性:注意在无CSS或无图片的情况下,依然能保证文档内容的完整性。尽量减少额外无意义的标签。
    2 图片负载:利用GIF、PNG8、JPG各自的特点,有针对性地制作替换图片,能有效地减少不必要的图片尺寸。在几种格式中,首推PNG8,即使在IE6中它的透明背景也能被正确显示。PNG8使用的技巧是,输出时把“杂边”设置为和背景接近的颜色。

    总而言之,中文网页的字体,还没有接近完美的解决方法出现。就像下面这篇文章会告诉我们的,完美不值得等待,只有积极地采用更新的技术,创造更好的作品。而无论中英文字体,是否采用非标准字体永远只是一个技术问题,更重要的是设计师对字体的理解。我们能否理解每一个字符方寸笔画之间的蕴含的意味,并适当地用在设计中,这是我们这些相对落伍的中文世界设计师要艰难完成的任务。

    ============翻译开始的分割线=============

    原文地址:http://webdesign.tutsplus.com/articles/typography-articles/a-web-designers-guide-to-font-replacement-methods/

    受够了Arial?厌倦了Times New Roman? 文字替换术(font-replacement methods)在过去的两年中发生了显著的改善,但如果你没有持续关注这项技术,往往很难说出这些方法有什么不同。这篇文章将讨论现今可用的不同的文字替换技巧。

    我们将探讨每种技术的优点和缺点,字体使用授权,以及网络上最好的字体资源,以便于你能在自己的网页设计中开始使用它们。

    入门:字体替换术

    Since the beginning of the web, designers have been restricted to a limited number of fonts
    从网页诞生之初以来,设计师们一直被有限数量的字体所束缚。

    网页设计的潜力看起来正在一天天地增长。HTML5,CSS3和Javascript这样的技术应用带来了很多令人惊喜而有创造性的网站设计。从纯文本的浏览器时代以来,网页已经走过一段很长的路。尽管如此,网页设计中仍然有一个领域相对而言依然停滞不前。

    在任何设计师的“兵工厂”里,要创造网站的外观和“感觉”,排版和字体选择是不可或缺的元素。不幸的是,自网页诞生之初,设计师们一直被有限数量的字体所束缚。能被大多数的网页用户正确显示,设计师能安全地使用的,还能让人提起兴趣的字体是极少的,Helvetica,Arial和Georgia是其中的三种(别忘了Comic Sans)。

    为了摆脱这种限制,用字体来表达创意,设计师使用的传统方法是把文字合并到图片中——然而这种方法有许多的缺点。增加了很多可用性问题,并随着加载时间增加,网站的性能也相应地受到负面影响。

    这篇文章会探讨一些在网页中不用图片加入非标准字体的方法。我们会看到每个方法的优点和缺点,字体的使用授权,以及这项技术对网页设计师到底意味着什么。

    Cufón

    要在网页中加入非标准字体,使用Cufón是一个简单、有效得难以置信的办法,它的功能不需要依赖服务端的语言或插件。Cufón只需要几行Javascript代码就能工作,它使用HTML5的画布特性渲染字体,并为Internet Explorer使用VML(Vector Mark-up Language向量可标记语言)渲染字体。

    Cufón在主页上提供了一个字体转换工具,它能将你选择的字体转换为SVG,并为你创建一个Javascript文件,你需要在html中引用它。Nettuts+的Jeffrey Way曾写过一篇关于如何在你的网页中集成Cufón的step-by-step优秀教程

    Cufón对很多网页设计师来说是一个很流行的选择,因为它有许多优点,相对来说几乎没什么缺点。它不依赖其它脚本语言或插件,这意味着它对相当大部分受众都是可用的,并且被近期所有的主流浏览器所支持,包括IE9。你还可以直接对Cufón替换的文字应用CSS样式,包括比较新的CSS3特性,例如渐变。考虑到速度,它比sFIR要快得多,而且没那么密集,但它仍然不应该被用在主体的大段文字上。

    优点:

    • 不同的浏览器间很不错的兼容性
    • 可以在你的字体中的只包含字符里的特定集合(ABC,123,等等),以便于控制文件体积。
    • CSS字体样式在所有的浏览器中都能保持(颜色、尺寸、阴影⋯⋯)

    缺点:

    • 文字无法选择
    • 表现:最好在顶部、标题和副标题中使用
    • 特别的样式(文字修饰、翻转等)需要一些额外的工作。

    @font-face

    “@font-face is essentially the ultimate solution for fonts on the web.”
    @font-face基本上是网页中字体的最终解决方案。

    在所有的字体替换方法中,@font-face可能是受到关注最多的。但这是有充分原因的。@font-face基本上是网页中字体的最终解决方案,在它被真正的实现之前,其它技术都想替代它的位置。其实在CSS2特性中就包含了@font-face,但直到今天它才被广泛地采用。

    @font-face在网页上实现自定义字体,使用的技术无非是CSS——这意味着不再依赖于Flash,PHP甚至Javascript。当使用@font-face时,渲染的是真正的字体,而不是向量对象或图片,因此文本可以被选择、放大,使用CSS修改样式。

    不幸的是,就像其它和网页有关的事情一样,首先阻碍@font-face发展的就是浏览器(还有使用授权,我们会在下文中讨论)。每一种主流浏览器的字体格式是不同的。Internet Explorer使用.EOT(Embedded Open Type),而近期的Firefox、Chrome、Safari和Opera都支持.ttf(True Type Format)。一些浏览器也支持开放字体格式(Open Type Format),iPhone和iPad则需要SVG(Scalable Vector Graphics)。这些很让人费解,有时会令很多人望而却步。谢天谢地,还有一线曙光。网页开放字体格式(即.WOFF)被定为网页字体的标准格式,W3C正在对其进行标准化。3.6以上版本的Firefox和5.0以上版本的Chrome已经支持这个格式,根据近期的声明,IE9也支持这个格式。让我们期待Opera和Safari也尽快参与进来。

    关于@font-face,唯一还要提出的小问题是,因为它呈现的是真正的字体,不同的浏览器和操作系统的渲染效果会有细微的区别。一些网页字体服务会使用字体微调来协助修正这些细微的差异,字体微调会在浏览器中平滑字体的轮廓,创造出更好看的字体。我们会更深入地探讨这些服务。

    如果你需要更多关于如何在网站中实现@font-face的信息,Jeffrey Way又一次提供了一篇非常有用的教程

    优点:

    • 保持了可用性——这意味着它能优雅降级
    • 支持Unicode
    • 支持CSS字体样式

    缺点:

    • 一些字体文件下载起来比较大
    • 不同浏览器之间没有统一的格式
    • 不允许发布(据我们所知)——在确认你的发布许可之前,不能在模板或主题中使用。

    接下来的解决方案依赖于@font-face来实现——每一个多少都算是一种服务——这意味着:它们都使用同样的基本技术,但是它们提供不同的字体库,授权选项,以及支付计划;是的,大部分是需要付费才能使用,但这可能就是所有网络字体的未来。


    Font Squirrel @font-face Kits

    Font Squirrel或许是现在最流行的文字替换资源。Font Squirrel让你忘掉所有对字体授权可能有的担心,因为它提供的所有字体在商业上都是免费的。这个网站有数百种字体供选择,从sans-serif到novelty风格的字体都有。

    就像之前提到的,为了保证@font-face在所有浏览器中都能工作,你需要几种不同的字体格式,对此,Font Squirrel也有解决方案。网站提供了@font-face套件,其中有你需要的所有字体格式,以及HTML和CSS。如果你找不到你想用字体的@font-face套件,他们同样免费提供了生成器,能将你的字体转换为所需的多种格式。使用生成器时,你需要保证你拥有使用这个字体的正确授权。

    优点:

    • 使用@font-face,但实现起来容易得多
    • 他们处理所有的授权相关的事项
    • 数百种字体可供挑选
    • 包含多种格式(TrueType, EOT, WOFF, SVG, Cufon等等)
    • 如果他们没有你想要的字体,你甚至可以生成你自己的套件

    缺点:

    • 和@font-face一样,不过通常来说,这是一个非常棒的解决方案

    Google Fonts API

    Google Fonts API的使用结合了他们自己非常独有的字体目录,目录中的所有的字体都是开源的,所有人都能使用。这个目录一直都在扩展和增长,目前已经包含了超过200个例子。

    要把目录中的字体用在你的网站上,真是简单得不能再简单了。你只需要选择你想用的字体,选择想要的字体变体,Google会向你提供一行你需要用的Javascript代码。修改css,列出这个字体,你就准备好了!这真的非常简单。

    优点:

    • 开源授权意味着这些都是免费使用的
    • 字体放在Google的服务器上,所以你的字体可能已经在浏览器的缓存中

    缺点:

    • 呃……

    Typekit

    Typekit是第一个提供预订网页字体服务的网站,并仍然非常流行。Typekit以及其他类似的服务网站解决字体授权的方法是:缴纳年费,会员就能访问大量的自定义字体。这种方法允许字体的制造商为他们努力的工作收到一些回报,并防止了字体的盗版,因为所有的字体都放在Typekit的受保护的服务器上。用户不用把字体放在他们自己的网站空间里,只需要简单的链接即可。

    Typekit和一些世界上最大的字体制造商合作,为你提供了广泛而多样的字体。Typekit还提供了很多字体使用的选项和控制。你可以选择不同的字体变体、粗体和字型。你还可以创建CSS栈,选择当@font-face不被支持时的降级字体。一旦你做好了选择,网站会生成一段需要你放在网站上的Javascript代码。

    Typekit的另一个优点是它能微调字体,帮助控制不同浏览器处理文本和字体的差异。

    Typekit提供了不同的价格包以适应不同的需求。免费的包提供Trial Library中的两个字体,只能在一个网站上使用。这个网站每月最多允许25,000次页面浏览(Page View),并且你必须在网站中显示Typekit的标志,链接到你使用字体的信息。而相应的,规模最大的是性能包(Perfomance package),它提供所有字体的使用权限,不限网站数量和浏览量。所有这些的年费是99镑。

    优点:

    • 字体选择很多
    • 字体放在Typekit的服务器上

    缺点:

    • 每年都需要交钱
    • 抗噪不是很完美,一些字体可能在一些浏览器和操作系统中看起来有锯齿,没有抗噪

    Fonts.com Web Fonts

    流行的字体资源font.com也开启了一项专门的网页字体服务,他们自称提供了超过8,000种字体由你在网站上使用。和Typekit类似,它提供的是基于的预订的服务,但它的价格是月度的。和Typekit相比,它的价钱并不贵,但字体的限制要少得多。免费包相比之下相当的友好——无限制地使用8,000种字体,不限网站数量。专业包允许你下载50种字体到你的电脑中,并在设计中使用这些字体。

    Fonts.com网页字体自夸他们的字体集中有一些真的非常棒的字体——例如Helvetica, Univers和Franklin Gothic。

    优点:

    • 非常多可选择的字体和样式
    • 字体放在Typekit的服务器上
    • 独有的Helvetica®、 Frutiger®、 Univers® 和其他有名的字体

    缺点:

    • 如果他们的免费服务无法满足你,需要交年费
    • 他们的字体库其实相当的大,但能使用的很有限

    Fontdeck

    曾为一些世界上最大的企业服务的著名网页设计公司Clear Left与OmniTI合作,发布了Font Deck。Font Deck是另一个基于预订的服务商,但你只需要为使用的每个单独的字体付年费,这对那些只想在个人博客中使用一到两个字体的人来说很完美。

    字体的价格最低为单个域名2.5美元/年,不限页面浏览量。全部的字体都可以无限期免费试用,但只有20个独立IP可以浏览。这个免费包有助于弥补无法下载字体到本地的缺点,你在设计阶段就能使用它们。因为Font Deck相对来说很新,目前字体的选择很少。

    优点:

    • 只需要为你需要的付费
    • 在网站上预览字体是免费的
    • 语言支持

    缺点:

    • 它依然是需要付费的
    • 他们的字体库其实相当的大,但能使用的很有限

    Font Spring

    Font Spring采用了和预订服务有些许区别的方法,它回到了传统的购买字体的路子上。字体是独立购买的,你需要下载他们,并放在自己的服务器上。Font Spring认为提供的字体中99.9%都可以通过@font-face方式使用。

    每个独立的字体的价格都不一样,要用@font-face方式使用字体,你需要额外支付费用。@font-face授权包括桌面OpenType版本和在web上需要的其他格式。

    用这个方法有很多的优点,如果你真的只心仪一种字体,和预订服务相比这可能会更便宜。你可以在任意多的域名中使用,因为你能直接控制它们,并且页面浏览量也没有限制。

    作为一个附加的警告,使用其他技术如sIFR或者Cufón转换或植入这些字体是被禁止的。

    优点:

    • 像Font Squirrel一样,它为你处理了授权相关事项
    • 又一个很棒的字体库,有很多不同的字体制造商

    缺点:

    • 每一个字体都需要付费,这可能需要很多钱
    • 你需要把字体放在自己服务器上

    其他字体替换解决方案

    这些只是可用的字体服务中的一部分。还有很多提供服务的网站,例如TypothequeWebtype。他们都各有优势和劣势,你应该基于个人的需要做出选择。一些人可能看中预订服务的简便,而另一些人可能不喜欢把网站的一部分控制权交给第三方。如果你是后一种情况,你最好使用像Font Squirrel这样的,下载你自己的字体,并放自己的服务器上。

    接下来的两个(sIFR和FLIR)通常被认为是“守旧派”,因为它们都有很明显的问题,但是它们是值得讨论和了解的。

    sIFR

    sIFR已经出现了好一段时间了。当我们确实除了图片没有其他选择时,它第一个出现了,提供了一个很有效的引入非标准字体的方法。sFIR(即Scalable Inman Flash Replacement)结合使用了Flash和Javascript来将页面上的文本修改为Flash元素。sIFR有许多优点,例如文本保持了对屏幕读者的可用性,也可以被选择。

    然而名字中的“scalable”可能会造成一些混淆。sIFR的可放大的意义是,Flash元素放大至原有浏览器文本的尺寸——这允许它拥有最大的尺寸可能性,能以任何给定的尺寸显示文本。然而,当用户调整页面的文本尺寸时,任何已经被Flash元素替换的文本大小是无法改变的。这显然会造成一些可用性问题。sIFR同样需要用户的电脑启用Flash和Javascript才能起作用。

    sFIR的创造者之一,Mike Davidson同样认识到这项技术的局限性。Mike曾公开表示,sFIR不应该被用于大段的文本,因为它会对网站的性能有显著的影响。Mike同样认识到他的技术并不是网页排印的最终解决方案,他只是简单的引用了这个词“权宜之计”。

    优点:

    • 没什么大的优点……除了它是出现的第一个字体替换方法。

    缺点:

    • 依赖于Flash
    • 降低性能
    • 阻拦广告和Flash的程序也会阻拦它
    • 很难完美地修改样式——常常和你期待的效果不一样

    FLIR

    FLIR(即Facelift Image Replacement)和sIFR类似,除了它使用Javascript和PHP来生成图片,而不是使用Flash来替换文本。这种方法明显的好处是,你不需要花时间为每一段你想用自定义字体的文本创建单独的图片。如果你觉得用另一种字体或者颜色,更新你网站的文本也会更容易一些。

    不幸的是,FLIR除了使用简便和节省时间以外,相比传统的将文本存成图片,它并没有提供更多改进。最终结果是文本依然以图片的形式渲染,文字无法被选择或放大。
    优点:

    • 在所有主流浏览器中都能工作

    缺点:

    • 较大的负载
    • 文本无法被选择
    • 服务器需要支持PHP和GD……这往往是不提供的

    字体授权和合法性

    字体授权问题正在不断发展。它有助于字体替换方法的缓慢进程和采用。就像图片一样,你需要作者的授权才能在网站中使用字体,授权是以EULA(End User License Agreement终端用户授权协议)的形式。一些授权允许字体被免费使用,甚至用在商业用途中。而另一些可能只允许个人在本地的电脑上使用。

    当使用上述的某种字体替换方法时,你实际上在你的网站植入了一个字体,或者链接到一个上传到你服务器的字体。即使是免费的字体授权,这也是不允许多人使用的。许多字体创造者和制造商都不允许这样的原因是,它会让网站的用户直接访问字体文件,他们开始担心他们的字体可能被下载并非法传播。这个问题让很多字体制造者不允许他们的字体通过@font-face使用。

    因此,当使用上述的方法时,你绝对要确认字体的授权是允许的,这非常的重要。

    还好,这个问题没有完全阻碍字体替换方法的发展,还有很多可用的资源允许你在网站上使用自定义的字体。

    最后的思考:这对设计师们意味着什么

    “Perfection is not worth waiting for, if you do, you risk missing out on exciting new opportunities”
    完美不值得等待,如果你这么做了,你在冒险错过那些令人兴奋的新机会。

    上面我们讨论了很多,对于想在站点设计中使用自定义字体的人来说,很显然有很多种选择。好消息是,所有的方法现在都是可用的。而坏消息是,没有一种方法是完美的,每一种都有他们自己的优点和缺点,这是实话。@font-face显然是最有希望的,但可能还要过好多年,它才能算得上绝对没问题。事实是,虽然在网页设计的世界里,情况很难说完美,但是还有很多折中方案,而这些方案需要使用新的技术。完美并不值得等待,如果你这么做了,你在冒险错过那些令人兴奋的新机会。

    这真的是网页设计的一个令人兴奋的时代,网页的排印似乎正在得到更多的欣赏和理解。字体替换方法为创造有创意的新设计提供了很棒的机会,并且我相信,关键在于不要滥用这项技术。当情况出现问题时总是提供降级的方案,聪明地使用每一种方法(不要像这样改掉你网站所有的文本)。多花一些时间,欣赏和学习伟大的字体,网页会是一个更好的使用字体的地方。


  4. knockout.js新手上路 (开张大吉,转一篇tuts的帖子)

    August 22, 2011 by Gracian

    knockout.js是我最近开始使用的一个javascript小类库. 它全部运用javascript编写, 用途是使前端用户界面(UI)的创建更为简单易读.它具有轻便灵巧(压缩前也只有29kb)的特点, 而且可以和其他流行的javascript类库(例如jquery)很好的结合运用.默认的模版语言是jquery.tmpl.

    简介

    我们将要学习制作一个通讯录,这个通讯录可以显示人名,地址,图片等等. 使用者可以轻松的添加新联系人,或者编辑删除已有联系人.我们将要使用knockout作为数据和ui的中间层,以此简化ui的创建过程.

    一.开始上路

    knockout使用View-model-viewModel构架. 以通讯录为例,界面部分称为view, 数据部分称为model, viewModel则是接受并处理用户输入,管理和协调view和model (个人理解为大脑部分).

    让我们先从创建文件夹部分开始.先创建一个名为knockout的文件夹,其中包含3个子文件夹,分别为css,img,js. css文件夹里面放置stylesheet文件,img文件夹里面是我们要用的图片.js文件夹里面存放我们今天创造的script文件,除此之外还有js类库(jquery.tmpl,jquery,knockout.js,…).起初,文件夹中含有以下文件:

    • jquery.tmpl.js
    • jquery-1.6.2.js
    • knockout-1.2.1.js

    现在,在texteditor中,创造如下页面

    
    <!DOCTYPE html>
    <head>
    <title>Knockout</title>
    <link rel="stylesheet" href="css/styles.css" />
    </head>
    <body>
    <script src="js/jquery-1.6.2.min.js"></script>
    <script src="js/jquery.tmpl.js"></script>
    <script src="js/knockout-1.2.1.js"></script>
    <script src="js/behavior.js"></script>
    </body>
    </html>
    

    保存文件,并命名为index.html. 在knockout.js中,我们将运用html5的新特征data-*属性, 以此添加自定义的属性.

    (function ($) { var model = [{  name: "John",  address: "1, a road, a town, a county, a postcode",  tel: "1234567890",  site: "www.aurl.com", pic: "/img/john.jpg",  deleteMe: function () { viewModel.people.remove(this); }
    }, {  name: "Jane",  address: "2, a street, a city, a county, a postcode",  tel: "1234567890",  site: "www.aurl.com",  pic: "/img/jane.jpg",  deleteMe: function () { viewModel.people.remove(this); }
    }, {  name: "Fred",  address: "3, an avenue, a village, a county, a postcode",  tel: "1234567890",  site: "www.aurl.com",  pic: "/img/fred.jpg",  deleteMe: function () { viewModel.people.remove(this); }
    }, {  name: "Freda",  address: "4, a street, a suburb, a county, a postcode",  tel: "1234567890",  site: "www.aurl.com",  pic: "/img/jane.jpg",  deleteMe: function () { viewModel.people.remove(this); }
    }], viewModel = { people: ko.observableArray(model),
    
    }
    
    }; ko.applyBindings(viewModel);
    
    })(jQuery);
    

    保存文件为behavior.js,这是一个自我调用的函数.

    在model中我们创建了一个数组,数组包含有一系列people对象.people对象含有字符串(如名字,地址,url,…),还有deleteMe方法.

    上面提过,viewModel引用ui的现在时,它同样是一个对象.他的第一个元素就是people数组.我们用knockout的ko.observableArray绑定modle和viewModel.

     

    第二轮 – 创造view

    我们现在已经有了model和viewmodel.我们接下来要做的将是吧viewmodel显示到页面上. 将下面的代码添加到<body>element里面,

    <div id="people" data-bind="template: { name: 'personTemplate', foreach: people }">
    </div>
    <script id="personTemplate" type="text/x-jquery-tmpl">
    <section class="person">
    <img src="../img/person.png" alt="${ name }" />
    <h1>${ name }</h1>
    <address>${ address }</address>
    <span class="tel">${ tel }</span>
    <a href="http://${ site }" title="Visit site">${ site }</a>
    <div class="tools">
    <button data-bind="click: deleteMe">Delete</button>
    </div>
    </section>
    </script>

    我们首先加了一个空的div元素(id纯属方便css),这个div 含有特殊的属性 – data-bind. 这个属性告诉knockout这个元素要存储viewmodel的数据.当我们调用ko.applyBindings()的时候,这个databind就存储viewmodel的数据.

    此外,我们用到了foreach语法进行数据遍历 ,observableArray作为数据源. 事实上我们有2个选择进行数据遍历.选择之一是用标准tmpl -> {{each}}语法. 选择之二是用knockout的syntax(如上). 用knockout的syntax更好一些,这是因为knockout会选择更新ui上面的数据,这样效率更高.

    Div中其余的部分都是我们自己定义的ui,之中实用的都是tmpl的template.我们使用<section>元素作为container,值得一提的是,我们用到databind在delete按钮上面.

    运行以上代码,我们将看到如下截图

     

    add person
    很cool是吧, 但你是否觉得knockout.js 和 jquery.tmpl很相似呢?

    The really cool thing is that not only is the view updated accordingly when theviewModel changes, the viewModel is also updated when the view changes. So if we click one of the delete buttons on our page, the people array will also have the corresponding person object removed from it!

    我们绑定到ko.observable()的原始的数组其实并没有更新.但是正常情况下,我们需要得从ajax请求中获得数据,然后把数据填入模版中.knockout省去了中间调用ajax的过程. sweet!

     

    第三轮 – 加入新数据

    我们现在已经可以任意移除person对象了,与此同时,我们需要加入新功能,来插入新对象.更新div加入如下代码:

    <a href="#" title="Add new person" data-bind="click: showForm, visible: displayButton">Add person</a>
    <fieldset data-bind="visible: displayForm">
    <div>
    <label>Name: <input id="name" /></label>
    <label>Address: <input id="address" /></label>
    <label>Tel: <input id="tel" /></label>
    <label>Site: <input id="site" /></label>
    <div>
    <div>
    <label>Picture: <input id="pic" type="file" /></label>
    </div>
    <div>
    <button data-bind="click: addPerson">Add</button>
    <button data-bind="click: hideForm">Cancel</button>
    </div>
    </fieldset>

    第一个加入的元素是<a>标签, 它来显示我们用来接受新信息的表单.原始方法中,我们会在jquery里面绑定click消息. 有了knockout之后,我们可以免去这步,创建一个新方法在viewModel, 执行我们希望的效果,knockout会自动绑定消息.

    现在让我们一起看看我们需要添加哪些JavaScript 方法. 把如下代码添加到people 属性后面,

    displayButton: ko.observable(true), displayForm: ko.observable(false), showForm: function () { viewModel.displayForm(true).displayButton(false);
    }, hideForm: function () { viewModel.displayForm(false).displayButton(true);
    }, addPerson: function () { viewModel.displayForm(false).displayButton(true).people.push({ name: $("#name").val(), address: $("#address").val(), tel: $("#tel").val(), site: $("#site").val(), pic: "", deleteMe: function () { viewModel.people.remove(this); }
    });
    }
    

    第一个属性是displayButton.这个属性是一个observable属性 (意味着说他的数值会被其他对象或方法引用). 这个实体观察<a>标签的初始值为true,即意味着说,当页面载入的时候,这个<a>标签会显示在ui上面.

    下一个property是displayForm. 和上面的anchor相似,但是我们副初始值为false,因为我们不想显示.

    下面我们加入两个方法.一个是showForm(), 另一个是hideForm(). 这两个方法会改变displayForm和displayButton的数值.

    结果如下图所示

    add new people

    目前为止,我们已经完成添加新用户的功能了. 新用户的数据被保存到people数组里面.

    为了证明这一点,我们在代码中加入

    console.log(ko.toJSON(viewModel.people));
    

    请看下图控制台部分:

    console

    很酷是吧 :)

    原文地址: http://net.tutsplus.com/tutorials/javascript-ajax/into-the-ring-with-knockout-js/


  5. Hello world!

    August 1, 2011 by Hong

    Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!