详情见:http://uicss.cn/r.php?hr=http://getfirebug.com/lite.html
{
for(var i=0; i<document.images.length; i++)
{
var img = document.images[i]
var imgName = img.src.toUpperCase()
if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
{
var imgID = (img.id) ? "id=’" + img.id + "’ " : ""
var imgClass = (img.className) ? "class=’" + img.className + "’ " : ""
var imgTitle = (img.title) ? "title=’" + img.title + "’ " : "title=’" + img.alt + "’ "
var imgStyle = "display:inline-block;" + img.style.cssText
if (img.align == "left") imgStyle = "float:left;" + imgStyle
if (img.align == "right") imgStyle = "float:right;" + imgStyle
if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
var strNewHTML = "<span " + imgID + imgClass + imgTitle
+ " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
+ "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
+ "(src=\’" + img.src + "\’, sizingMethod=’scale’);\"></span>"
img.outerHTML = strNewHTML
i = i-1
}
}
}
function alphaBackgrounds(){
var rslt = navigator.appVersion.match(/MSIE (d+.d+)/, ”);
var itsAllGood = (rslt != null && Number(rslt[1]) >= 5.5);
for (i=0; i<document.all.length; i++){
var bg = document.all[i].currentStyle.backgroundImage;
if (bg){
if (bg.match(/.png/i) != null){
var mypng = bg.substring(5,bg.length-2);
document.all[i].style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=’"+mypng+"’, sizingMethod=’crop’)";
document.all[i].style.backgroundImage = "url(”)";
}
}
}
}
if (navigator.platform == "Win32" && navigator.appName == "Microsoft Internet Explorer" && window.attachEvent) {
window.attachEvent("onload", correctPNG);
window.attachEvent("onload", alphaBackgrounds);
}
将这段代码放入页面中,可以将png的图片在i6下透明度问题一次性解决,不论在页面内以img标签的形式,还是在css里以background的形式。不用在css里去一个个设滤镜了。
这段代码极大的方便了页面的制作,但仍然有个问题:因为js会自动将css的background-img清零,所以background-repeaqt和background-position还是不能使用的,大家切页面的时候还是要小心。
原文地址:http://uicss.cn/css-scrollbar/
========================================================================
PSD转html,
设计稿上,有一处内嵌的介绍信息,当文字过长时,要求使用一个经过处理的滚动条来展示。
如果仅要求IE浏览器,可以通过调整CSS的方式,来给滚动条换色。
代码如下:
- .uicss-cn
- {
- height:580px;overflow-y: scroll;
- scrollbar-face-color:#EAEAEA;
- scrollbar-shadow-color:#EAEAEA;
- scrollbar-highlight-color:#EAEAEA;
- scrollbar-3dlight-color:#EAEAEA;
- scrollbar-darkshadow-color:#697074;
- scrollbar-track-color:#F7F7F7;
- scrollbar-arrow-color:#666666;
- }
具体样式对应的scrollbar区域如图:

