博客 - 存档:三月, 2010

It’s Beautiful

2010-03-29 下午 - html/css/xml/xsl - -

点击图片查看大图

3 Comments »

理解记忆css3

2010-03-27 下午 - html/css/xml/xsl -

此文提供“靓图”对照,帮助记忆再加深印象。此文仅介绍几个可以说是比较“靠谱”的属性或值,其中包括有渐变、RGBA、文本阴影、Box 阴影、圆角。

渐变 gradient

background: -webkit-gradient(linear, 0 0, 0 100%, from(red), to(blue));

webkit引擎下,5个参数值,记住每个都需要用“逗号”隔开就是了。

  1. 渐变的类型? (linear)
  2. 渐变开始的X Y 轴坐标(0 0 – 或者left-top)
  3. 渐变结束的X Y 轴坐标(0 100% 或者left-bottom)
  4. 开始的颜色? (from(red))
  5. 结束的颜色? (to(blue))


background: -moz-linear-gradient(top, red, blue);

Gecko引擎下,只有3个参数,linear已经放到了属性前缀中了。

  1. 渐变从哪里开始? (top – 我们也可以使用度数,比如-45deg)
  2. 开始的颜色? (red)
  3. 结束的颜色? (blue)


background:linear-gradient(top, red, blue);

最后这个就是标准版本了,良好的前瞻是需要的。

还有几句要补充的:

如果你想设置超过2种以上的颜色渐变,那么可以这样写:

