0%

最近在看Zepto.js,由于它的最新版本已经不再支持所有的IE浏览器,所有文档里面给了一串代码来区分是否为IE然后分别插入Zepto.js或者Jquery.js,代码是这样的:


‘)

第一次见到proto这个属性,于是Google,Mozilla MDN里面有详细介绍:

一个对象的proto 属性和自己的内部属性[[Prototype]]指向一个相同的值 (通常称这个值为原型),原型的值可以是一个对象值也可以是null(比如说Object.prototype.proto的值就是null).该属性可能会引发一些错误,因为用户可能会不知道该属性的特殊性,而给它赋值,从而改变了这个对象的原型.

proto语法:


var proto = obj.proto;

注: 两个下划线,后跟五个字符”proto”,最后又是两个下划线.

proto描述:

当一个对象被创建时,它的 proto 属性和内部属性[[Prototype]]指向了相同的对象 (也就是它的构造函数的prototype属性).改变proto 属性的值同时也会改变内部属性[[Prototype]]的值,除非该对象是不可扩展的.

proto例子:


// 声明一个函数作为构造函数function Employee() {
/ 初始化实例 /
}

// 创建一个Employee实例
var fred = new Employee();

// 测试相等性
fred.proto === Employee.prototype; // true
参考:https://developer.mozilla.org/zh-CN/docs/JavaScript/Reference/Global_Objects/Object/proto

回正题,以前看过一个6字节的判断是否为IE的例子,俄国人写的,现在去Google搜索,排在前面的还是那个例子,不过经验证在IE9、10下已经不起作用了。

不过我们可以用上面的那个例子,看代码:



var noIe = (‘proto‘ in {});
alert(noIe);
//或者
if(‘proto‘ in {}){非ie}
else{ie}


经验证可行

最近研究触屏站的代码,发现很多门户站都使用了transform的位移来代替position,这样做的好处也很明显,CSS3可以最大限度优化性能,让页面动画更加流畅,所有我就详细看了一下transform的参数,做下小结:
transform全部参数如下:


transform: none
transform: matrix(1.0, 2.0, 3.0, 4.0, 5.0, 6.0)
transform: translate(12px, 50%)
transform: translateX(2em)
transform: translateY(3in)
transform: scale(2, 0.5)
transform: scaleX(2)
transform: scaleY(0.5)
transform: rotate(0.5turn)
transform: skewX(30deg)
transform: skewY(1.07rad)
transform: matrix3d(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0)
transform: translate3d(12px, 50%, 3em)
transform: translateZ(2px)
transform: scale3d(2.5, 1.2, 0.3)
transform: scaleZ(0.3)
transform: rotate3d(1, 2.0, 3.0, 10deg)
transform: rotateX(10deg)
transform: rotateY(10deg)
transform: rotateZ(10deg)
transform: perspective(17px)

transform: translateX(10px) rotate(10deg) translateY(5px)

Read more »

负margin的应用,现在在许多地方都能看到,个人认为它是CSS进阶之路上不可不了解的一个东西,巧妙的使用负margin可以解决很多问题

海玉的一篇博客我知道你不知道的负Margin提到了负margin的理论:

负margin理论:

在说明什么是负margin之前,你得清楚margin是个啥么玩意,如果还不清楚可以先阅读本人的前一篇文章《不要告诉我你懂margin》,预补下知识,回头再读这篇文章,相信俩篇文章都能给你带来不少的收获。

为了形象、易懂的解释负margin,我们将引入W3C上没有的参考线的说法。何谓参考线?参考线就是 margin移动的基准点,此基准点相对于box(自身)是静止的。而margin的数值,就是box相对于参考线的位移量。

一个完整的margin属性是这么写的margin: top right bottom left;(eg: margin:10px 20px 30px 40px)。在margin属性中一共有两类参考线,top和left的参考线属于一类,right和bottom的参考线属于另一类。top和left是以外元素为参考,right和bottom是以元素本身为参考。margin的位移方向是指margin数值为正值时候的情形,如果是负值则位移方向相反。

marginMoveDefault

上面段文字和图片或许挺难理解,我们来看实际代码:


