IIS中的上传目录权限设置问题
虽然 Apache 的名声可能比 IIS 好,但我相信用 IIS 来做 Web 服务器的人一定也不少。说实话,我觉得 IIS 还是不错的,尤其是 Windows 2003 的 IIS 6(马上 Longhorn Server 的 IIS 7 也就要来了,相信会更好),性能和稳定性都相当不错。但是我发现许多用 IIS 的人不太会设置 Web 服务器的权限,因此,出现漏洞被人黑掉也就不足为奇了。但我们不应该把这归咎于 IIS 的不安全。如果对站点的每个目录都配以正确的权限,出现漏洞被人黑掉的机会还是很小的(Web 应用程序本身有问题和通过其它方式入侵黑掉服务器的除外)。下面是我在配置过程中总结的一些经验,希望对大家有所帮助。IIS Web 服务器的权限设置有两个地方,一个是 NTFS 文件系统本身的权限设置,另一个是 IIS 下网站->站点->属性->主目录(或站点下目录->属性->目录)面板上。这两个地方是密切相关的。下面我会以实例的方式来讲解如何设置权限。
IIS 下网站->站点->属性->主目录(或站点下目录->属性->目录)面板上有:
脚本资源访问
读取
写入
浏览
记录访问
索引资源
6 个选项。这 6 个选项中,“记录访问”和“索引资源”跟安全性关系不大,一般都设置。但是如果前面四个权限都没有设置的话,这两个权限也没有必要设置。在设置权限时,记住这个规则即可,后面的例子中不再特别说明这两个权限的设置。
另外在这 6 个选项下面的执行权限下拉列表中还有:
无
纯脚本
纯脚本和可执行程序
3 个选项。而网站目录如果在 NTFS 分区(推荐用这种)的话,还需要对 NTFS 分区上的这个目录设置相应权限,许多地方都介绍设置 everyone 的权限,实际上这是不好的,其实只要设置好 Internet 来宾帐号(IUSR_xxxxxxx)或 IIS_WPG 组的帐号权限就可以了。如果是设置 ASP、PHP 程序的目录权限,那么设置 Internet 来宾帐号的权限,而对于 ASP.NET 程序,则需要设置 IIS_WPG 组的帐号权限。在后面提到 NTFS 权限设置时会明确指出,没有明确指出的都是指设置 IIS 属性面板上的权限。
By admin
read moreFCKeditor2.6.5及后续版本配置及中文上传乱码解决(PHP)
1、首先去官网下载FCKeditor2.6.5 多国语言版。 http://ckeditor.com/download,注意: 第一个为最新3.0.1版,第二个才是FCKeditor 2.6.5
2、删除不必要的东西:
删除/FCKeditor/目录下除 fckconfig.js,fckeditor.js,fckstyles.xml,fcktemplates.xml,fckeditor.php,fckeditor_php5.php,fckeditor_php4.php 七个文件以外的所有文件; 删除目录/editor/_source(基本上,所有_开头的文件夹或文件都是可选的); 删除/editor/filemanager/connectors/下除了php目录的所有目录; 删除/editor/lang/下的除了 en.js, zh.js, zh-cn.js三个文件的所有文件。
3、打开/FCKeditor/fckconfig.js 修改 var FCKConfig.DefaultLanguage = ‘zh-cn’ ; var _FileBrowserLanguage = ‘php’ ; var _QuickUploadLanguage = ‘php’ ; 要开启文件上传的话,还需要配置editor\filemanager\connectors\php\config.php 将$Config[‘Enabled’] = false ;改为$Config[‘Enabled’] = true ; 更改$Config[‘UserFilesPath’] = ‘/userfiles/’ ;为你的上传目录;
4.调用方法(例子) 将FCKeditor放在网站根目录 在PHP文件里面,包含/FCKeditor/fckeditor.php文件 //包含fckeditor类 include(“../FCKeditor/fckeditor.php”) ; //设置编辑器路径 $sBasePath = “/FCKeditor/”; //创建一个Fckeditor,表单的txtarea名称为content $oFCKeditor = new FCKeditor(‘content’) ; $oFCKeditor->BasePath = $sBasePath ; //设置表单初始值 $oFCKeditor->Value = ‘This is some sample text’ ; $oFCKeditor->Create() ;
By admin
read moreSET 和 SHOW语法(三)
译者:叶金荣(Email:),来源:MySQL手册版 本 5.0.20,转载请注明译者和出处,并且不能用于商业用途,违者必究。
14.5.3.16 SHOW PROCESSLIST
语法
SHOW [FULL] PROCESSLIST
SHOW PROCESSLIST
显示了有哪些线程在运行。也可以执行 mysqladmin processlist
命令来得到这些信息。如果有 SUPER
权限,则可以看到全部的线程,否则,只能看到自己发起的线程(这是指,当前对应的MySQL帐户运行的线程)。详情请看“14.5.4.3 KILL
Syntax”。如果没有使用 关键字 FULL
,则只能看到每个查询的前100个字符。
从MySQL 4.0.12起,结果中还会以的 host_name:client_port
格式来显示通过TCP/IP方式连接过来的客户端的主机名,这就可以知道每个客户端都正在做什么。
这个语句在出现“too many connections”错误时想看看都正在执行什么查询非常有用。MySQL为拥有 SUPER
权限的账户保留了一个额外的连接,这就保证让管理员总是可以连上检查系统状况(假定没有给每个系统账户都授予这个权限)。
SHOW PROCESSLIST
结果中一些常见的状态如下:
Checking table
- 正在检查数据表(这是自动的)。
Closing tables
- 正在将表中修改的数据刷新到磁盘中,同时正在关闭已经用完的表。这是一个很快的操作,如果不是这样的话,就应该确认磁盘空间是否已 经满了或者磁盘是否正处于重负中。
Connect Out
- 同步从服务器正在连接主服务器。
Copying to tmp table on disk
- 由于临时结果集大于
tmp_table_size
,正在将临时表从内存存储转为磁盘存储以节省内存。 Creating tmp table
- 正在创建临时表以存放部分查询结果。
deleting from main table
- 服务器正在执行多表删除中的第一部分,刚删除第一个表。
deleting from reference tables
- 服务器正在执行多表删除中的第二部分,正在删除其他表的记录。
Flushing tables
- 正在执行
FLUSH TABLES
,等待其他线程关闭数据表。 Killed
- 发送了一个
kill
请求给某线程,那么这个线程将会检查kill
标志位,同时会放弃下一个kill
请求。MySQL会在每次的主循环中检查kill
标志位,不过有些情况下该线程可能会过一小段才能死掉。如果该线程程被其他线程锁住了,那么kill
请求会在锁释放时马上生效。 Locked
- 被其他查询锁住了。
Sending data
- 正在处理
SELECT
查询的记录,同时正在把结果发送给客户端。 Sorting for group
- 正在为
GROUP BY
做排序。 Sorting for order
- 正在为
ORDER BY
做排序。 Opening tables
- 这个过程应该会很快,除非受到其他因素的干扰。例如,在执
ALTER TABLE
或LOCK TABLE
语句行完以前,数据表无法被其他线程打开。 正尝试打开一个表。 Removing duplicates
- 正在执行一个
SELECT DISTINCT
方式的查询,但是MySQL无法在前一个阶段优化掉那些重复的记录。因此,MySQL需要再次去掉重复的记录,然后把结果发送给客户端。 Reopen table
- 获得对一个表的锁,但是被通知到得到锁之后该表结构会发生变化。因此就先释放锁,关闭表,重新打开它
Repair by sorting
- 修复指令正在用排序算法创建索引。
Repair with keycache
- 修复指令正在利用索引缓存一个个地创建新索引。它会比
Repair by sorting
慢很多。 Searching rows for update
- 正在将符合条件的记录找出来以备更新。它必须在
UPDATE
要修改相关的记录之前就完成了。 Sleeping
- 正在等待客户端发送新请求.
System lock
- 正在等待取得一个外部系统锁。如果当前没有需要运行多个
mysqld
服务器同时来请求同一个表,那么可以通过增加--skip-external-locking
参数来禁止外部系统锁。 Upgrading lock
INSERT DELAYED
处理程序正在尝试取得一个锁表以插入新记录。Updating
- 正在搜索需要更新的记录,并正在更新。
User Lock
- 正在等待
GET_LOCK()
。 Waiting for tables
- 该线程得到通知,数据表结构已经被修改了,需要重新打开数据表以取得新的结构。然后,为了能的重新打开数据表,必须等到所有其他线 程关闭这个表。以下几种情况下会产生这个通知:
FLUSH TABLES tbl_name
,ALTER TABLE
,RENAME TABLE
,REPAIR TABLE
,ANALYZE TABLE
, 或OPTIMIZE TABLE
。 waiting for handler insert
INSERT DELAYED
已经处理完了所有待处理的插入操作,正在等待新的请求。
大部分状态对应很快的操作,只要有一个线程保持同一个状态好几秒钟,那么可能是有问题发生了,需要检查一下。
By admin
read more浅谈品牌的视觉识别
什么是品牌的视觉传达
品牌,这个熟悉而又陌生的名词,有时总会让人产生误解。品牌很广,广到一个意会颇深的战略发展理念;品牌很小,小到一个清晰可见的图形符号。关于品 牌,这里就不详细介绍了。要提到的是一套服务于品牌推广的手段CI系统(Corporate Identity System),即企业形象识别系统应运而生。CI系统是由理念识别(Mind Identify 简称MI)、行为识别(Behavior Identify简称BI)和视觉识别(Visual Identify 简称 VI)三方面所构成。
而今天想讲到的是大家熟悉的品牌的视觉识别 (vI),也就是广义品牌的一个视觉载体,即由视觉感观所接触到的为了区别于其他竞争对手的一套视觉识别系统,它的基本要素部分主要包括企业名称、企业标 志、企业标准字体、标准色彩、象征图案、企业提出的标语、企业吉祥物、专用字体。还有一部分就是应用要素,主要包括办公事物用品、企业内外部建筑环境、交 通工具、服装服饰、广告媒体、产品包装、赠送礼品、陈列展示、印刷出版物。
视觉识别的重要性
品牌的形象设计在品牌中是至关重要的,而视觉识别设计是最外在、最直接、最具有传播力和感染力的部分。最能和消费者发生关系的并不是产品,而是形象 视觉设计,你可能不使用它的产品,但绝避免不了不看到它,视觉设计的好好坏直接影响到的是整个品牌的形象。COCA COLA的玻璃瓶剪影、飘带,NIKE的勾 APPLE的缺口苹果,这些深入人心的标志、图形正是品牌形象的作用,让你认识了”它”、认知了”它”。
说到可口可乐,人们不得不感叹这个品牌的红白神话,也许很多人不知道,大家熟知的穿红白衣服的圣诞老人是可口可乐为了宣传而创作出来的,在20世纪 30年代和40年代,这一形象一直被用作该公司的广告活动中。久而久之,人们就以为圣诞老人是穿一生红白装的老人。而此之前圣诞老人的打扮是五颜六色的。 视觉识别的影响可见一般。
在可口可乐导入CI之前,常受到百事可乐的威胁。当时的图形有圆、有方;颜色有红,也有黄,极容易导致形象混乱。于是,公司决定放弃用了80年的旧 目标。在保留品牌字体的基础上,重新开发视觉系统,终于成功地统一了它的形象。它那套堪称经典的识别系统和每年对这套系统宣传的巨额花费,在人们的脑子里 深深的刻下了对可口可乐的整体印象。目前几乎全球的消费者都是通过四个核心要素素得到可口可乐的整体印象:(1)COCA-COIA的期宾塞体标准字形; (2)与白色字体形成强劲对比的红色标准色;(3)流动的水线。 (4) 独特的可乐瓶形
实际上可口可乐在全球几乎每经历几年就会对商标及包装等一系列 VI识别系统的内容进行修改和更新,以适应不断变化的时市场口味。但始终牢牢把握着一种格调与风格贯彻其中。这种变化保持着一种渐进的尺度,即革新的同时 审慎的保留先前积累的品牌资产可,使视觉识别系统的演变路径呈现出优美的过渡,没有断裂和跳跃。
我想最近可口可乐给我们的印象深刻的是为奥运会推出的这组朝上喷出的海报,
;
然而这组图形创意在早些时期就已形成,应用变化之多让人眼前一亮。
虽然风格迥异,却始终迈着一致的步伐来传达可口可乐的百年经典。识别视觉的成功运用让人一眼就能认知,这我想就是品牌的力量也是品牌的价值所在。
如今的可口可乐品牌价值在500亿美元左右,除了有优秀的产品和优秀的营销策略之外,视觉识别系统上的成功更是起到了不可忽视的作用。
全球品牌成功的企业不胜枚举,凡是成功的品牌身后总有那么一套优秀的识别系统支撑着,耐克最初花38美元的勾型标志为其创造了如今120亿的品牌价 值。我想当初那个设计者也想不到自己当初在学校接的私单能有今天这样的成绩。而做为视觉设计执行的我们,是否该把握我们目前的机会,设计好手头的东西。
对于QQ会员,做为腾讯旗下的一个子品牌,一个由网络产品引申出的增值服务产品。慢慢由QQ的增值服务走近我们的生活,走向线下。他给用户带来的映 像是: “尊贵”– 首先能肯定,开通了QQ会员会得到更多服务,这是基于普通QQ用户的,所以也可以说是得到一种尊贵的体验。 “特权”– 不管是线下还是线上,体现尊贵最实质的方式就是各种特权。
QQ会员现在的服务除了之前的线上特权,还多了生活类,游戏类,风格的跨度也是比较大。而在视觉上,一个红毛公仔作为QQ会员的logo一直沿用至 今,红色也被定位QQ会员的特有表现色,代表特权,代表尊贵。那么我们要怎么运用这两个元素,才能让用户更加清晰我们的品牌形象。
在此不得不说到苹果,也许可口可乐,百事等一直是处于同种范围的推广,但苹果的产品就不是这么单一了,苹果的logo最早是很复杂的,牛顿坐在苹果 树下读书的一个图案,上下有飘带缠绕,写着Apple Computer Co.字样(当时还没有上市,所以用Co.而不是现在的Inc.),外框上则使用了英国诗人William Wordsworth的短诗。不过这个牛顿徽标只用了很短的时间,乔布斯嫌它过于复杂,不易复制传播,于是就有了今天的这个被咬掉一口的苹果图案。 2003年,苹果进行了标识更换,将原有的彩色苹果换成了一个半透明的、泛着金属光泽的银灰色LOGO。苹果的产品覆盖到很多行业,但不管是手机 iPhone,音乐播放器iPod,电脑iMac,软件iTunes等等,虽然种类繁多,但都有很好的视觉统一,看到银色的质感,简约的设计,再有就是一 个缺口的苹果logo,很彰显其品牌形象。
By admin
read more模式化窗口
先让我们看一个例子,了解什么是模式化窗口。
以下是QQ秀商城在非登录时提示登录的一种状态。当我在非登录状态,通过保存形象的方式买一件衣服时,弹出登录对话窗口提示登录。此时,登录对话窗 口锁定商城页,锁定IE,只有当对登录窗口进行操作后,才能够进行其他操作。譬如:最小化IE、浏览商城等。我们可以说,登录对话窗口就是一种模式化窗 口。
模式化窗口常常给人“坏”的印象,为什么“坏”?是因为它“长”成那个样子?还是因为它通常都说些没用的话,所以用户都不看其中的内容?如果换成一 个浮动层DIV,它就变“好”了?就模式化窗口的形式和“好坏”问题,我们进行了讨论。
为什么大家会认为它“坏”? 西贝:“以前系统弹出对话框,用户看不懂,或者不看,给用户的印象大多是一种警告。因此感觉很坏,对用户来讲,很暴力。”(呵呵,可以引用最近流行的,很 陈,很冠希了。)Eele:“当我在填一些注册信息时,需要从另外一页复制一些内容,这个时候弹出alert无法到另一页。”(这种情况我也遇到 过~~)Hiseven:“以前有一些网站,有bug,弹出‘无数’确定对话框,必须全部确定才能进行下一步的操作,于是开始点击一个又一个的确定。” (嗯,尤其是那种让我点击连续的确定,但是不断弹出确定的那种垃圾网站,让我几近崩溃的边缘~~)
臭鱼:“屏幕上出现不止一个叉子按钮,却只有一个可以点击,如photoshop。”
臭鱼:“IE7开始了,所有的浏览器都有tabs了。多个网页在一个浏览器中打开,如果在一个页面中出现了模式化窗口,要切换到其他页面都做不到 了。”
臭鱼:“有的时候只要提示,不需要操作。”Gmail只提示:
QQ空间上传成功的模式化窗口:
aaron:“应与开发制定一个规范,不一定模式化的东西就差,看情况。”(由此引出下面的话题~~)
模式化窗口分几类?
A类:3锁死2,锁死1,不完成3的操作,就不能进行其他操作。 B类:3锁死2,但不锁死1。(1通常是IE浏览器) C类:弹出3,可以进行2的操作和1上的其他操作。
什么情况下需要A类的,什么情况下需要B类的,什么情况下需要C类的?
aaron:“格式化磁盘,二次确认时需要A类。” 西贝:“与下页的操作息息相关,不进行判断,下步操作就不能进行操作时,需要A类。” 臭鱼:“对网页来讲,当前页锁定即可,不用alert锁定整个浏览器。属于B类” Hiseven:“对于网页来讲,都可以改成C类的形式,不用那么暴力。” Hiseven:“A类,在操作过程中,如安装,有取消按钮必须很明确。在C类形式,如QQ秀中“身上品”,有叉的形式表示关闭,不需要取消。”
小结一下:暂且把模式化窗口分为A类、B类和C类,A类比B类和C类要暴力,但是更安全。B类和C类更容易让用户操作。通常A类都用于非常重要的信 息时使用。欢迎大家进行补充~
By admin
read more产品交互原型设计工具分享
交互设计师的一项重要工作就是进行产品原型设计(Prototype Design)。而产品原型设计最基础的工作,就是画出站点的大体wireframe(框架图)并结合批注、大量的说明以及流程图等,将自己的产品原型完 整而准确的表述给产品、UI、重构/开发工程师等等,并通过沟通反复修改prototype 直至最终确认,然后进入后续的设计开发流程。
要完成以上复杂的设计和沟通工作,需要一个好的原型设计工具。这里就目前常用的和比较热门的工具来分享一下: Word(产品经理比较常用) Fireworks(交互组内推广的) Balsamiq Mockups(近期曝光率比较高) Auxre RP(业界圈子内广为流传)
一、优势劣势对比
二、操作界面对比
Word:基本是通过绘图工具栏的各种线框来画wireframe。
Fireworks:通过公共库的WEB原型组件库画wireframe。
Balsamiq Mockups:操作类似FW,通过顶部的控件库拉取到工作区域画wireframe。
Auxre RP:基本操作也和FW,Mockups类似,3是工作区域,从5控件库里拉取到工作区域画wireframe。
控件库内含了许多会经常使用到的widget物件,例如:按钮(Button)、图片(Image)、文字面板(Text Panel)、单选按钮(Radio Button)、复选框(Checkbox)、下拉式选单(Droplist)。甚至可以藉由Dynamic Panel的功能,来设计动态介面,例如:下拉式选单、页签,甚至是更进阶的AJAX或RIA的功能。
Axure RP相对于其他原型工具,比较有特色的有以下几个方面:
·区域4站点地图(页面列表)
可以自动根据页面列表,快速绘制树状的网站架构图,而且可以让架构图中的每一个页面节点,直接连结到对应网页。
·区域6 Masters共用模板功能。 在设计Wireframe时,如果能善用Masters共用模板功能,您可以节省下不少重复修改的时间,Master可以是经常被使用到的widget集 合,例如:页首、页尾、或是一个登入的画面。
·区域8为高级交互操作区域 Wireframe里的大多数的widget可以对一个或多个事件产生动作,包括 OnClick、OnMouseOver和OnMouseLeave诸如此类。模拟出逼真的交互工作,十分方面的进行演示和讲解。
·自动输出网站原型 (HTML Prototype) Axure RP可以将您设计的wireframe,输出成符合Internet Explorer或Firefox等不同浏览器的HTML prototype。
也就是说,您不需要安装Axure RP或任何其它软件,就可直接将产生的Prototype档案email给客户,或是发布到网页服务器让客户或使用者检视和操作,Prototype包括 Sitemap、Page Notes、Annotations和功能性的交互效果,是一个能有效测试所提议的功能和清楚沟通设计的工具。
·自动输出Word格式规格文件(Functional Specification)
Axure RP可以输出Microsoft Word的格式的文件,不只容易阅读,更可以展现规格文件的专业,能有效的记录、沟通和取得设计的最后确认。
规格文件包含了目录、网页清单、网页和附有批注的Master、撷取的画面、Annotation、Interaction和Widget特定的信 息,以及结尾文件(例如:附录),规格的内容与格式也可以依据不同的阅读物件来变更。
三、实例操作对比
这里,我们利用以上各工具,实际操作一次,制作一个简单的原型设计实例,看看各个工具的表现。 我们将实际制作一个Tab View的例子。
Word:
不足:对交互表达不好,也不利于演示。(一个基本的页面要分3页,且一页一页看才能表达交互效果);没有标准样式,各种线框画的很随意。
FW:页面效果同Word。
不足:对交互表达不好,也不利于演示。(一个基本的页面要分3页,且一页一页看才能表达交互效果);控件的扩展和修改不便利。
Balsamiq Mockups:
不足:对交互表达不好,也不利于演示。(一个基本的页面要分3页,且一页一页看才能表达交互效果);输出界面手绘风格,随意性较大。
Axure RP:基本的外观和Word、FW相差不大。
但最奇妙的是他能生成一个真实的页面,可以演示Tab切换的效果,同时生成一份word格式的交互说明文档(实例暂不提供下载)。
四、总结 通过以上几个方面的比较,4个原型工具在绘制wireframe的基本操作上不相上下,各具特色。但Axure RP快捷而简便的创建基于目录组织的原型文档、功能说明、交互界面以及带注释的wireframe网页,并可自动生成用于演示的网页文件和word文档, 以提供演示与开发等方面完胜,我们给于其★★★★★评价,不愧为产品经理基本基本原型设计和交互设计师做快速高保真原型的一把利器。
By admin
read moreIE6局部调用PNG32以上的合并图片
为满足用户的视觉追求及产品的背景图片的换肤功能,设计师难免在设计上会用到半透明的效果。因此页面重构师基于视觉及产品的需要,采用了PNG32 的半透明图片还原设计稿。
但在IE6中遇到png兼容性,及其延伸的种种问题。如:
- png32的图片上在IE6有兼容性问题,原本的透明显示的背景将会失效。
- 在问题1的基础上,针对IE6采用了CSS滤镜让其透明,但图片不能应用背景坐标定位的方式只能单张使用,这做法不利于带宽流量和请求链接数之余 也不利样式的管理
- 在问题2的基础上,意味着要把png图片单张切割,并单张应用CSS滤镜
针对以上问题重构师的解决办法如下:
把背景图片如常的合并,利用相似于背景坐标的方式调用局部图片位置。最大区别在于分别定义了两个无意义的标签。
- 一个标签作为模拟背景的载体标签:定义一个作为载体的标签,针对IE6以滤镜的形式导入图片,宽高与背景一 致。
- 另一个标签作为截取背景局部位置的截取标签:定义此标签宽高与预想调用背景局部位置大小一致,并隐藏其溢出的 部份。
- 最后计算出预想调用背景局部位置的坐标,定义在载体标签中。
HTML结构如下:
view plain copy to clipboard print ?
- <divtitle=“截取”>
- <divtitle=“载体”>div>
- div>
<div title="截取">
<div title="载体"></div>
</div>
为了清晰的体现HTML结构,给标签添加了title属性,加以说明。本文实例:DEMO
实现步骤(分3步):
- 载体标签:定义一个作为载体的标签,针对IE6以滤镜的形式导入图片,宽高与背景一致。 (注意:滤镜图片路径相对于页面,而不是CSS的位置)
view plain copy to clipboard print ?
- <divtitle=“载体”style=“width:440px;height:440px; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=’bg.png’);”>div>
<div title="载体" style="width:440px;height:440px; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='bg.png');"></div>
- 截取标签:定义此标签宽高与预想调用背景局部位置大小一致,并隐藏其溢出的部份。
view plain copy to clipboard print ?
- <divtitle=“截取”style=” overflow:hidden; width:120px; height:120px;”>div>
<div title="截取" style=" overflow:hidden; width:120px; height:120px;"></div>
- 最后计算出预想调用背景局部位置的坐标,定义在载体标签中。 (背景局部位置坐标的调整可用margin或position控制。下面以”I”为例) margin
view plain copy to clipboard print ?
- <divtitle=“载体”style=“margin:-80px 0 0 -120px;width:440px;height:440px; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=’bg.png’);”>div>
<div title="载体" style="margin:-80px 0 0 -120px;width:440px;height:440px; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='bg.png');"></div>
position
By admin
read more从宜家的家具设计讲模块化
很久之前就知道 宜家 ,以前在广州的时候也去过一次,给我的印象就是:大、贵、巧。地方很大,东西很贵,设计很巧。现在住的地方离宜家不远,这个月找时间去逛了下,地方还是那 么大,东西还是那么贵,设计还是那么的巧。虽然没有买什么东西,不过也还是有所收获的,通过宜家的家具设计方法,我们可以聊聊模块化。
去过宜家的同学应该都有注意到,宜家的家具基本都是组合的,可拆装。模块化的特点也是这样,可以组合,相对独立,在需要的时候可以很方便的加上。那 怎么写可以基本实现这种方式呢?给个简单的例子:
`
模块化Demo
模块化结构的例子。
`
对应的CSS可以这么写:
`.mode-a{…}
.mode-a h3{…}
.mode-a p{…}
`
其中“mode-a”就是这个模块的名称,表示这是名为“a”的模块,现在这个模块可以被放到你所需要的地方。既然是做模块,就不会只有一个,我们 再加一个“mode-b”:
`
模块化Demo
模块化的特点:
相对独立
可移植性高
`
对应的CSS可以这么写:
`.mode-b{…}
.mode-b h3{…}
.mode-b div{…}
.mode-b h4{…}
.mode-b ul li{…}
`
实际应用中大多需要加一些classname来减少类定义的复杂度,这个例子比较简单,但足以说明模块化的特点。上面两个模块可同时被使用到一个或 多个页面中。
在宜家的卖场中,也许你也注意到了,基本是以设计师来划分商品区的,特别是那些小件的商品。模块化后的代码也可以被分配给不同的人进行编写,提高效 率。当然要实现这种方式,我们也需要做些工作,如模块的命名规范、模块中哪些地方是需要留接口的等等。如上面的例子中可以约定的就有:命名以“mode” 开头,模块标题使用h3标签。这样不管是哪个人写出来的模块都可兼容项目中的页面。
看到这你可能会发现,既然上面已经约定了模块固定的结构,每个模块的样式定义中所写的这一部分不就是冗余的吗?是的。如果已经形成相关的约定,这部 分的样式定义可以被提出来放到项目的公共定义中,减少代码的冗余。如上面的例子可以变成:
`/* =S global */
h3{
/* 第一种写法 */
…
}
.mode-a h3,
.mode-b h3{
/* 第二种写法 */
…
}
/* =E global */
/* =S mode-a */
.mode-a{…}
.mode-a p{…}
/* =E mode-a */
/* =S mode-b */
By admin
read more谈CSS书写风格
随着公司业务的增加,需求变的越来越多,团队也因此在不断的扩大,我们经常会遇到几个人协同工作来完成同一件作品或者维护修改别人作品的时候,那么 是什么最让你最感到困扰呢?我们在实现一个表现复杂的页面的同时,CSS文件就会比较繁琐,众多的选择符、属性让人眼花缭乱,那么如何更快的定位、如何更 高效的编写样式呢?CSS的书写被很多人所忽略。关于书写风格,翻看了一些知名网站的作品,发现横向连排几乎成为各大产品项目的主流,然而,每个人对于 CSS的写法各异,这就导致我们工作效率的降低。为了更好的协同工作,保持团队内CSS书写的一致性,几经波折后达成共识,具体书写方法如下:CSS属性 横排书写,选择符纵排书写,每个”,”(逗号)后必须换行;
重构组代码书写规范示例:(其中数字只用做示范,实际应用中不建议用数字命名。)
.class_name_1 .class_name_1_1, .class_name_2 .class_name_2_1 .class_name_2_1_1, .class_name_3{style1:value; style2:value; styel3:value; }
有人说,好代码就是用记事本打开也是艺术品,而样式文件本身就是设计作品。目前并没有一个权威来界定这种规范,我们只能对两种写法做个简单的总结。
就样式文件本身对比:
纵向书写特点:
- 每个CSS属性独立一行,一般不会出现换行或横向滚动条。
- 可以通过firebug等工具查找到模块,在DW中ctrl+g行定位,修改方便。
- 属性段落间有缩进,保证了代码的整洁,层次清楚,符合编程语言代码规范,修改更加直观。
**存在的问题:**代码冗余(如空格符、tab符、换行符);文件大小增加;容易出现纵向滚动条。
横向书写特点:
- 最大化的利用了空间,单屏内能显示更多,减小了纵向滚动条出现的几率,能够快速捕获较多的信息。
- 减小了文件大小,省去了不必要的空格、换行等。
- 横向书写方便分块以及注释,便于查看CSS结构,选择符一目了然。当今显示器正朝着越来越大,越来越宽发展,基本上一行内可以显示完全。
- 加快编写CSS速度,不用每次敲换行和tab,并且减少拉动滚动条的次数。
- 如果是活动页,不用作压缩处理。使用CSS optimizers 来优化CSS是提倡的,但是使用横向书写,基本上不存在多余的空格和换行,因此可以不用压缩,这样效率和能力都会得到提高。
- 便于阅读和查找相关结构。代码编辑器对同行数定位做的都比较好,因此我们要解决的是如何快速纵向定位目标。横向书写时选择符纵向对齐,再加上 .class_name_2 .class_name_2_1 .class_name_2_1_1的选择符层次分明,因此很容易定位到目标。 在调试小Bug的时候就可以直接打开CSS更改,不用再打开firebug去找到模块。
- 横向书写,是基于CSS选择符的写法,层次容易对比,更利于模块化。对整体CSS规划有好处,后期维护成本低。
- 便于不同版本的CSS代码对比。
**存在的问题:**书写过密,从而影响阅读。这种弊端显而易见,但只要优化做到家,这种状况会很少。
尽管对于现如今的带宽来说,网页文件那仅以K为单位的大小实在是微不足道,但如何将这以K来计算的网页文件精简到最小还是网页设计师们应该考虑的问 题之一。而横向书写省去了不必要的空格、换行等,大大减小了文件大小。我们不能说哪种书写是对的,至于具体采用哪种写法依个人选择,当然 改变习惯可能会影响一个人的工作效率,那我们提倡的是:提交的CSS样式文件是经过代码格式化的,而这个工作可以完全交给DW等工具,我们只要点击一下, 整个文件就会像我们想象的那样呈现出来。这样的代码看起来很舒服,修改容易,团队成员在后续交接也会变得更加顺利。
PS: Dreamweaver下代码格式的设置方法
By admin
read more你是一个职业的页面重构工作者吗?
做为一个专职的页面重构者,我们从事的工作简单的说就是“将设计稿转换成WEB页面”,这一过程可以很简单到直接把PSD从PS里导出成网页;也可复杂到需要考虑页面中每个标签的使用,考虑“页面性能”。以“前端工程 师”为目标的同学可能会不愿承认将页面重构这块分出来,但随着工种的细分,加上页面重构本身的专业性,独立为一个职业也不是不可能,至少我现在从事的就是 一个专职的职位。如果你觉得一个前端工程师必须去画设计稿,可以不理会下面的内容。
单纯的页面重构,所涉及到的工作内容一般是“分析设计稿=>切图=>写HTML和CSS”,虽然看 起来很少,但要做好这份工作,绝非所想的那么容易。原因很简单:工作内容单一,在时间和工作量上必会很苛刻,往往跟设计师的工作时间是3:1,即设计师给 三天的时间,制作只给一天的时间完成;在这种工作强度下,很多人都是靠着对这份工作的喜爱在维持着,一旦工作热情消失,很容易就会变得枯燥,保持热情也成 了重构工作者(也许是所有参加工作的人)应该具备的能力。
跟“前端工程师”所要求的有所不同,“页面重构”虽然也是“前端工程师”的一个范畴,在职业化中,对专职的页面重构者,要求当然也更高。不单是做出 页面,而是做出好页面。又引出另一个话题,“何为好页面?”,一般包括下面几点:
- 结构完整,可通过标准验证
- 标签语义化,结构合理
- 充分考虑到页面在站点中的“作用和重要性”,并对其进行有针对性的优化
很多同学多少都遇到过方向不明,不知道自己应该提高些什么,我们可以从“分析设计稿=>切图=>写HTML和CSS”这个工作内容,针 对每一点提出一些要求,以方便我们分析自己的能力水平,为继续提高确定个方向:
一,设计稿的分析
设计稿的分析是指对设计稿如何制作成页面的分析,即哪一块的内容可以做为公共的部分、哪一块的内容结构可以如何实现等。对设计稿的分析能力可以划分 成下面的几个阶段:
- 能分清设计稿中的公共与私有的部分
- 在1的基础上对各部分的实现方式有一个初步的方案(包括如何切图、写结构、写样式)
- 在1的基础上,准确的给出各部分的实现方案(包括如何切图、写结构、写样式)
- 在3的基础上,能同时考虑方案的扩展性、复用性及页面性能(包括如何切图、写结构、写样式)
- 在4的基础上,考虑整站的结构分布(包括文件分布、目录结构)
上面这些都是在还没开始动手制作之前所要做的。
二,切图
切图是指将设计稿切成便于制作成页面的图片。都有个误区,觉得切图就是把图片切出来,其实并不完全是这样,还包括把切出来的图片合并到一起,怎么 切、从哪切才能将性能最大化,说“切图是一门艺术”完全不为过。切图也可以划分成几个阶段:
- 切成所需要的图片(如何将需要的部分切出来)
- 在1的基础上,对切出来的图片进行一些优化(包括压缩文件大小、选择图片类型)
- 在2的基础上,规划切出来的图片(包括文件分布)
- 在3的基础上,考虑整体的性能(包括合并图片、压缩文件大小)
HTML和CSS的编写
HTML和CSS的编写是指将上面完成的内容,通过HTML和CSS的编写,将设计稿转换成WEB页面最重要的一块,也是我们所要重点掌握的内容, 把它们放在一起,是因为它们相互的关联性太强,HTML的写法会影响到CSS的写法,它又可以划分成下面几个阶段:
- 还原设计稿视觉效果,并通过标准验证(HTML)
- 在1的基础上,实现多浏览器的兼容(HTML)
- 在2的基础上,标签语义化(HTML)
- 在3的基础上,选择较优的实现方式(包括模块化结构,方便程序脚本使用,HTML和CSS)
- 在4的基础上,考虑到扩展性、复用性和可维护性(HTML和CSS)
- 在5的基础上,考虑到整站的样式分布(包括如何实现分布)
- 在6的基础上,样式写法的优化(包括技巧的应用)
是对所遇到问题的解决能力,这一点在不同的阶段都可能会遇到,所以没有写到上面。
如果你已经达到或超过3、4、5,恭喜你,你已经是一个职业的“页面重构工作者”了。为了我们自身的发展,关注新技术、技术创新、提高用户体验、审 美观、程序脚本的实现方式等,也是十分必要的。大家一起进步吧。
By admin
read more用户研究方法——用户测试法
“这是什么啊,用不明白,体验太差了!”、“在哪里登录?找不到啊!”、“谁知道这是个按钮可以点啊,像个图片!”在产品体验中,我们经常会听到这 样那样有关产品体验的声音。而主动并客观地去发现这些问题(可用性问题)的方法之一,就是我们今天要介绍的用户研究方法之一——用户测试法。
什么是用户测试?通俗地讲,用户测试就是通过给用户制定任务,在用户执行任务的过程中,发现产品设计的不足,并为产品优化提供依据的一种方法。
通常情况下,根据目的不同,用户测试可以是定性地发现问题、也可以是定量地比较两个竞品的优劣。根据测试产品特点不同,可以采用边做边说的用户测 试、也可以采用回顾式用户测试、甚至可以采用协同式用户测试等。用户测试可以用于产品设计阶段测试产品低保真原型、也可以用于产品测试阶段在发布前发现重 大的可以优化的可用性问题、还可以用于产品发布以后,为下一个版本的优化提供依据。
一般情况下,根据ISD产品特点、时间等条件的限制,在产品测试阶段或者产品发布以后以发现可用性问题为主的边做边说用户测试较为常见。下面将以迷 你屋用户测试为例,来说明如何进行一场简单的以发现问题为主的边说边做法用户测试。
迷你屋用户测试主要经历了测试前的准备、进行测试、测试后总结三个阶段:
第一阶段:测试前的准备 1.编写测试脚本 测试脚本主要指用户测试的一个提纲。测试脚本最基本的就是制定测试任务。任务的制定一般由简至难,或者根据场景来制定。
迷你屋中,基于用户场景制定了以下三个任务: ● 装扮一个迷你屋 ● 在迷你屋中冒泡 ● 让好友的QQ秀形象展现在自己的迷你屋中
2.用户招募+体验室的预定 用户是必不可少的,进行一场用户测试一般需要6~8人,根据具体情况可以逐情增减。用户要选择目标用户,也就是产品的最终使用者或者是潜在使用者:如年龄 要符合产品的目标年龄层、男女比例要符合产品目标用户比例,并且将来会使用或者是很可能使用该产品的目标用户。根据测试目的不同,也要根据需要,选择新手 用户、普通用户或者高级用户。在用户招募困难或者时间紧等情况下,如果只是简单的为了发现产品中存在哪些可用性问题,降低用户标准也是一种可行的方式:如 公司内部员工充当用户等。
正规的情况下用户测试需要在体验室进行,不仅需要录音,录屏,还需要观察人员观察用户的具体操作,并做详细的记录,因此,在用户测试前需要进行体验 室的预定。在非正式的情况下,一台笔记本电脑,一间会议室,也可以进行用户测试,这种测试虽然简单,但是足以完成对基本可用性问题的发现。
迷你屋用户测试的目的就是为了发现问题。公司内部员工(非互联网业务系统人员)对迷你屋产品设计始终了解甚少,完全可以作为目标用户参与测试。因 此,选择用户时,选择了2名公司内部员工+2名学生用户,其中2名有旧版迷你屋使用经验,2名无旧版迷你屋使用经验。这4名用户发现的问题重叠率高,且发 现的问题基本处于收敛状态(没有新问题的发现),因此,4名用户足以说明问题。
用户情况如下表:
第二阶段:进行测试 一切准备就绪,就可以开始进行用户测试了。测试时需要一名主持人在测试间主持测试,1~2名观察人员在观察间进行观察记录。测试过程需要录音、录屏,以备 后期分析。测试时,尽量不对用户做太多的引导,以免影响测试效果。
迷你屋用户测试由1名主持人(snow)主持和一名观察人员(西贝)进行观察记录。主要经历了以下过程: 1、向用户介绍测试目的、测试时间、测试流程及测试规则。 2、用户签署保密协议+用户基本信息表。 3、让用户执行任务:给用户营造一种氛围,让用户假定在真实的环境下使用迷你屋。并让用户在执行任务的过程中,尽可能地边做边说,说出自己操作时的想法和 感受。 举例: 假设你现在在家里上网,听你的好朋友说,迷你屋有新版本了,并且告诉你迷你屋新商城的网站是home.qq.com,您很好奇,于是敲入网址,打算装扮一 个属于自己的迷你屋。 4、用户反馈收集。基于用户执行过程中的疑惑进行用户访谈,收集原因。 5、致谢!
第三阶段:测试后总结 测试后需要进行测试报告的撰写并开会将测试结果与相关人员进行分享。 主持人与观察人员要进行即时的沟通,确定致命的可用性问题与一般的可用性问题,并汇总简要的测试报告,以抛出问题为主,不做过多的建议。报告确认后,召开 会议,将测试结果与产品经理、交互设计、页面制作、开发、测试人员进行分享。确定在产品发布前需要进行优化的具体问题,并将对应的问题分类,确定解决问题 的关键人。(如交互设计可能需要重新设计的具体问题、产品开发人员直接在原有基础上修改等)
下例为迷你屋简要测试报告的一部分:
迷你屋经过用户测试后,将登录、“装扮迷你屋”按钮、QQ空间入口、QQ空间到迷你屋商城入口等一系列问题进行了优化。
以下为测试前后设计优化对比示例:
迷你屋装扮入口
迷你屋暂存:
小结 用户测试是一种反复迭代的过程,在进行完新一轮的设计优化后,可能还会产生新的可用性问题。因此,将新一轮的设计进行迭代的用户测试,是未来的一种发展方 向。
By admin
read more关于导航的探讨
许多网站缺乏针对性和友好的导航设计,难以找到连接到相关网页的路径,也没有提供有助于让访客/用户找到所需信息的帮助,用户体验非常糟糕。这篇文 章,我们尝试就网站导航交互做一些探讨。
首先对于WEB交互设计师来说,解决上面遇到的问题,使之简单的方法是设计一套完善的网页导航系统。
优化网站导航设计的目的
一个网站导航设计对提供丰富友好的用户体验有至关重要的地位,简单直观的导航不仅能提高网站易用性,而且在方便用户找到所要的信息后,可有助提高用 户转化率。 如果把主页比作网站门面,那么导航就是通道,这些通道走向网站的每个角落,导航的设计是否合理对于一个网站是具有非常大意义的。
1) 决定用户在网站中穿梭浏览的体验,这一点是最基本的。 2) 网站导航设计合理,可以将网站的内容和服务最大面积的展现在用户面前。 3) 合理的导航设计可以增加用户黏性,提高网站的浏览深度,从而提高网站PV值。 4) 促进用户消费,提高网站盈利。引导用户消费,将用户真正需要的产品和服务展示在他面前,甚至用户想不到的服务你也呈现。 5) 提高网站广告价值,增加网站广告收益。 ……
网站导航的常见结构
雅虎的网页设计一直是国内众门户模仿的对象,我们首先来看看Yahoo网站现有的几种导航样式: 1) Yahoo首页 (最常用的栏目导航)
Yahoo首页左侧的导航列出了网站最常用(或访问最频繁,或网站运营最想让用户知道)的几个栏目。这种导航(也包括网页顶部横向结构)是目前互联 网中使用最广泛的导航方式。
2) More Yahoo!Services (更多的导航信息的展现)
Yahoo作为一个全球大型综合门户网站,所提供的服务肯定不止首页左侧导航显示的那几个,那么更多的服务如何导航?同时又如何展现给用户呢?于是 Yahoo的设计师们给我我们一种解决方案,如上图,点击 从网页左侧展开一浮出层样式的服务导航页面。可以发现,这种导航也是多维度的(下面我们会专门探讨)
3) Tab式位置导航变体
我们还可以在Yahoo!TV 等栏目上发现这样有趣的导航结构,我们暂且认为他是Tab 式结构加上一个下拉菜单的一种导航组合。 nTV Home – Shows – American Idol – Overview 组成了一个单维度的导航 nTV Home同时提供了下拉菜单方便用户快速的转到其二级栏目下。 (这里我遇到一个困惑,在这里我不知道怎么TV Home上一级的目录是什么,也不知道如何返回。)
4) Amazon首页
Amazon可以说是在网络产品导航上的鼻祖了,让我们再来看看Amazon的导航样式又有什么特色。
看看它和谁最像?
5) Amazon购物列表页面
由Amazon购物列表页引申的讨论:
单一维度 和 多维度的导航结构
我们通常认为面包屑导航为单一维度的导航结构,如上图红色实线框所示,即它是一种线性的导航方式。不过在网页的应用中,“面包屑”导航的应用有两 种: a)“追溯来路”即跟踪用户行为,记录的用户在网站的活动足迹的一种“线性导航”, b)用来表达内容归属关系的界面元素,也就是我们经常看到的“主分类>一级分类>二级分类>三级分类>……>最终内容页 面”这样的层级归属关系.
By admin
read more全方位清理浮动
清除浮动一个凡是做页面的人都会遇到的一个东西,但是是否大家都能够清楚的知道,全方位的了解呢?于是一闲下来了马上写了这样的一篇文章,不能讲面 面俱到,然而基本能将我所知道的倾囊相授了。
我们粗略的一起来看看清除浮动的办法一共有多少个(IE里面用zoom:1就不写了,下一个专题再写)。对应的 DEMO
- 采用伪类:after进行后续空制的高度位零的伪类层清除
- 采用CSS overflow:auto的方式撑高
- 采用CSS overflow:hidden的方式产生怪异适应
- 采用display:table将对象变成table形式
- 采用div标签,以及css的clear属性
- 采用br标签,以及css的clear属性
- 采用br标签,以及其自身HTML的clear属性
粗略的看,他们都能将问题解决;然而他们另外一方面又有着各自的利弊。(一一对应)
- 优点结构语义化完全正确,不会产生其余的怪异问题。 缺点复用方式不当容易造成代码量急剧增大。 建议最外层轻浮动时使用,或清晰模块化复用方式的人使用。
- 优点结构语义化完全正确,代码量极少。 缺点多个嵌套后,点击最外层的轻浮动框会遭成最外层至最内层内容全选(FF);或者在mouseover造成宽度改变 时会出现最外层模块有滚动条(IE)。 建议内个模块使用,请勿嵌套。
- 优点结构语义化完全正确,代码量极少。 缺点内容增多时候极易不会自动换行而内容被隐藏掉。 建议宽度固定时使用,请勿嵌套。
- 优点结构语义化完全正确,代码量极少。 缺点盒模型属性已经改变,可想而知奇异事件自然多得你数都数不到。 建议如果你不想改Bug改死你的话,最好不要使用;不过可以作为alpha版本当中临时性的忽悠下测试。
- 优点代码量极少,复用性极高。 缺点完全不能完美的适应语义化,不利于改版以及需求变更。 建议初学者使用,可以让你快速的解决浮动问题。
- 优点语义化程度比第5种情况要更优;代码量极少,复用性极高。 缺点语义化依旧不完美,不利于改版以及需求变更。 建议初学者使用,可以让你快速的解决浮动问题。
- 优点语义化程度比第5、6种情况要更优;代码量最少,复用性极高。 缺点语义化依旧不完美,不利于改版以及需求变更。 建议引导初学者思维升级时使用,让其明白与其用classname来控制一种表现,倒不如回归到WEB1.0的时代的 网页直接用html属性来控制表现,毕竟后者的代码量更少。
最后,列举完毕。然而我想有必要和大家道歉,关于之前转载鬼的那篇文章;非常后悔的是当初改了鬼的标题将“最简单”改成了“最优”,以致于后面误导 了很多的同学。所以重新写了一篇给大家分享。
By admin
read more页面重构中的模块化思维
最近被“模块化”缠身,又是文章又是PPT的,被逼着想了很多相关的东西。整理下我这段时间对于“模块化”的思考,大多都是我自己从事页面重构这份 工作的经验和理解,在一定程度上存在局限性,也希望自己能温故而知新。
“模块化”只是我们对于过去一直使用的技术、方法的一个新潮的称谓,就像“Ajax”。不过做为页面重构发展的一种趋势,越来越被大家重视,不自觉 也满口的“模块化”,只是你真的理解什么是“模块化”吗?
什么是模块化?
对“模块化”的解释,在 CNKI 中就有28种。可见“模块化”思维使用的广泛。最接近页面重构中的“模块化”,现有的解释应该就是软件开发中的解释了。
先看一下百度词条是怎么解释“ 模块化 ”的:
模 块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体, 完成整个系统所要求的功能。模块具有以下几种基本属性:接口、功能、逻辑、状态,功能、状态与接口反映模块的外部特性,逻辑反映它的内部特性。在软件的体 系结构中,模块是可组合、分解和更换的单元。
相关的书籍也蛮多的,有兴趣的同学可以搜一下。需要强调一点,我们所借鉴的是一种思维的方式。
页面制作为什么需要模块化?
站点内容越来越多、代码越来越臃肿,渐渐影响到了客户端的体验(主要是打开速度),影响到了维护的效率。有什么方法可以解决这些问题呢?
我 们很容易就想到:减少代码冗余、提高代码重用率、图片压缩等等,而这些要如何实现呢?模块化思维可以解决,即可以有效减少代码冗余、提高代码重用率,更重 要是可以支持到多人维护,降低维护成本。CSS写法较为灵活,容易产生代码的耦合,使用模块化也可以在一定程度上降低耦合度,对于BUG的定位也有帮助。 所以,我们更应该在站点前期就重视并使用“模块化的思维”编写站点。
我们之前经常提到的站点性能优化,有相当一部分也是“模块化”的内容,比如提高代码重用,提高开发效率等等,“模块化”的优点还有很多,我大概列了 一下:
- 提高代码重用率
- 提高开发效率、减少沟通成本
- 降低耦合
- 降低发布风险
- 减少Bug定位时间和Fix成本
- 提高页面容错
- 更好的实现快速迭代
- 更好的支持灰度发布
其中最重要的一点,我认为是“提高代码重用率”,这也是模块化最重要的特点之一。
如何实现“模块化”?
这里的主要问题是HTML与CSS的“模块化”,我们可以看下换肤的实现方法:
- 同一类名,换文件(JS)
- 同一文件,换类名(JS)
由此可知HTML与CSS的接口实现:
- CSS引入的三种方式
- 类名
为 了更好的实现这种接口,需要有相关的(交互、设计、页面、开发)约定、规则、规范,比如:所有当前状态都使用同一个类名“nonce”,所有变灰的表现都 使用原类名后加“_n”,Tab的实现方式等等。有了这些约定、规则、规范后,HTML代码就很容易可以实现模板化,统一接口规范。
有两个误区需要先认清下:
- 模块化后并不是就能被使用在任何位置(模块化后的代码段也是有适用的范围限制,需要一个提供接口规则的环境)
- 模块化后并不是就不能再变更(模块化后的代码段可根据实际需要做修改)
完 全独立的模块放在同一项目中,由于项目有自己的表现、交互统一性,所以各模块间必定出现类似的部分,这些部分可以被提出来做为公共的定义,减少冗余,这时 就会出现耦合的问题,完全不耦合是不可能的,因此模块化中很重要一点就是“适度的耦合”。有了公共定义,就得调整模块样式的实现方式了,而这种调整也会影 响到“接口”的实现方式。
由于本篇主要是讲模块化的思维方式,具体实现的细节留待以后的文章中探讨。相关内容可以看下之前写的《从宜家的家具设计讲模块化》。欢迎一起讨论。
By admin
read more