这段时间因为Zen Coding的原因弃SciTE而选择了Notepad++,今天无意中想到了SciTE也有个缩略词展开功能,就在网上找了下,没想到SciTE的这个功能比我想像的还要强大地多,几乎可以和Zen Coding相媲美了。下面介绍下它的用法,更详细的可以参考《懒人专用--用好SciTE的缩写功能》这篇文章。
首先建立一个缩略词文件,比如想给HTML使用,那么可以建立一个html.properties文件,当然文件名称和后缀可以任意取,只要你看地懂就可以了。为了方便管理,可以在SciTE的目录下建立一个abbrev文件夹,专门用于存放缩略词文件。
在SciTE的头部菜单选项中选择打开 User Options 文件一项,在打开的SciTEUser.properties文件的最底部加上如下代码:
abbreviations.*.html=$(SciteDefaultHome)\abbrev\html.properties
上面代码中,abbreviations.*.html代码表示该缩略词文件只对后綴名为html的文件有效;$(SciteDefaultHome)表示SciTE的安装目录;\abbrev\html.properties表示缩略词文件相对于SciTE安装目录的位置。
SciTE的缩略词规则很简单,就是:
缩略词=完整代码
现在在新建的html.properties文件中写入如下代码:
a=<a href="">|</a>
接下来打开一个后缀名为html的文件,在里面输入a,再按快捷键Ctrl+B,刚才的字母a就被替换成了<a href=”"></a>,而光标会自动定位到代码<a href="">和</a>之间,也就是在上面定义的缩略词代码中|所在的位置。
继续阅读 →

Tutsplus里面有很多精品教程,今天介绍的教程是关于字体设计的,可爱的绿叶加上可爱的甲壳虫,让人看了爱不释鼠。
发表在 设计
|
标签为 illustrator, 字, 插画
|
我本机上已经装了IIS,占用了80端口,现在又想安装一个XAMPP,会引起端口冲突。我把XAMPP的端口改成了81,就是在XAMPP目录下的\apache\conf\httpd.conf文件中找到Listen 80一句,改成下面的代码:
Listen 81
但在启动Apachea服务器仍然失败,显示端口在忙,就问了下Google,终于找到了解决方法。
XAMPP默认会加载一个SSL模块,它要占用一个443端口,这会与其它占用这个端口的程序引发冲突。解决这个问题有两个方法:
- 修改SSL的端口号
- 关闭SSL模块
第一种方法修改XAMPP目录下的\apache\conf\extra\httpd-ssl.conf文件,找到Listen 443一句,把默认端口443修改成其它值。
第二种方法修改XAMPP目录下的\apache\conf\httpd.conf文件,在文件的尾部会发现下面这样的代码:
Include conf/extra/httpd-ssl.conf
#
# Note: The following must must be present to support
# starting without SSL on platforms with no /dev/random equivalent
# but a statically compiled-in mod_ssl.
#
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
把这段代码注释掉就可以关闭SSL模块了,如下:
#Include conf/extra/httpd-ssl.conf
#
# Note: The following must must be present to support
# starting without SSL on platforms with no /dev/random equivalent
# but a statically compiled-in mod_ssl.
#
#<IfModule ssl_module>
#SSLRandomSeed startup builtin
#SSLRandomSeed connect builtin
#</IfModule>
继续阅读 →
发表在 软件
|
标签为 php, xampp
|
无论HTML5能否成为Flash的杀手,也不管现在它是否成熟,以目前的情况来看掌握它都是必需的。
HTML5添加了很多功能更强,也更语义化的标签,但也删除了一些HTML4的标签,如:font和center。HTML5新引入的HTML元素包括:
继续阅读 →
发表在 前端
|
标签为 html5, tag
|
节选自《10个糟糕的IE Bug及其修复》,正如文章名,文章列出了主要是IE 6的Bug以及其解决方法。有不少都是已经很熟悉的了,现在只列出里面的三个放在这里做下记号。
Bicubic图片缩放
在IE中缩放图片会出现一些锯齿,显示效果不如其它浏览器。解决方法可以加入下面一段CSS代码:
img { -ms-interpolation-mode: bicubic; }
IFrame背景透明
要想在IE中把IFrame的背景设为透明,首先要把IFrame的allowTransparency属性设置为true,如下:
<iframe src="content.html" allowTransparency="true">
</iframe>
还要在CSS代码中加入如下代码:
body {
background-color:transparent;
}
禁用IE默认的垂直滚动条
默认情况下IE始终都会显示垂直滚动条,以前去除默认垂直滚动条的方法就是用JavsScript,现在看到这个方法更方便,只要在CSS代码中加入如下代码即可:
html {
overflow: auto;
}
JavaScript面向对象编程中私有成员、静态成员的实现要比Java、ActionScript、Python要复杂的多,现在摘抄一些《JavaScript设计模式》中的代码来做演示。
私有属性和方法
var Book = function(newName){
// 私有属性
var name;
// 私有方法
function checkName(name){
// ...
}
// 特权方法
this.getName = function(){
return name;
};
// 特权方法
this.setName = function(newName){
name = newName || 'No Name';
};
// 构造代码
this.setName(newName);
};
var book01 = new Book('name01');
console.log(book01.getName()); // 输出 'name01'
book01.setName('newName01');
console.log(book01.getName()); // 输出 'newName01'
在本例中用var声明私有变量,这意味着它们只存在于Book构造器,checkName函数也是用同样的方法声明的,因此成了一个私有属性。
要想访问这些私有属性和方法的函数只需声明在Book中即可,这些方法称为特权方法(privileged method),它们是公有方法,为了能够在对象外部访问这些特权函数,它们的前面都要加上关键字this。其它任何不需要直接访问私有属性的方法都可以放在像Book.prototype中声明。
继续阅读 →
像file、select、radio和checkbox这样的表单控件很难直接用CSS自定义样式,在很多网站中不得不使用浏览器已定的样式。但设计师却很希望对这些表单控件也能够使用自定义的样式,以达到作品丰富美观统一的要求。要实现这种功能一般有两个办法,一个是使用Flash或者Silverlight来替换HTML表单元素。另一个简单方便的办法就是用JavaScript,以近乎障眼法的方式来进行模拟表单元素。而且用JavaScript的方式不会破坏原HTML页面的结构,保证页面的兼容性和可访问性。
Uniform是基于jQuery的一个插件,如果你的网站已经在使用jQuery,那么用这个最合适。