{margin:0; padding:0;}
.wrap{width:400px; border:5px solid #aaa;}
.example{width:200px; height:200px; background:#CCCCFF;}
.normal{width:200px; height:200px; background:#CCE8CF;}
/
添加或者注释掉下面的margin属性,查看前后差别
.example{margin:-10px 20px -30px 40px;}
*/

来分析这段代码,example元素下方有一相邻元素normal(注:这里分析的是添加和删除margin后的example元素,normal元素仅作为example元素前后效果的参照)。

根据上文的参考线原理margin:-10px(top) 20px(right) -30px(bottom) 40px(left); 上-10px和左40px将以外元素为参考,所谓外元素就是本元素的边界元素(再白话点的解释就是元素的紧邻元素,这里涉及到containing block知识,可自行网上搜索)。example元素上边和左边的边界元素即为wrap父元素,wrap父元素为基准点,example的margin-top为-10px,想象下如果这里margin-top为+10px会什么情况,没错如果为+10px,example元素相对于wrap父元素边缘为基准,那么example元素会同wrap父元素10px产生间隙边距,那么反过来,margin-tip:-10px;还是与wrap父元素边缘为基准,反过来向上推10px的距离位置。example元素的margin-left为40px,这里就按照正常逻辑相隔40px边距,同理如果为-40px,那么就是反方向向左推进40px的距离位置。

再来看example元素的margin-right和margin-bottom,由上文得知这俩个值是以元素本身为参考。什么叫以元素本身为参考呢,确切含义是指以自身为参考来影响周围元素的位置(实质即为影响下边和右边相邻元素的参考线)。这里的margin-bottom为-30px,对于其自身位置没有任何变化,但是对于其下方元素normal元素产生了极大的影响,因为normal元素的上边界元素即为example元素,根据example元素边界来判定自身位置,想象下如果example元素margin-bottom为+30px,那么example元素将隔开下方的normal元素,反之为-30px,下方normal元素由于example参考线内凹,导致了normal元素自个儿身不由己的被“提”了上去了。这就是以自身为参考影响周围元素位置的含义。

这里梳理一下规律,当margin四个值都为正数值的话,那么margin按照正常逻辑同周围元素产生边距。当元素margin的top和left是负值时会引起元素的向上或向左位置移动。而当元素margin的bottom和right是负值时会影响右边和下边相邻元素的参考线。如果你再想深入了解参考线理论的话你也可访问由浅入深漫谈margin属性这篇文章。

Read more »

刚刚遇到的情况,wordpress登陆页白屏。

想想这两天对它干了些什么特别的事情,导致它突然发飙,想来想去只有一个情况,昨天我改了主机服务器登陆密码,导致数据库连接不上,然后直接在filezilla里面用windows的文本文档打开编辑了wp-config文件,在网上搜了一下wordpress白屏的情况,果然有人说到不能用windows的文本文档编辑PHP文件,最后我用nodepad++把文档格式改为ANSI编码格式就Ok了



// 该函数由Simon Willison编写,它只有一个参数,该参数表示被调用的函数名(在页面加载完毕时执行的函数的名字)
function addLoadEvent(func) {
var oldOnload = window.onload;
if (typeof window.onload != ‘function’) {
window.onload = func;
}
else {
window.onload = function() {
oldOnload();
func();
}
}
}
// 添加Load事件处理
addLoadEvent(hideMenu);
function hideMenu() {
setTimeout(“window.scrollTo(0, 0)”, 1);
}

以上代码是针对IOS系统的移动端收缩地址导航栏作用的(部分安卓机也可以)。核心代码其实就是一句:

setTimeout(“window.scrollTo(0, 0)”, 1);

利用定时器,将窗口移动到内容端的最上端。从而隐掉地址导航栏。

wordpress的模版基本上都不会对页面的”关键字”和”描述”做处理,所以我们要自己想办法给每个页面加上这些东西

在head.php文件相关位置添加一下代码:

post_excerpt) {
        $description     = $post->post_excerpt;
    } else {
        $description = substr(strip_tags($post->post_content),0,220);
    }

    $keywords = "";
    $tags = wp_get_post_tags($post->ID);
    foreach ($tags as $tag ) {
        $keywords = $keywords . $tag->name . ", ";
    }
}
?>


在IE6中使用jquery给select 赋值选中某值时会出现如下错误:

0_1289532404Lr8I

赋值语句:

    $("#selectID").val("xx");
    $("#selectID option").attr("selected",true);
    $("#selectID option[value='xx']").attr("selected",true);
在IE7,IE8,IE5.5及Firefox等浏览器下面没有问题 有人找到了一个解决的方法,就是设置selected属性的时候使用setTimeout函数 设定一个时间 即可,代码如下:
// 使用setTimeout之后问题解决

setTimeout(function() {
    $("#selectID option").attr("selected",true);

    $("#selectID option[value='xx']").attr("selected",true);
}, 1);

多个光标:按住Cmd(Windows系统按住ctrl)可以在同一时间轻松的编辑多条代码。点击鼠标点击目标代码。

重新打开关闭的标签:和谷歌浏览器一样,如果你不小心关闭了某个标签页并想重新打开它,你可以按下Shift+Cmd+T(Windows系统下,按下Shift+ctrl+T)。如果你连续点击以上按键,ST将会按照关闭的先后顺序重新打开标签页。

快速开启文档:这可能就是ST中我最喜欢的功能。按住Cmd+T(Wiondows系统下,按住ctrl+T)就会打开一个文本框,你可以在文本框内键入目标文件,系统就在项目中搜索文件的位置。这样你就不用再次使用文件目录列表。

Read more »