重新认识CSS的权重

发表于 [2011-05-19 19:34]

今天 大白 问了一个关于CSS权重的问题:

关于选择器权重的问题 。class的权重是10 标签权重是 1 。比如说 p span{} 权重是2. 如果11标签自选择器的组合的权重11,会不会覆盖 一个class选择器权重10的 样式?

在跟他的讨论中,重新整理了我对CSS权重的理解。

在《 样式的作用域──页面重构中的模块化设计(一) 》中有做过总结,其中提到比较重要的两点:

 

  1. 权值的大小跟选择器的类型和数量有关
  2. 样式的优先级跟样式的定义顺序有关

在《 继承──页面重构中的模块化设计(三) 》的评论中 operafans 也提到了 标签选择器的权值永远都比一个类选器择器的权值低,无论有多少个 但一直以来都还是没能想通。

其实规则很简单: 比较同一级别的个数,数量多的优先级高,如果相同即比较下一级别的个数 ,至于各级别的优先级,大家应该已经很清楚了,就是:

important > 内联 > ID > 类 > 标签 | 伪类 | 属性选择 > 伪对象 > 继承 > 通配符 通配符 > 继承

这也就解释了为什么11个标签的定义会比不上1个类的定义,1个类加11个标签会比不上2个类的权重高。

文章地址:http://www.cssforest.org/blog/index.php?id=185

CSS兼容IE6,IE7,FireFox

原: 平凡的世界

关于CSS对各个浏览器兼容是个非常让人头疼的事情了, 网络上的教程遍地都是.今天在discuz.net上发现了一篇不错的东西,就转载过来和大家共享.可以当作CSS兼容IE6,IE7,FireFox典范了,值得去记录下。发现自己很久没有转载东西。

注:IE都能识别*;标准浏览器(如Firefox,Opera,Netscape)不能识别*;IE6能识别*,但不能识别 !important,IE7能识别*,也能识别!important;FF不能识别*,但能识别!important;

写两句代码来控制一个属性,区别Firefox与IE6:
background:orange;*background:blue;

//这一句代码写出来时,你用firefox或其它非IE浏览时,会发现,写了该代码的区域背景是橙色的,如果用IE浏览,却是蓝色的,这是因为IE都能识别*;标准浏览器(如Firefox,Opera,Netscape)不能识别*;

写两句代码来控制一个属性,区别IE7与IE6:
background:green !important;background:blue;

//这一句代码写出来时,你用IE7浏览,会发现,写了该代码的区域背景是绿色的,如果用IE6浏览,却是蓝色的,这是因为IE7能识 别!important*,一但识别了,就执行,忽略了后面的那一句,但IE6却不能识别!important,所以前面部分跳过,直接执行了后半部份。

写两句代码来控制一个属性,区别Firefox与IE:
background:orange; *background:green;

//这一句代码写出来时,你用Firefox浏览,会发现背景是橙色的,而IE里却是绿色的,很简单,因为Firefox不能识别*,而IE6,IE7都可以识*

写三句代码来控制一个属性,区别Firefox,IE7,IE6:
background:orange;*background:green !important;*background:blue;

//这一句会使在Firefox在,背景呈橙色,IE7中为绿色,IE6中为蓝色,道理和前面一样,Firefox不能识别*,所以后面两句都不执 行,直接执行第一句,IE7当然也能执行第一行代码,但是因为第二句,他也能识别,所以就执行了第二句代码,把前面的效果给过滤了,而最后一句,IE7是 不能识别的。IE6不能识别!imprtant,本来运行了第一句代码了,第二句不能识别,那就理所当然的执行了最后一句。

 

注意事项:

1、float的div一定要闭合。

例如:(其中floatA、floatB的属性已经设置为float:left;)

  1. < #div id=”floatA” >
  2. < #div id=”floatB” >
  3. < #div id=”NOTfloatC” >

这里的NOTfloatC并不希望继续平移,而是希望往下排。
这段代码在IE中毫无问题,问题出在FF。原因是NOTfloatC并非float标签,必须将float标签闭合。

  1. < #div>
  2. < #div>

之间加上

  1. < #div>

这个div一定要注意声明位置,一定要放在最恰当的地方,而且必须与两个具有float属性的div同级,之间不能存在嵌套关系,否则会产生异常。
并且将clear这种样式定义为为如下即可:

  1. .clear{clear:both;}

此外,为了让高度能自动适应,要在wrapper里面加上overflow:hidden;
当包含float的box的时候,高度自动适应在IE下无效,这时候应该触发IE的layout私有属性(万恶的IE啊!)用zoom:1;可以做到,这样就达到了兼容。
例如某一个wrapper如下定义:

  1. .colwrapper{overflow:hidden;zoom:1;margin:5px auto;}

2、margin加倍的问题。

设置为float的div在ie下设置的margin会加倍。这是一个ie6都存在的bug。
解决方案是在这个div里面加上display:inline;
例如:

  1. < #div id=”imfloat”>

相应的css为

  1. #IamFloat{
  2. float:left;
  3. margin:5px;/*IE下理解为10px*/
  4. display:inline;/*IE下再理解为5px*/}

3、关于容器的包涵关系