Niceforms不基于任何JavaScript框架,可以独立使用,而且体积小,是个轻量的应用。

JavaScript image combobox也是一款基于jQuery的一个插件,它和jQuery Accordion Common出自同一个人。JavaScript image combobox只能自定义select的样式,但是它可以为select的每一个选项定义一个图标。

发表在 前端
|
标签为 form, UI, 表单
|
喜欢在网上看些插画,逐渐找到了些自己喜爱的风格,现在收集整理一些放在这里。
zutto
俄罗斯插画家,角色设计师。官方网站:http://www.zuttoworld.com/


Jelle Gijsberts
荷兰插画家、设计师,动画师。官方网站:http://www.jellepelle.nl/

Chris Leavens
美国艺术家。官方网站:http://www.chrisleavens.com/

在页面中的Flash如果以相对路径载入资料,这时Flash所使用的相对路径不是相对于Flash本身的,而是相对于Flash所在的页面地址。比如在http://julabs.me/text.html这个页面上有个http://julabs.me/asset/loadimg.swf的Flash文件,它要载入一张http://julabs.me/asset/flower.jpg的图片,如果在Flash中使用相对路径flower.jpg的话,那么在http://julabs.me/flash-base.html页面上你会看不到这张图片。因为这时在页面中的Flash会以页面地址做为相对路径的参照,它实际调用的图片路径已经变成了http://julabs.me/flower.jpg。
如果想让Flash一直都是以自身文件所在的路径做为相对路径的参照,那么就要在页面嵌入Flash的代码中加一个参数:base,如下:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"
height="30" width="197">
<param name="base" value="." />
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="/Website/Common/Flash/staples_djs.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#D9DC4D" />
<param name="menu" value="false" />
<param name="wmode" value="transparent" />
<embed base="." src="/Website/Common/Flash/staples_djs.swf"
wmode="transparent" menu="false" bgcolor="#D9DC4D" quality="high"
allowscriptaccess="sameDomain" type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer" height="30" width="197" />
</object>
注意在代码的param和embed中都要设置,更多的设置方法请参看Luar的《你有所不知的HTML發佈Flash的參數(三):base》。
发表在 前端
|
标签为 base, flash, 相对, 路径
|
这两天正在为Ajax同步请求会临时锁住浏览器的问题而烦恼,没想到今天在看《JavaScript设计模式》发现了解决方法,里面有一段可以自动排队的异步Ajax请求的代码范例。看到这段代码真有种众里寻她千百度,蓦然回首,那人却在灯火阑珊处的感觉,哈哈。现在把它整理下,用着慢慢用。
var QueuedHandler = function(){
this.queue = []; // 请求队列
this.requestInProgress = false; // 判断当前是否己有别的请求
this.retryDelay = 5; // 设置每次重新请求的时间,单位为秒
};
QueuedHandler.prototype = {
request:function(method,url,callback,postVars,override){
// 如果没有设置为覆盖模式,而且当前已经有别的请求
if(this.requestInProgress && !override){
this.queue.push({
method:method,
url:url,
callback:callback,
postVars:postVars
});
}else{
this.requestInProgress = true;
var xhr = this.createXhrObject();
var that = this;
xhr.onreadystatechange = function(){
if(xhr.readyState !== 4) return;
if(xhr.status === 200){
callback.success(xhr.responseText,xhr.responseXML);
// 判断请求队列是否为空,如果不为空继续下一个请求
that.advanceQueue();
}else{
callback.failure(xhr.status);
// 每过一定时间重新请求
setTimeout(function(){
that.request(method,url,callback,postVars);
},that.retryDelay * 1000);
}
};
xhr.open(method,url,true);
if(method!=='POST')postVars = null;
xhr.send(postVars);
}
},
createXhrObject:function(){
var methods = [
function(){return new XMLHttpRequest();},
function(){return new ActiveXObject('Msxml2.XMLHTTP');},
function(){return new ActiveXObject('Microsoft.XMLHTTP');},
];
for(var i=0,len=methods.length;i<len;i++){
try{
methods[i]();
}catch(e){
continue;
}
// 如果执行到这里就表明 methods[i] 是可用的
this.createXhrObject = methods[i]; // 记住这个方法,下次使用不用再判断
return methods[i]();
}
throw new Error('SimpleHandler: Could not create an XHR object.');
},
advanceQueue:function(){
if(this.queue.length === 0){
this.requestInProgress = false;
return;
}
var req = this.queue.shift();
this.request(req.method,req.url,req.callback,req.postVars,true);
}
};
继续阅读 →