background: -moz-linear-gradient(top, #dedede, white 8%, red 20%);
background: -
webkit-gradient(linear, 0 0, 0 100%, from(#dedede), color-stop(8%, white), color-stop(20%, red);
background:
linear-gradient(top, #dedede, white 8%, red 20%);

对于目前还没有支持css3的渐变的浏览器,比如IE、Opear,要记住在最前面写下一个简单的背景颜色(background-color),否则看到的将是空白。

Firefox可以使用角度来设定渐变的方向,而webkit只能使用x和y轴的坐标。

最后,回到IE:

IE不支持CSS3渐变,不过好在IE有个渐变滤镜,可以实现最简单的渐变效果:

filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#ff0000'); /* IE6,IE7 */
-ms-filter: "
progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#ff0000')"; /* IE8 */

渐变的效果可能在每个浏览器里看起来都不相同,此乃正常现象。

————————————————-分割一下————————————————-

RGBA

RGBA

R\G\B 分别指颜色值,a指透明度,0(透明)-1(不透明)。

只要是与颜色值有关的属性,都可以使用RGBA。

————————————————-分割一下————————————————-

文本阴影 text-shadow

x-offset(X轴距离), y-offset(Y轴距离), blur(阴影大小), color(阴影颜色)。

x-offset数值为正那么方向右,负则向左;y-offset数值正下负上。

可以为元素设置多重的阴影,中间用“逗号”隔开就行了。

————————————————-分割一下————————————————-

Box 阴影 box-shadow

与文本阴影(text-shadow)写法是一致的,唯一区别在于添加了box-shadow的同时还别忘了火狐(Gecko引擎)用-moz-,Safari、Chrome等WebKit引擎则添加-webkit-。

照样也支持多重阴影,中间用“逗号”隔开。

————————————————-分割一下————————————————-

圆角 border-radius

与边界、填充类似,也要区分火狐(Gecko引擎),Safari、Chrome等WebKit引擎。

四个角可以设置不同值的,但要记得-moz-与-webkit-的区别。

原文地址:The Basics of CSS3

1 Comment »

纯css3实现酷炫网站icon

2010-03-26 上午 - html/css/xml/xsl - - -

css3实现网站logo小图标

预览效果:demo

上图,可不是用画图软件制作的,而是浏览器生成。惊讶吧!css3的威力,巧妙的运用了圆角边框,阴影,背景渐变…等css3新特性。赞叹之余,我也亲自的动手制作了一下,就当学习一下了。以前了解过css3,但没动手写过,发觉有些属性还真是不好记,要区分三类浏览器(Gecko 、Presto、WebKit),就越发的麻烦了。

其中不少地方的写法很新颖,充分的利用了伪类(before和after),伪类配合绝对定位,双倍边框、椭圆、三角形等写法也很受教,真真切切体会到了css3的强大,希望css3时代早日到来。

原文地址:Pure CSS social media icons

推荐阅读:pure CSS speech bubbles

2 Comments »

HTML 5 几个应用案例

2010-03-22 下午 - html/css/xml/xsl -

  光说HTML 5的强大了,贴几个应用,感受一下(请使用支持HTML5的浏览器)。

  1. Gordon

      号称:An open source Flash runtime,一个JS+SVG应用。解析SWF文件,然后播放。不需要Flash插件,不可思议!但并不是所有的flash都能解析播放的。

  2. 基于HTML 5的在线画板

      酷毙了!功能强大,画图毕后还能保存一张PNG格式的图片。

  3. SublimeVideo

      HTML 5视频的一个强大的应用。播放器的操控很便捷,播放、暂停、拖动进度、时间显示,甚至还能够全屏播放,这里的全屏是浏览器窗口的范围,不是整个屏幕。全屏后播放器的控制条还能随鼠标的状态渐隐渐显,体验真是great!

  4. HTML 5的YouTube(需要翻个“围墙”)

      最后我们再来看看伟大的YouTube,看她是如何将HTML 5付诸现实的。当然你需要有支持HTML 5的浏览器,还有H.264编码器。

  HTML 5究竟离我们还有多远,我相信不会很快。直到IE9的普及,HTMl 5才能说真正意义上的敢派上“战场”!IE6这个绊脚石都还没瓦解,谈其它的,显得有点荒谬!IE6这个话题扯远了,罢了。保持那份期待还是美好的!

2 Comments »

HTML5来了

2010-03-22 下午 - html/css/xml/xsl -

  HTML5现在火,不火就怪了。很好,很弓虽大,哈哈!希望是个“喜剧”,而且不断的“演”下去。

  先了解一下HTML5:

W3C 在 1 月 22 日发布了最新的 HTML 5 工作草案。HTML 5 工作组包括 AOL, Apple, Google, IBM, Microsoft, Mozilla, Nokia, Opera 以及数百个其他的开发商。HTML 5 中的一些新特性:嵌入音频、视频、图片的函数、客户端数据存储,以及交互式文档。其他特性包括新的页面元素,比如 <header>, <section>, <footer>, 以及 <figure>。

通过制定如何处理所有 HTML 元素以及如何从错误中恢复的精确规则,HTML 5 改进了互操作性,并减少了开发成本。

  记录HTML5标签元素相对HTML4.01标签的不同处:

未作修整的元素此表不一一列出,查看详细表格
HTML5新增标签
标签 描述
<article> 定义 article。
<aside> 定义页面内容之外的内容。
<audio> 定义声音内容。
<canvas> 定义图形。
<command> 定义命令按钮。
<datagrid> 定义树列表 (tree-list) 中的数据。
<datalist> 定义下拉列表。
<datatemplate> 定义数据模板。
<details> 定义元素的细节。
<dialog> 定义对话(会话)。
<embed> 定义外部交互内容或插件。
<event-source> 为服务器发送的事件定义目标。
<figure> 定义媒介内容的分组,以及它们的标题。
<footer> 定义 section 或 page 的页脚。
<header> 定义 section 或 page 的页眉。
<m> 定义有记号的文本。
<meter> 定义预定义范围内的度量。
<nav> 定义导航链接。
<nest> 定义数据模板中的嵌套点。
<output> 定义输出的一些类型。
<progress> 定义任何类型的任务的进度。
<rule> 为升级模板定义规则。
<section> 定义 section。
<source> 定义媒介源。
<time> 定义日期/时间。
<video> 定义视频。
HTML5删减标签
<acronym> 不支持。定义首字母缩写。
<applet> 不支持。定义 applet。
<basefont> 不支持。请使用 CSS 代替。
<big> 不支持。定义大号文本。
<center> 不支持。定义居中的文本。
<dir> 不支持。定义目录列表。
<font> 不赞成。定义文本的字体、尺寸和颜色。
<frame> 不支持。定义子窗口(框架)。
<frameset> 不支持。定义框架的集。
<isindex> 不支持。定义单行的输入域。
<noframes> 不支持。定义 noframe 部分。
<noscript> 不支持。定义 noscript 部分。
<s> 不支持。定义加删除线的文本。
<strike> 不支持。定义加删除线的文本。
<tt> 不支持。定义打字机文本。
<u> 不支持。定义下划线文本。

记录HTML5标签元素相对HTML4.01属性的不同处:

未作修整的属性此表不一一列出,查看详细表格
HTML5新增属性
属性 描述
contenteditable true、
false
设置是否允许用户编辑元素。
contentextmenu id of a menu element 给元素设置一个上下文菜单。
draggable true、
false、
auto
设置是否允许用户拖动元素。
irrelevant true、
false
设置元素是否相关。不显示非相关的元素。
ref url or elementID 引用另一个文档或本文档上另一个位置。仅在 template 属性设置时使用。
registrationmark registration mark 为元素设置拍照。可规定于任何 <rule> 元素的后代元素,除了 <nest> 元素。
template url or elementID 引用应该应用到该元素的另一个文档或本文档上另一个位置。
HTML5删减属性
acceskey a character 设置访问一个元素的键盘快捷键。不支持。HTML4.01版本已不支持。

记录HTML5标签元素相对HTML4.01事件属性的不同处:

未作修整的事件属性此表不一一列出,查看详细表格
HTML5新增事件属性
属性 描述
onabort script  发生 abort 事件时运行脚本。
onbeforeonload script  在元素加载前运行脚本。
oncontextmenu script  当菜单被触发时运行脚本。
ondrag script  只要脚本在被拖动就允许脚本。
ondragend script  在拖动操作结束时运行脚本。
ondragenter script  当元素被拖动到一个合法的放置目标时,执行脚本。
ondragleave script  当元素离开合法的放置目标时。
ondragover script  只要元素正在合法的放置目标上拖动时,就执行脚本。
ondragstart script  在拖动操作开始时执行脚本。
ondrop script  当元素正在被拖动时执行脚本。
onerror script  当元素加载的过程中出现错误时执行脚本。
onmessage script  当 message 事件触发时执行脚本。
onmousewheel script  当鼠标滚轮滚动时执行脚本。
onresize script  当元素调整大小时运行脚本。
onscroll script  当元素滚动条被滚动时执行脚本。
onunload script 当文档卸载时运行脚本。
HTML5删减事件属性
onbeforeunload script  在元素未加载前运行脚本。
onreset script  当表单重置时执行脚本。不支持。

  总结:HTML5提供了一系列新的元素和属性,并新增了新的视频和音频功能(<audio>、<video>),取消了一些过时的标签、属性、事件属性。强化了网页的表现性能,追加了本地数据库等Web应用功能。

推荐阅读:

  1. 5 Exciting Things to Look Forward to in HTML 5
  2. 各浏览器对css3和html5的兼容表
  3. 维基百科:HTML 5
  4. W3C:HTML 5
  5. Google 发布介绍 HTML 5 新特性的视频

No Comments »

你会使用html5 doctype吗?

2010-03-20 下午 - html/css/xml/xsl - - -

taobao的head里一些标签“瘦身”了!doctype、meta、script、style…让我好奇的主要是doctype的写法。

后来仔细一查,google,百度,口碑,支付宝,阿里巴巴都是这样。

为了解疑,在淘宝ued陈成的blog找到新首页开发PPT详解 —— HTML规范一文,再一对照Doctype和渲染模式对照表,疑惑解决了,同时也学到了不少的新知识。

记录一下:

html5 的 doctype:

<!DOCTYPE html>

html5 的其他标签:

<meta charset="gbk" />
<script src=""></script>
<style></style>
<link rel="stylesheet" href="" />

这种格式,所有主流浏览器都进入标准模式。这样一来就不会出现明显的兼容事件,也就无后顾之忧。不过问题还是有的,html5 doctype与图片多余空白一文就有提到——除IE7和IE6,其他支持HTML5的浏览器都在图片与容器之间出现了多余空白,并且给出了解决方法,很赞。另,iframe也受到影响,解决方法和图片一致!

最优的解决方法:

img{vertical-align:middle} /*or bottom top and so on*/

补充:

秦歌:不仅 html5 的 doctype 会引发此类问题,还有 html4.01 Strict ,这应该是标准与准标准之间的问题。

推荐阅读:

  1. 给HTML文档设置XHTML Doctype是有害的
  2. Optimizing Optimizing HTML

No Comments »

补习:跨平台的javascript事件

2010-03-20 下午 - JS/Ajax/AS - -

javascript的事件模型有三种:netscape、IE、W3C/Safari。

事件流又分冒泡型事件和捕获型事件。主要的浏览器代表是netscape、IE7及以下版本。

DOM事件流:同时支持冒泡型事件和捕获型事件。火狐、Safari、IE8等支持DOM事件流的浏览器。

以下内容仅以IE和火狐作为代表进行对比及处理。

添加、移除事件:

IE

oTarget.attachEvent("on" + sEventType, fnHandler);

oTarget.detachEvent("on" + sEventType, fnHandler);

火狐:

oTarget.addEventListener(sEventType, fnHandler, false);

oTarget.removeEventListener(sEventType, fnHandler, false);

解决方法:

function addEventHandler(oTarget, sEventType, fnHandler){
    
if(oTarget.addEventListener){
        
oTarget.addEventListener(sEventType,fnHandler,false);
    
}else if(oTarget.attachEvent){
        
oTarget.attachEvent("on" + sEventType,fnHandler);
    
}else{
        
oTarget["on" + sEventType]=fnHandler;
    
}
}
function removeEventHandler(oTarget, sEventType, fnHandler){
    
if(oTarget.removeEventListener){
        
oTarget.removeEventListener(sEventType,fnHandler,false);
    
}else if(oTarget.detachEvent){
        
oTarget.detachEvent("on" + sEventType,fnHandler);
    
}else{
        
oTarget["on" + sEventType]=null;
    
}
}

获取事件对象:

IE

IE中,事件对象是window对象的一个属性event。

window.event

火狐:

DOM标准中,event对象必须作为唯一参数传给事件处理函数。

arguments[0] 或者 直接传入参数

解决方法:

function getEvent(){
    
if(window.event){
        
return window.event;
    
}else{
        
return getEvent.caller.arguments[0];
    
}
}

注:针对火狐的方法请参考 JavaScript 获取事件对象的一个注意点

获取事件属性:

相同处:

  1. 获取事件类型(名称):oEvent.type
  2. 获取按键代码(keydown/keyup事件):oEvent.keyCode
  3. 检测是否按下了Shift、Alt、Ctrl键:oEvent.shiftKey、oEvent.altKey、oEvent.ctrlKey
  4. 获取客户端鼠标事件坐标:oEvent.clientX、oEvent.clientY
  5. 获取鼠标距屏幕边沿坐标:oEvent.screenX、oEvent.screenY

不同处:

  1. 获取目标(事件源):

    IE:oEvent.srcElement

    火狐:oEvent.target

  2. 获取字符代码:

    IE:oEvent.keyCode

    火狐:oEvent.charCode

  3. 阻止事件发生:

    IE:oEvent.returnValue = false

    火狐:oEvent.preventDefault()

  4. 停止事件冒泡:

    IE:oEvent.cancelBubble = true

    火狐:oEvent.stopPropagation()

  5. 还有一些属性仅有火狐支持,比如eventPhase、isChar、pageX、pageY、

解决方法:

function formatEvent(oEvent){
    
if (isIE && isWin) {
        
oEvent.charCode = (oEvent.type == "keypress") ? oEvent.keyCode : 0;
        
oEvent.eventPhase = 2;
        
oEvent.isChar = (oEvent.charCode > 0);
        
oEvent.pageX = oEvent.clientX + document.body.scrollLeft;
        
oEvent.pageY = oEvent.clientY + document.body.scrollTop;
        
oEvent.preventDefault = function () {
            
this.returnValue = false;
        
};
        
if (oEvent.type == "mouseout") {
            
oEvent.relatedTarget = oEvent.toElement;
        
} else if (oEvent.type == "mouseover") {
            
oEvent.relatedTarget = oEvent.fromElement;
        
}
        
oEvent.stopPropagation = function () {
            
this.cancelBubble = true;
        
};
        
oEvent.target = oEvent.srcElement;
        
oEvent.time = (new Date).getTime();
    
}
    
return oEvent;
}

最后综合起来,EventUtil对象封装起来,就很好的解决了事件的跨平台兼容了。下载:eventutil.js

此文中涉及到的浏览器检测功能,超出了本文的范围,略过!detect.js 提供代码方便下载测试。

本文参考自《javascript高级程序设计》,详细可翻阅该书籍。

1 Comment »

补习:激活浏览器模式的doctype

2010-03-19 下午 - html/css/xml/xsl - -

  内容太多,copy过来也没意思,决定留个链接,以后忘了随时再跳过去阅读。好文总是让人受益匪浅的!由衷地感谢原文作者——Henri Sivonen

  原文:Activating Browser Modes with Doctype

  译文:用doctype激活浏览器模式 – 感谢秦歌的翻译。

  主流浏览器的引擎:Names of Browser Engines

  下节准备补习:javascript事件中IE与火狐的不同之处

No Comments »