很多时候,尤其是容器内有平行布局,例如两、三个float的div时,宽度很容易出现问题。在IE中,外层的宽度会被内层更宽的div挤破。一定要用Photoshop或者Firework量取像素级的精度。

4、关于高度的问题

如果是动态地添加内容,高度最好不要定义。浏览器可以自动伸缩,然而如果是静态的内容,高度最好定好。(似乎有时候不会自动往下撑开,不知道具体怎么回事)

5、最狠的手段 – !important;

如果实在没有办法解决一些细节问题,可以用这个方法.FF对于”!important”会自动优先解析,然而IE则会忽略.如下
.tabd1{
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

常见兼容问题:

1.DOCTYPE 影响 CSS 处理

2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, IE 不行

3.FF: body 设置 text-align 时, div 需要设置 margin: auto(主要是 margin-left,margin-right) 方可居中

4.FF: 设置 padding 后, div 会增加 height 和 width, 但 IE 不会, 故需要用 !important 多设一个 height 和 width

5.FF: 支持 !important, IE 则忽略, 可用 !important 为 FF 特别设置样式

6.div 的垂直居中问题: vertical-align:middle; 将行距增加到和整个DIV一样高 line-height:200px; 然后插入文字,就垂直居中了。缺点是要控制内容不要换行

7.cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以

8.FF: 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。

9.在mozilla firefox和IE中的BOX模型解释不一致导致相差2px解决方法:
div{margin:30px!important;margin:28px;}
注意这两个margin的顺序一定不能写反,据阿捷的说法!important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样:
div{maring:30px;margin:28px}
重复定义的话按照最后一个来执行,所以不可以只写margin:XXpx!important;

10.IE5 和IE6的BOX解释不一致
IE5下
div{width:300px;margin:0 10px 0 10px;}
div的宽度会被解释为300px-10px(右填充)-10px(左填充)最终div的宽度为280px,而在IE6和其他浏览器上宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。这时我们可以做如下修改
div{width:300px!important;width /**/:340px;margin:0 10px 0 10px}
关于这个/**/是什么我也不太明白,只知道IE5和firefox都支持但IE6不支持,如果有人理解的话,请告诉我一声,谢了!:)

11.ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值所以先定义
ul{margin:0;padding:0;}
就能解决大部分问题

ie与火狐 js 兼容性问题

以下以 IE 代替 Internet Explorer,以 MF 代替 Mozzila Firefox

1. document.form.item 问题
(1)现有问题:
现有代码中存在许多 document.formName.item(“itemName”) 这样的语句,不能在 MF 下运行
(2)解决方法:
改用 document.formName.elements[“elementName”]
(3)其它
参见 2

2. 集合类对象问题
(1)现有问题:
现有代码中许多集合类对象取用时使用 (),IE 能接受,MF 不能。
(2)解决方法:
改用 [] 作为下标运算。如:document.forms(“formName”) 改为 document.forms[“formName”]。
又如:document.getElementsByName(“inputName”)(1) 改为 document.getElementsByName(“inputName”)[1]
(3)其它

3. window.event
(1)现有问题:
使用 window.event 无法在 MF 上运行
(2)解决方法:
MF 的 event 只能在事件发生的现场使用,此问题暂无法解决。可以这样变通:
原代码(可在IE中运行):
<input type=”button” name=”someButton” value=”提交” onclick=”javascript:gotoSubmit()”/>

<script language=”javascript”>
function gotoSubmit() {

alert(window.event);     // use window.event

}
</script>

新代码(可在IE和MF中运行):
<input type=”button” name=”someButton” value=”提交” onclick=”javascript:gotoSubmit(event)”/>

<script language=”javascript”>
function gotoSubmit(evt) {
evt = evt ? evt : (window.event ? window.event : null);

alert(evt);              // use evt

}
</script>
此外,如果新代码中第一行不改,与老代码一样的话(即 gotoSubmit 调用没有给参数),则仍然只能在IE中运行,但不会出错。所以,这种方案 tpl 部分仍与老代码兼容。

4. HTML 对象的 id 作为对象名的问题
(1)现有问题
在 IE 中,HTML 对象的 ID 可以作为 document 的下属对象变量名直接使用。在 MF 中不能。
(2)解决方法
用 getElementById(“idName”) 代替 idName 作为对象变量使用。

5. 用idName字符串取得对象的问题
(1)现有问题
在IE中,利用 eval(idName) 可以取得 id 为 idName 的 HTML 对象,在MF 中不能。
(2)解决方法
用 getElementById(idName) 代替 eval(idName)。

6. 变量名与某 HTML 对象 id 相同的问题
(1)现有问题
在 MF 中,因为对象 id 不作为 HTML 对象的名称,所以可以使用与 HTML 对象 id 相同的变量名,IE 中不能。
(2)解决方法
在声明变量时,一律加上 var ,以避免歧义,这样在 IE 中亦可正常运行。
此外,最好不要取与 HTML 对象 id 相同的变量名,以减少错误。
(3)其它
参见 问题4