<1>YUI3中对 drag & drop类的变化非常大,职能划分很清晰,drag已经不再继承自drop了,对于drag和drop都有自己的事件,事件的可以从drag的角度去监听,也可以从drop的角度去监听。
<2>提供了对特殊样式的css设置功能,比如被lock的drag和drop,拖动中的drag,可用的drop和不可用的drop,被drag滑过的drop等等。让样式控制更轻松。
<3>有了drophit和dropmiss事件,让drop的监听更得心应手。
<4>用插件的形式实现扩展功能,比如之前会单独为一类的drag代理,变成了Y.Plugin.DDProxy插件,并提供moveOnEnd:属性用以控制代理拖动完之后,实体是否要跟着改变位置。而之前在YUI2.xxx中,在以扩展类形式出现的Constrained to a Region,在YUI3中也以插件Y.Plugin.DDConstrained的形式出现,更另人可喜的是,在YUI2中Constrained to a Region是根据坐标来的,如果做用做范围的DOM样式发生变化,比如坐标更改了,长宽更改了,YUI2中拖动范围并不会相应地更改。而YUI3这点就强多了,它监听DOM样式的改变,而调整自己的拖动范围。
<5>drag的配置属性中有data项,可以通过get("data")的方式得到data。这是个很好用的属性,绑定自定义属性可以使用它了。奇怪的是,同属重量级类的anim却没有提供data属性,奇怪。
<6>drag类提供了lastXY和startXY属性了,不必再自行记录了,呵呵。
====================================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>阿当制作</title>
</head>
<style type="text/css">
.content{display:none;}
ul{list-style:none;}
</style>
<body>
<ul class="menu">
<li>
<div><img src="http://style.china.alibaba.com/js/myalibaba/AlicnTree/images/expand.gif" class="btn" /> 标题1</div>
<div class="content">
内容1
</div>
</li>
<li>
<div><img src="http://style.china.alibaba.com/js/myalibaba/AlicnTree/images/expand.gif" class="btn" /> 标题2</div>
<div class="content">
内容2
</div>
</li>
<li>
<div><img src="http://style.china.alibaba.com/js/myalibaba/AlicnTree/images/expand.gif" class="btn" /> 标题3</div>
<div class="content">
内容3
</div>
</li>
<li>
<div><img src="http://style.china.alibaba.com/js/myalibaba/AlicnTree/images/expand.gif" class="btn" /> 标题4</div>
<div class="content">
内容4
</div>
</li>
<li>
<div><img src="http://style.china.alibaba.com/js/myalibaba/AlicnTree/images/expand.gif" class="btn" /> 标题5</div>
<div class="content">
内容5
</div>
</li>
</ul>
<script src="http://yui.yahooapis.com/3.0.0b1/build/yui/yui-min.js" type="text/javascript"></script>
<script type="text/javascript">
YUI().use("node","event",function(Y){
function MenuItem(node){
var imgSrc = ["http://style.china.alibaba.com/js/myalibaba/AlicnTree/images/expand.gif","http://style.china.alibaba.com/js/myalibaba/AlicnTree/images/collapse.gif"];
var btn = node.query(".btn");
var content = node.query(".content");
btn.on("click",function(){
Y.all(".content").setStyle("display","none");
Y.all(".btn").set("src",imgSrc[0]);
if(content.getStyle("display") == "none"){
content.setStyle("display","block");
btn.set("src",imgSrc[1]);
} else {
content.setStyle("display","none");
btn.set("src",imgSrc[0]);
}
},this);
}
Y.all(".menu li").each(function(n,k){
new MenuItem(n);
});
});
</script>
</body>
</html>
============================================================
<1> anim类在引入的时候,有两种,一种是"anim",另一种是"anim-color",其中前面一种能使用几乎所有的运动,包括形变,位置变化和滚动。后面一种包括形变和颜色变化,但不能使用位置变化。
<2> anim类有实例级的方法,也有类级的静态方法,实例级的方法控制单个动画,类级静态方法可以控制所有实例。
<3> interations和interationCount。interaitons可以用来控制动画的次数,而interaionCount可以得到当前是第几次重复。
<4> 常用的监听事件有"start"——动画开始,“end”——动画结束,“pause”——暂停,“resume”——恢复(暂停后重新run),“interation”——迭代,“tween”——运动中。
<1> 首先,nodeList类并不是array类型!和jquery选择符得到的结果无视数组还是非数组不一样,YUI3对数组还是非数组分得非常清楚,用Y.get()和query()返回的一定是单一的结果,而用Y.all()和queryAll()得到的才会是“数组”,其实也不是数组,而是封装后的数组,也就是nodeList对象。这么做的好处其实很明显,也很符合YUI和jquery一贯的定位。jquery的最大特点就是好用,api尽量“简单”,YUI相比jquery显得更精致,api非常“精确”,提供更多细节的接口。
<2> .each()方法。nodeList类也有.each方法,也就使得它看起来似乎更像个数组类型了。.each()方法接受两个参数,第一个是执行函数,第二个是执行函数的this指向对象。执行函数会传入三个参数,第一个是.each()方法中会遍历的每个nodeList中的node,第二个是索引,第三个是一个包含选择符和自动生成id的特殊对象(暂时没想到会有什么用)。值得一提的是,如果不指定执行函数的this指向,那么this指向当前node,也就是赞同于arguments[0],如此一来,我们就有了更灵活的选择,可以指定执行函数的this指向,需要当前node就使用arguments[0]。
<3>.size()方法。nodeList类是通过.size()方法来获得node个数的。和jquery可以用.length或者size()来获得子元素个数不一样,这里只能用.size()方法,没办法,nodeList不是数组。
<4>.even()方法和.odd()方法。这两个方法都是将nodeList截取一部分,重新返回一个“数组”。其中.even()返回的是奇数索引的数组,而.odd()返回的是偶数索引的数组。
<5>.on()方法。和jquery不同的是,对于“数组”的on()方法,this指针指向的并不是遍历时的当时node,而是整个nodeList。如果要找到当前node,需要用e.target来定位。
如果一个代码很复杂,或者由多人维护,用on的方式很容易产生冲突,所以一般情况下,都推荐使用addListener。但有一种情况比较特别——特意需要覆盖之前的******。
举个例子说吧,有这样一个需求:一个页面内有很多链接,只要页面刷新或者是跳转到别的页面或者关闭当前页,都会弹出一个弹窗,询问是否确认离开,点击是才会接着执行,点击否不会执行。这个功能很多人都做过 很简单,监听window.onbeforeunload事件,event.returnValue为提示信息,就可以实现。
可是,如果再加一个需求,页面中有某一个链接,点击不会进行拦截,而是直接跳转,又该怎么做呢?
没错了,就是覆盖之前的window.onbeforeunload******,用一个空的执行函数代替。demo如下:
===============================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>阿当制作</title>
</head>
<body>
<a href="http://www.google.cn">google</a> <a href="http://www.baidu.com" id="test">百度</a>
<script type="text/javascript">
window.onbeforeunload = function(e){
var e = e || window.event;
e.returnValue = "您还没有保存";
}
var test = document.getElementById("test");
test.onclick = function(){
window.onbeforeunload = function(){};
}
</script>
</body>
</html>
=================================================================
点击google链接,或者刷新页面,或者关闭页面都会弹出弹窗,但是点击百度链接就会直接跳转了。