7. event.x 与 event.y 问题
(1)现有问题
在IE 中,event 对象有 x, y 属性,MF中没有。
(2)解决方法
在MF中,与event.x 等效的是 event.pageX。但event.pageX IE中没有。
故采用 event.clientX 代替 event.x。在IE 中也有这个变量。
event.clientX 与 event.pageX 有微妙的差别(当整个页面有滚动条的时候),不过大多数时候是等效的。

如果要完全一样,可以稍麻烦些:
mX = event.x ? event.x : event.pageX;
然后用 mX 代替 event.x
(3)其它
event.layerX 在 IE 与 MF 中都有,具体意义有无差别尚未试验。
8. 关于frame
(1)现有问题
在 IE中 可以用window.testFrame取得该frame,mf中不行
(2)解决方法
在frame的使用方面mf和ie的最主要的区别是:
如果在frame标签中书写了以下属性:
<frame src=”xx.htm” id=”frameId” name=”frameName” />
那么ie可以通过id或者name访问这个frame对应的window对象
而mf只可以通过name来访问这个frame对应的window对象
例如如果上述frame标签写在最上层的window里面的htm里面,那么可以这样访问
ie: window.top.frameId或者window.top.frameName来访问这个window对象
mf: 只能这样window.top.frameName来访问这个window对象

另外,在mf和ie中都可以使用window.top.document.getElementById(“frameId”)来访问frame标签
并且可以通过window.top.document.getElementById(“testFrame”).src = ‘xx.htm’来切换frame的内容
也都可以通过window.top.frameName.location = ‘xx.htm’来切换frame的内容
关于frame和window的描述可以参见bbs的‘window与frame’文章
以及/test/js/test_frame/目录下面的测试
—-adun 2004.12.09修改

9. 在mf中,自己定义的属性必须getAttribute()取得
10.在mf中没有   parentElement parement.children   而用
parentNode parentNode.childNodes
childNodes的下标的含义在IE和MF中不同,MF使用DOM规范,childNodes中会插入空白文本节点。
一般可以通过node.getElementsByTagName()来回避这个问题。
当html中节点缺失时,IE和MF对parentNode的解释不同,例如
<form>
<table>
<input/>
</table>
</form>
MF中input.parentNode的值为form, 而IE中input.parentNode的值为空节点

MF中节点没有removeNode方法,必须使用如下方法 node.parentNode.removeChild(node)

11.const 问题
(1)现有问题:
在 IE 中不能使用 const 关键字。如 const constVar = 32; 在IE中这是语法错误。
(2)解决方法:
不使用 const ,以 var 代替。

12. body 对象
MF的body在body标签没有被浏览器完全读入之前就存在,而IE则必须在body完全被读入之后才存在

13. url encoding
在js中如果书写url就直接写&不要写&例如var url = ‘xx.jsp?objectName=xx&objectEvent=xxx’;
frm.action = url那么很有可能url不会被正常显示以至于参数没有正确的传到服务器
一般会服务器报错参数没有找到
当然如果是在tpl中例外,因为tpl中符合xml规范,要求&书写为&
一般MF无法识别js中的&
14. nodeName 和 tagName 问题
(1)现有问题:
在MF中,所有节点均有 nodeName 值,但 textNode 没有 tagName 值。在 IE 中,nodeName 的使用好象
有问题(具体情况没有测试,但我的IE已经死了好几次)。
(2)解决方法:
使用 tagName,但应检测其是否为空。

15. 元素属性
IE下 input.type属性为只读,但是MF下可以修改
16. document.getElementsByName() 和 document.all[name] 的问题
(1)现有问题:
在 IE 中,getElementsByName()、document.all[name] 均不能用来取得 div 元素(是否还有其它不能取的元素还不知道)。
JS对select动态添加options操作[IE&FireFox兼容]
<select id=”ddlResourceType” onchange=”getvalue(this)”>
</select>

动态删除select中的所有options:
document.getElementById(“ddlResourceType”).options.length=0;

动态删除select中的某一项option:
document.getElementById(“ddlResourceType”).options.remove(indx);

动态添加select中的项option:
document.getElementById(“ddlResourceType”).options.add(new Option(text,value));

上面在IE和FireFox都能测试成功,希望以后你可以用上。
其实用标准的DOM操作也可以,就是document.createElement,appendChild,removeChild之类的。

取值方面
function getvalue(obj)
{
var m=obj.options[obj.selectedIndex].value
alert(m);//获取value
var n=obj.options[obj.selectedIndex].text
alert(n);//获取文本
}

18. 网页不会被缓存

<META HTTP-EQUIV=”pragma” CONTENT=”no-cache”>

<META HTTP-EQUIV=”Cache-Control” CONTENT=”no-cache, must-revalidate”>

<META HTTP-EQUIV=”expires” CONTENT=”Wed, 26 Feb 1997 08:21:57 GMT”>

或者<META HTTP-EQUIV=”expires” CONTENT=”0″>
25.在打开的子窗口刷新父窗口的代码里如何写?

window.opener.location.reload()
28. 检查一段字符串是否全由数字组成

<script language=”javascript”><!–

function checkNum(str){return str.match(//D/)==null}

alert(checkNum(“1232142141”

alert(checkNum(“123214214a1″

// –></script>

31.TEXTAREA自适应文字行数的多少

<textarea rows=1 name=s1 cols=27 onpropertychange=”this.style.posHeight=this.scrollHeight”>

</textarea>
33. 选择了哪一个Radio

<HTML><script language=”vbscript”>

function checkme()

for each ob in radio1

if ob.checked then window.alert ob.value

next

end function

</script><BODY>

<INPUT name=”radio1″ type=”radio” value=”style” checked>style

<INPUT name=”radio1″ type=”radio” value=”barcode”>Barcode

<INPUT type=”button” value=”check” onclick=”checkme()”>

</BODY></HTML>
————————————————————————-

注意: concat 、 match 、 replace 和 search 函数是在 JavaScript 1.2 中加入的。所有其它函数在 JavaScript 1.0 就已经提供了。

去掉前后空格:str.replace(/(^\s*)|(\s*$)/g,””)47.
?   concat() – 将两个或多个字符的文本组合起来,返回一个新的字符串。

?   indexOf() – 返回字符串中一个子串第一处出现的索引。如果没有匹配项,返回 -1 。

?   charAT() – 返回指定位置的字符。

?   lastIndexOf() – 返回字符串中一个子串最后一处出现的索引,如果没有匹配项,返回 -1 。

?   match() – 检查一个字符串是否匹配一个正则表达式。

?   substring() – 返回字符串的一个子串。传入参数是起始位置和结束位置。

?   replace() – 用来查找匹配一个正则表达式的字符串,然后使用新字符串代替匹配的字符串。

?   search() – 执行一个正则表达式匹配查找。如果查找成功,返回字符串中匹配的索引值。否则返回 -1 。

?   slice() – 提取字符串的一部分,并返回一个新字符串。

?   split() – 通过将字符串划分成子串,将一个字符串做成一个字符串数组。

?   length() – 返回字符串的长度,所谓字符串的长度是指其包含的字符的个数。

?   toLowerCase() – 将整个字符串转成小写字母。

?   toUpperCase() – 将整个字符串转成大写字母。
48, 关于鼠标拖动,改变层大小。──看看微软的做法.

〈script〉
document.execCommand(“2D-position”,false,true);
〈/script〉
〈DIV contentEditable=true〉
〈DIV style=”WIDTH: 300px; POSITION: absolute; HEIGHT: 100px; BACKGROUND-COLOR: red”〉移动层〈/DIV〉
〈/DIV〉

28,自动显示主页最后更新日期.

〈script〉
document.write(“最后更新日期:”+document.lastModified+””)
〈/script〉
38,利用〈IFRAME〉来给网页中插入网页。

经常我看到很多网页中又有一个网页,还以为是用了框架,其实不然,是用了〈IFRAME〉,它只适用于IE,NS可是不支持〈IFRAME〉的,但围着的字句只有在浏览器不支援 iframe 标记时才会显示,如〈noframes〉一样,可以放些提醒字句之类的话。
你注意啊!下面请和我学习它的用法。
分 析代码:〈iframe src=”iframe.html” name=”test” align=”MIDDLE” width=”300″ height=”100″ marginwidth=”1″ marginheight=”1″ frameborder=”1″ scrolling=”Yes”〉 〈/iframe〉
src=”iframe.html”
用来显示〈IFRAME〉中的网页来源,必要加上相对或绝对路径。
name=”test”
这是连结标记的 target 参数所需要的。
align=”MIDDLE”
可选值为 left, right, top, middle, bottom,作用不大 。
width=”300″ height=”100″
框窗的宽及长,以 pixels 为单位。
marginwidth=”1″ marginheight=”1″
该插入的文件与框边所保留的空间。
frameborder=”1″
使用 1 表示显示边框, 0 则不显示。(可以是 yes 或 no)
scrolling=”Yes”
使用 Yes 表示容许卷动(内定), No 则不容许卷动。

29,如何让滚动条出现在左边?

我想居然在论坛中有人发表了这段代码,很有意思,它的确照顾一些左撇子,呵呵!
〈html dir=”rtl”〉
〈body bgcolor=”#000000″ text=”#FFFFFF”〉
〈table height=18 width=212 align=center bgcolor=#FFFFFF dir=”ltr” cellspacing=”1″  cellpadding=”0″〉
〈tr〉
〈td bgcolor=”#FF0000″ 〉是不是你的滚动条在左边啊〈/td〉
〈/tr〉
〈/table〉
〈/body〉
〈/html〉

34,禁止鼠标右键查看网页源代码。

〈SCRIPT language=javascript〉
function click()
{if (event.button==2) {alert(`你好,欢迎光临!`) }}
document.onmousedown=click
〈/SCRIPT〉
补充说明:
鼠标完全被封锁,可以屏蔽鼠标右键和网页文字。
〈 body oncontextmenu=”return false” ondragstart=”return false” onselectstart=”return false”〉
11,如何改变鼠标的形状?

在Dreamweaver4中CSS样式面板:
按CTR +SHIFT+E–出现样式表对话框,点击NEW,出现编辑对话框,在左边最后一项extensions-cursor 选择你要改的指针形式就可以了,然后把你要想改变的地方运用样式表,如果整页都有在〈body bgcolor=”#003063″ text=”#ffffff” id=all〉中加入就行了。
〈span style=”cursor:X`〉样例〈/span〉
这里选择(文本)作为对象,还可以自己改为其他的,如link等。
x 可以等于=hand(手形)、crosshair(十字)、text(文本光标)、wait(顾名思义啦)、default(默认效果)、help(问 号)、e-size(向右箭头)、ne-resize(向右上的箭头)、nw-resize(向左上的箭头)、w-resize(向左的箭头)、sw- resize(左下箭头)、s-resize(向下箭头)、se-resize(向右下箭头)、auto(系统自动给出效果)。

Google PR算法

一、简单算法:
例如一个由4个页面组成的小团体:A,B, C 和 D。如果所有页面都链向A,那么A的PR(PageRank)值将是B,C 及 D的和。

PR(A) = PR(B) + PR(C) + PR(D)

继续假设B也有链接到C,并且D也有链接到包括A的3个页面。一个页面不能投票2次。所以B给每个页面半票。以同样的逻辑,D投出的票只有三分之一算到了A的 PageRank 上。

风采依扬觉得,根据链处总数平分一个页面的PR值。

最后,所有这些被换算为一个百分比再乘上一个系数q。由于下面的算法,没有页面的PageRank会是0。所以,Google通过数学系统给了每个页面一个最小值1 − q。

所以一个页面的 PageRank 是由其他页面的PageRank计算得到。Google 不断的重复计算每个页面的 PageRank。如果您给每个页面一个随机 PageRank 值(非0),那么经过不断的重复计算,这些页面的 PR 值会趋向于正常和稳定。这就是搜索引擎使用它的原因。

二、完整的算法:

这个方程式引入了随机浏览的概念,即有人上网无聊随机打开一些页面,点一些链接。一个页面的PageRank值也影响了它被随机浏览的概率。为了便于理解,这里假设上网者不断点网页上的链接,最终到了一个没有任何链出页面的网页,这时候上网者会随机到另外的网页开始浏览。

为了对那些有链出的页面公平,q = 0.15(q的意义见上文)的算法被用到了所有页面上, 估算页面可能被上网者放入书签的概率。

所以,这个等式如下:

p1,p2,…,pN是被研究的页面,M(pi)是链入pi页面的数量,L(pj)是pj链出页面的数量,而N是所有页面的数量

PageRank值是一个特殊矩阵中的特征向量。这个特征向量为

R是等式的答案

如果pj不链向pi, 而且对每个j都成立时,等于 0

这项技术主要的弊端是,旧的页面等级会比新页面高,因为新页面,即使是非常好的页面,也不会有很多链接,除非他是一个站点的子站点。

这就是 PageRank 需要多项算法结合的原因。之前石头也说了wikipedia.com在google的一些关键词内表现很好整体的访问量超过一些门户网站,另一方面也是数万网民的共同努力。

Google对维基百科情有独钟之一,风采依扬想应该是:PageRank 似乎倾向于维基百科页面,在条目名称的搜索结果中总在大多数或者其他所有页面之前。原因主要是维基百科内相互的链接很多,并且有很多站点链入。

Google 经常处罚恶意提高 PageRank 的行为。Google 究竟怎样区分正常的链接交换和不正常的链接堆积仍然是商业机密。

相信看完以上内容后对PageRank了解更深入。

我们可以知道搜索引擎用来评估网页质量的一种方法,就是PageRank,它经常被用来当作对Google搜索引擎网页要素评分之一。

你可以找到任何网页的PageRank分数,通过使用你的浏览器去浏览网页,并下载GOOGLE工具栏。将你的鼠标放在绿色的PageRank栏 上,马上就会显示出一个从0到10之间的数字,这就是PageRank值,是google对该页面的重要性的分配。工具栏按照PageRank比例范围显 示出网页的PageRank,但是在现在的PageRank算法中就是不单单是0到10的数据了,在google的服务器中,PageRank的分配数有 可能是0精确到100,甚至是到1000的数值。

PageRank是平均每三个月更新一次的,它不是按照一般的线性刻度计算,而是按照一种指数刻度。这是一种非常繁杂的数学术语(之前文章也有提 到),意思是PageRank4不是比PageRank3好一级—而是会好6到7倍。因此一个PageRank5的网页和PageRank8的网页之间的 差距会比你可能认为的要大很多。

PageRank值在这几天要更新了,我们谈谈现在PR的算法吧!当一个网页链接到你的网页时,搜索引擎是怎样转移这个网页的权威性到你的网站的 (也就是PageRank的转移)。因此你希望从有最高PageRank得分的网页上获得链接,去不断的寻找高PR的站点,是不是呢?

这种方式在以前还管用,但是现在实际情况比这复杂了很多,一个权威性的转移与网页上存在的链接数量有关—链接越少,每个链接所转移的权威性就越高, 因些,通常PageRank5网页上唯一的链接要比PageRank7上一百个链接中的一个要有价值。当然这也是有前提的,就是站于站之间的链接内容相似 度要高一些。
如:
A(SEO资料站)站同时链向B(SEO服务网站)、C(企业服装网站)
那么A站的PageRank转移到B、C那个站所得的分高呢,在众多的实验证明B站获得A站的PR转移得分比C站高,原因很简单:A、B二站的相似度很高,所得的得分也自然高。

之前所讲的大家都知道PR值的重要性,但是真的一提的是,不要落入PageRank的诱惑陷阱中。对于你的网页来说,最重要的是被链接到那些能为你 的站点带来流量的站点,而不是见到PageRank就链。要将PageRank作为工具来验证你自己对一个潜在链接来源质量判断,而不要在做你的链接来源 列表时盲目跟从PageRank。

克服不自信的六大方法

原作者:
来源6 Ways to Conquer the Demons of Self-Doubt
译者magicjun_jun

“You’ll never succeed.”

“你永远也成功不了!”

“You’re not good enough.”

“你还不够好!”

“You might as well give up now.”

“你最好还是放弃吧!”

Chances are, you’re hearing things like that every single day.

有可能,你每一天都会听到类似的话语。

They don’t come from your friend, or even your enemies.

这些话不是来自你的朋友,也不是来自于你的对手。

They come from inside your own head.

而是来自你自己的脑海。

Perhaps you’re working towards a big goal: like losing weight and getting fit, or starting up your own business. You might have big ambitions … but you’ve also got to fight a battle against those internal voices.

也许你正为了一个远大的目标而努力:譬如说减肥啊,塑型啊,或者创业什么的。也许你雄心满满,但你也需要同这些心声作内部斗争。

You’re not the only person who feels that way. We all have to struggle against self-doubt. And we can all overcome those negative, destructive thoughts that hold us back from reaching our goals.

这样想的不是只有你一个人而已。我们都不得不因不自信而挣扎。但我们是都可以克服所有的消极面,负面的想法,从而达成我们的目标。

Here’s how.

以下就是关键了。

#1: Remember What You’ve Already Accomplished

1.记住,你已经很精通了。

You’ve managed to achieve lots of amazing things already. Perhaps you’ve made direct progress towards your goal: you’ve lost 10lbs, so you know you can go on and lose another 10.

你已经努力完成了很多了不起的事情。也许你一朝着你的目标前进了一大步:你已经减掉了10磅,你就可以坚信你可以继续下去,并再减掉10磅。

Even if your goal is brand-new, you can draw on past accomplishments. Maybe you’re overwhelmed by everything you need to learn in order to get your graduate degree … but you can remember how your hard work paid off when you were an undergraduate, or a high school student.

就算你的目标是最近才新立的。你也可以运用过去的经验。也许你为了拿到毕业文凭被你必须要学习的东西压得透不过气来。但是你应该还记得,为了成为一名大学生或者高中生时你付出了多少努力。

Do it: Write down three things that you’ve accomplished. It doesn’t matter how big or small they are.

行动吧:写下三件你曾经完成的事情,无论它们是多么的重大或是微不足道。

#2: Act Confident

2.表现得自信

Even if you don’t feel at all confident, you can behave as if you are. Once you start acting confident, you’ll begin to believe in yourself.

即使你一点都没有信心,但你也要表现得很自信。一旦表现出了自信,你就已经开始相信自身了。

Let’s say you’ve started doing freelance photography on the weekends, and you’ve got your first few paying gigs. Your clients don’t need to know that you’re new to this. They don’t need to hear about how nervous you are. If you behave like a professional, they’ll see you as one – and you’ll start to see yourself through their eyes.

我们假说你开始在周末从事自由摄影,并且你已经获得了少量的酬薪。所以,你的客人不需要知道你是个新手。他们也不会听到你有多么的紧张。如果你表现地很专业,他们就会正视你,你也可以从他们的眼中看到自己的存在。

Do it: Figure out one way in which you could act confident, starting right now.

行动吧:找出一种属于自己表现自信的方法,并马上付诸行动。

#3: Read Success Stories From Other People

3.从他人那边学习一些励志的故事

Whenever I’ve tackled a big goal in my own life – like losing weight or starting my own business – I’ve been inspired by stories from others.

在我的一生中,无论合适处理一个稍大的目标-减肥或者创业-我总是能从别人的故事中得到一些启发。

 

Lots of people have achieved the goals that you’re working towards. Many of those people will have started off in a worse position than you: they were more overweight, or more deeply in debt, or struggling in all sorts of ways. But they still succeeded … and so can you.

你共事的很多人中都曾经有过成功。在他们中间,有相当一部分人在开始的时候处于了一个比你更糟糕的位置:他们可能比你更胖,或者背负了巨额债券,或者在各种不利中挣扎。但是他们仍旧成功了。所以,你也是可以成功的。

Do it: Look for a book or blog written by someone tackling a similar goal to yours, and read a little bit every day.

行动吧:寻找一本书或者一篇日志,书中描写了某人树立了一个同你类似的目标,然后每天都读上一段。

#4: Ask For Feedback from a Professional

4.找专业人士反馈信息

You might have spent months or years honing your skills in a particular area, but you’re still worried that you’re not good enough.

你可能花了几个月甚至几年在某个特殊的领域磨练你的技能,但是你仍旧担心你自己做得还不够好。

Find someone professional, and ask them for their opinion. If you’re hoping to write a best-selling novel, hire a writing coach or editor. If you’re planning to start up a restaurant, ask for advice from someone who’s done the same thing. You’ll find out that you’re doing a lot of things right (and you’ll also get a few tips on how to make improvements).

于是,找专业人士,问问他们的意见吧。如果你希望写一部热销的小说,就找个写作指导或者编辑。如果你想开个饭馆,你可以向开饭馆的人请教。你会发现你做的很多事情都是正确的(当然,你也会得到一些启示来提升自己。)

Do it: Consider hiring a coach, or joining a small group or class. You could look locally or online.

行动吧:考虑下找个指导员,或者加入一个小组或者班级。你可以从当地或者线上找找看。

#5: Collect Compliments and Testimonials

5.收集祝贺和客户感言

If you’re working on a long-term goal, chances are that you’ve have some nice comments from other people. Perhaps your friend told you how great you look now that you’ve lost a few pounds, or your first clients raved about what a great job you did for them.

如果你的目标是长期的,你将很可能从别人那边获得一些良好的评价。也许你的朋友告诉你,因为少了几磅肉,现在的你看上去多么的棒。或者你的第一批客户对你表示感激,说你为他们提供了一份多么了不起的工作。

Make sure you keep any encouraging words that you hear. Write down what your friends say. Save all those “thank you” emails. Post your testimonials on your website for the world to read. All of these positive, encouraging voices will help to quiet the demons of self-doubt.

 

确保你收集了所有你听到的鼓励的言语。写下你朋友们说的话,收集所有表示“感谢”的邮件,在网站上面写下客户的感言,让全世界的人都看到。所有这些积极的行动,鼓励的声音够能够帮助你更加自信。

Do it: Look through your emails for any positive feedback, and print it out.

行动吧:翻出邮件中所有的积极反馈,并打印出来吧。

#6: Plan Your Next Few Steps

6.计划接下来你要做的几个步骤

One of the best ways to overcome self-doubt is to have a clear plan. It’s easy to start thinking “I’ll never do it” if you don’t know what your next steps are.

克服不自信最好的办法之一就是制定一个明朗的计划。如果你不知道接下来要做什么,可以作这样的简单思考:“我从来没做过。。。”

A clear plan lets you break things down into manageable chunks. It highlights any areas where you’ll need to do further research or get some help. It takes any vague worries and fears and forces them out into the light – where you’ll be able to see plenty of ways to overcome them.

一个明朗的计划可以帮助你把事情分成容易操作,循序渐进的几个部分。这样可以很明显的划出你需要作深入研究或者寻求帮助的部分。这样可以排除你的忧虑,恐惧和阻力,因为你通过计划单可以很容易地找到克服难题的多种方法。

Do it: Write down the next three steps towards your goal.

拓词toWords

拓词toWords 

拓词是一个魔鬼教官,你俩约定目标“6月4日,黑带高手”,几招过后,他会建议:“今天练1小时4分钟”,方法就是与他见招拆招,你每次接招他都铭记在心,他每次出招都居心叵测。

就这么简单,拓词别有用心提问,你从容不迫作答,每份努力都换来一份收获,到约定之日,几千单词也就悉数在心了。

WP 网站应对黑客攻击的解决之道

网站遭受黑客的攻击并不是一件让人高兴的事,不过,如果你的网站是搭建在WordPress平台上,不幸被黑客攻击,这篇文章将一步一步地帮助你解决。

首先,尽量不要恐慌。虽然我也知道这有点不切实际,但是你要想想每天有数百万博客被攻击,并不是你一个人感到害怕、被侵犯。黑客攻击潜伏在我们所有人的周围,除了网站之外,电脑、智能手机等等都可能成为黑客攻击的目标。现在,我们就来讲讲实际应对的步骤:

1. 确保你的杀毒软件是最新的
确保你的杀毒软件使用的是最新的病毒定义文件是非常至关重要的。如果你使用Windows系统并且还没有安装杀毒软件,你可以使用免费版的 avastAVG杀毒软件,这两个杀毒软件都算是大家耳熟能详的。安装完之后下载所有的更新,接着下面的步骤。

2. 将被攻击页面保存到你的电脑中[可选择]
如果你选择报告黑客的话就有必要对被攻击页面进行备份。另外,如果你决定写篇文章来通知其他人,备份之后你可以获得截图以及文本例子。保存页面相信大家都会,浏览器菜单栏的 文件 -> 页面另存为… 将页面保存在你的电脑上(建议不要保存在C盘)。在保存页面的时候,保存类型选项记得选择“网页,全部” ,然后点击保存即可。

3.下载最新的WordPress版本
当前最新版是WordPress3.0.。

4. 清理服务器上所有受影响的文件夹和文件
有了最新版的WordPress之后,你就可以将服务器上所有不必要的文件删除。不用担心,你的数据库中有你所有一切的数据,包括,你的博客文章、页面、分类、标签等等。如果很不幸你的数据库也遭受攻击了,那希望你一直都有备份。下面是你不应该删除的文件夹和文件:

  • 不要删除最初的文件夹 (如., stats)
  • 不要删除 ‘wp-content’ 文件夹 (主题内容,有时也有插件内容)
  • 不要删除.htaccess文件 (固定链接结构、权限、密码等)
  • 不要删除 favicon.ico文件(URL地址左边的自定义图标)
  • 不要删除 google…html文件 (谷歌网站管理员工具验证)
  • 不要删除wp-config.php文件

5. 上传完最新的WordPress版本之后,你可以放心地删除下面的文件:

  • 删除 /wp-admin/install.php文件 (不再需要)
  • 删除 /readme.html (防止用户看到WordPress版本)

6. 刷新你的网站主页
如果你的主机服务商在网站没有内容的情况下有默认页面,那么就会显示那个默认页面。否则,你会看到标准的 “找不到网页”错误,这也比看到一个被攻击页面强多了,对吧?

7.安装最新版的WordPress
如果你在第五步中删除了你的网站内容,你可以使用FTP来上传所有内容 (除了‘wp-content’ 文件夹)。传送完成之后,你可以进入‘wp-content’ 文件夹并上传新文件夹和文件(如果你想的话,但并不是必须的)。

8. 再次刷新你的主页
这次,希望你能够看到网站原来的样子。如果无法实现,那么很遗憾,你的数据库就被攻击了。这个问题解决起来会更加复杂,我们留着下一次再讲。

原文   转载至

Flash遮盖Div层的解决办法[转]

在<object>节里面增加 <param name=”wmode” value=”opaque” /> 或 <param name=”wmode” value=”transparent” /> 属性,则可解决问题。

“wmode” 的含义:Window Mode(窗口模式)
“wmode” 的值:

window 模式
默认情况下的显示模式,在这种模式下flash player有自己的窗口句柄,这就意味着flash影片是存在于Windows中的一个显示实例,并且是在浏览器核心显示窗口之上的,所以flash只是貌似显示在浏览器中,但这也是flash最快最有效率的渲染模式。由于他是独立于浏览器的HTML渲染表面,这就导致默认显示方式下flash总是会遮住位置与他重合的所有DHTML层。
但是大多数苹果电脑浏览器会允许DHTML层显示在flash之上,但当flash影片播放时会出现比较诡异的现象,比如DHTML层像被flash刮掉一块一样显示异常。

Opaque 模式
这是一种无窗口模式,在这种情况下flash player没有自己的窗口句柄,这就需要浏览器需要告诉flash player在浏览器的渲染表面绘制的时间和位置。这时flash影片就不会在高于浏览器HTML渲染表面而是与其他元素一样在同一个页面上,因此你就可以使用z-index值来控制DHTML元素是遮盖flash或者被遮盖。

Transparent 模式
透明模式,在这种模式下flash player会将stage的背景色alpha值将为0并且只会绘制stage上真实可见的对象,同样你也可以使用z-index来控制flash影片的深度值,但是与Opaque模式不同的是这样做会降低flash影片的回放效果,而且在9.0.115之前的flash player版本设置wmode=”opaque”或”transparent”会导致全屏模式失效。

原作者: Jacky Chung

PHP 打印调用函数入口地址(堆栈),方便调式 [转]

原帖: 小菜鸟 2011-03-18 14:37:34

今天网站出现一个BUG,然后直接在数据库类里面写日志,看是哪条SQL出了问题,SQL语句到是找到了,但是不知道这条SQL语句来自何处,于是就想啊,如果能有一个办法,查看当前正在运行的这个方法是被哪个方法调用的,以及上一个方法又是哪个方法调用的,以此类推,找到入口地址多好啊。不过以前自己也想过,也在网上去搜过,就是没有找到相关的办法,今天一同事(前辈)说JAVA里面这种调试用得很普遍,叫这种堆栈调试,我是就在网上搜PHP堆栈。居然被我找到了,然后把自己的办法写出来。
//调用堆栈函数,查找调用函数的源头,方便调试
function print_stack_trace()
{
$array = debug_backtrace();
//print_r($array);//信息很齐全
unset($array[0]);
foreach($array as $row)
{
$html .= $row['file'].':'.$row['line'].'行,调用方法:'.$row['function']."

“;
}
return $html;
}


我在我的数据库的核心查询函数里面调用这个方法,打印结果如下:
D:\wamp\www\meilele\includes\cls_mysql.php:471行,调用方法:query

D:\wamp\www\meilele\includes\cls_mysql.php:507行,调用方法:getAll

D:\wamp\www\meilele\includes\lib_common.php:732行,调用方法:getAllCached

D:\wamp\www\meilele\includes\init.php:113行,调用方法:load_config

D:\wamp\www\meilele\index.php:4行,调用方法:include_once

一目了然,一直找到了入口,太强悍了。以后调试又多了一种办法

 

[qdsang] 评论:“八达岭3, 悲催的北长城”

您的文章《八达岭3, 悲催的北长城》有新评论
作者:admin(IP:124.207.205.1,主机名:124.207.205.1)
电子邮件:qdsang@gmail.com
URL:
Whois 查询:http://whois.arin.net/rest/ip/124.207.205.1
评论:
人山人海, 陪同学逛逛去了.

您可在这里查看这篇文章的所有评论:
http://blog.qdsang.com/archives/72#comments

固定链接:http://blog.qdsang.com/archives/72#comment-3
移至回收站:http://blog.qdsang.com/wp-admin/comment.php?action=trash&c=3
标记为垃圾评论:http://blog.qdsang.com/wp-admin/comment.php?action=spam&c=3