疯子的紫梦's 学习窝

Css优先级分析

初学者可能对优先级的概念不甚明白,但我们在写css的时候经常遇到这些问题。优先级主要是避免样式声明中的冲突。当针对同一元素的同一属性有多个声明时,并且这些声明来源相同,权重相同,那么,更明确的css声明将占主导地位。

设想下面这个例子:

复制内容到剪贴板
代码:

 

P{
Color:black;
Background-color:white;
}
div.warning p{
color:red;
}
Div#caution p{
Color:yellow;
}
Body#home div p{
Color:white;
}

上面的样式单中包含四条针对p元素的样式,它们都包含一条针对color的声明,浏览器需要明确那条声明会被最终应用,p元素的最终color是什么?
       
答案很简单,最明确的选择器声明将占据上风,浏览器通过分析选择器的优先级,并最终筛选出优先级最高的声明。

下面是同一选择器多种声明的比较过程:

  • 如果是在元素的style中声明元素的属性,而不是在选择器中进行,毫无疑问,它具有最高的优先级。如果没有内联属性,进入步骤2;
  • 计算选择器的ID,ID数量最多的优先级最高,如果ID的总数相同或者为0,进入步骤3;
  • 计算类属性(如.test)、属性选择器(如[type=’submit’])以及伪类 (如:hover)。数量最多的优先级相对较高,如果总数相同或者为0,进入下一步;
  • 计算类型选择器(如div)和伪元素(如:first-letter)的个数,总数高的优先级高。




如果多个选择器具有相同的优先级,根据级联样式单的规则:后来者居上.

W3c讲述了计算优先级的方法,计算结果用四个逗号分开的a,b,c,d矩阵来表示,a中代表的优先级最高,d代表的是最次要,计算过程如下:

  • 声明来自style的,a=1;
  • b,统计ID的个数;
  • c,统计属性选择器、伪类的个数;
  • d,统计元素类型和伪类元素的个数。



计算结果不是一个具体的数值,而是可以相互比较的矩阵,回想前面例子中的一条声明:

复制内容到剪贴板
代码:

 

P{
    Color:black;
    Background-color:white;
}

按照上面的公式,我们得到的是0,0,0,1,因为仅一个元素类型。

正如前面所说,这不是数值,而是一个矩阵,a代表最高的优先级,d优先级最低,从左到右,比较每栏的最高值,b栏的值会覆盖c、d中的值,不论c和d中的值是多少。这样,0,1,0,0的优先级将比0,0,10,0高。

我们将计算的步骤拆分开来使之更易于理解。

首先计算a,如果在元素的style中定义其属性,它的值就为1,否则为0,事实上,a栏的值只有一种情况。



你可以看到,内联样式的优先级为1,0,0,0,例如:

引用:
<p style=”color:red;”>red text</p>

这就是问什么尽量避免使用内联样式的原因,因为内联样式总是具有最高的优先级,唯一能改变它的方法是在css中使用!important声明。

除了内联样式,我们需要计算b,c,d。看看下面这条规则的优先级计算:

复制内容到剪贴板
代码:
Body#home div#warning p.message{color:red;}

上面的规则用来定义color属性,既然没有内联样式,第一栏a=0,如下表:
                     


计算b栏中的值,统计ID的数量,上面的选择器中,有两个ID:#home和#warning,这样b=2,如下表:



下一步,计算c栏的值,统计类选择器、属性选择器、伪类的个数。(注:[id=”foo”与#foo是不相同的])

上面的选择器中,有一个类选择器.message,所以c=1,如下表:



最后是d,计算类型选择器、伪类的个数,选择器中有三个:body、div、p,没有伪类元素,所以d=3,如下表:



就此打住,让我们来看一个更为复杂的例子,对于同一个元素有不止一个的color属性,浏览器如何处理,下面是样式单:

复制内容到剪贴板
代码:

 

p.message{
color:green;
}
#home #warning p.message{
color:yellow;
}
#warning p.message{
color:white;
}
body#home div#warning p.message{
color:blue;
}
p{
color:teal;
}
* body#home>div#warning p.message{
color:red;
}
#warning p{
color:black;
}

用上面的方法来分析这个样式单。稍等,通用选择符“*”和子选择符“>”的优先级是怎样的?答案是他没有任何优先级,在就算中将被忽略,你可以将其当作0来对待。

在不看下面的结果之前,你是否已经分析出了选择器的优先级。

果是根据优先级优先级的高低来排列的:最高的在最上面,最低的屈居于下。你会看到,最上面的两条级别相同,尽管它多了一个通用选择符和子选择符。在这种情况下,后来者将占据上风,如果你在页面中使用上面的样式,你将会看到,p元素的文本字体将会使红色。

你也会看到,p.message优先级低于#waring p。这是初学者经常遇到的问题,他们认为类选择器更具体的匹配一个元素。

 

PHP 5.3.1 安装包 VC9 VC6 区别是什么

在PHP100混了这么久也写点东西出来吧,最近在PHP官网上看到又有新版的PHP下载了,于是上去找找For Windows的版本,可是一看确傻眼了,一共给了四个版本,VC9 x86 Non Thread Safe、VC9 x86 Thread Safe、VC6 x86 Non Thread Safe、VC6 x86 Thread Safe,这让我这个菜鸟头疼啊,还好PHP官网提供下载的地方左边有个英文choose我看懂了,我估摸着就是如何来选择版本的意思吧,于是开始查字典及上网查找,终于看明白了具体意思,拿来做个备忘先。 再给PHP100做个广告,据说老大要出视频演示了,我就简单解释一下。

一、如何选择PHP5.3的VC9版本和VC6版本

VC6是什么?
VC6就是legacy Visual Studio 6 compiler,就是使用这个编译器编译的。
VC9是什么?
VC9就是the Visual Studio 2008 compiler,就是用微软的VS编辑器编译的。

那我们如何选择下载哪个版本的PHP呢?
如果你是在windows下使用Apache+PHP的,请选择VC6版本;
如果你是在windows下使用IIS+PHP的,请选择VC9版本。


二、如何选择PHP5.3的Thread Safe和Non Thread Safe版本


先从字面意思上理解,Thread Safe是线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的CGI执行方式而耗尽系统资源。Non Thread Safe是非线程安全,在执行时不进行线程(Thread)安全检查。


再来看PHP的两种执行方式:ISAPI和FastCGI。


ISAPI执行方式是以DLL动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以ISAPI来执行PHP,建议选择Thread Safe版本;


而FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以FastCGI来执行PHP,建议选择Non Thread Safe版本。

官方并不建议你将Non Thread Safe 应用于生产环境,所以我们选择Thread Safe 版本的PHP来使用。
 

HTML中小meta的大作用

meta是用来在HTML文档中模拟HTTP协议的响应头报文。meta 标签用于网页的<head>与</head>中,meta 标签的用处很多。meta 的属性有两种:name和http-equiv。name属性主要用于描述网页,对应于content(网页内容),以便于搜索引擎机器人查找、分类(目 前几乎所有的搜索引擎都使用网上机器人自动查找meta值来给网页分类)。这其中最重要的是description(站点在搜索引擎上的描述)和 keywords(分类关键词),所以应该给每页加一个meta值。比较常用的有以下几个:

  name 属性

1、<meta name="Generator" contect="">用以说明生成工具(如Microsoft FrontPage 4.0)等;

  2、<meta name="KEYWords" contect="">向搜索引擎说明你的网页的关键词;

  3、<meta name="DEscription" contect="">告诉搜索引擎你的站点的主要内容;

  4、<meta name="Author" contect="你的姓名">告诉搜索引擎你的站点的制作的作者;

  5、<meta name="Robots" contect= "all|none|index|noindex|follow|nofollow">

  其中的属性说明如下:

  设定为all:文件将被检索,且页面上的链接可以被查询;

  设定为none:文件将不被检索,且页面上的链接不可以被查询;

  设定为index:文件将被检索;

  设定为follow:页面上的链接可以被查询;

  设定为noindex:文件将不被检索,但页面上的链接可以被查询;

  设定为nofollow:文件将不被检索,页面上的链接可以被查询。

  http-equiv属性

  1、<meta http-equiv="Content-Type" contect="text/html";charset=gb_2312-80">

和 <meta http-equiv="Content-Language" contect="zh-CN">用以说明主页制作所使用的文字以及语言;

  又如英文是ISO-8859-1字符集,还有BIG5、utf-8、shift-Jis、Euc、Koi8-2等字符集;

  2、<meta http-equiv="Refresh" contect="n;url=http://yourlink">定时让网页在指定的时间n内,跳转到页面http://yourlink;

  3、<meta http-equiv="Expires" contect="Mon,12 May 2001 00:20:00 GMT">可以用于设定网页的到期时间,一旦过期则必须到服务器上重新调用。需要注意的是必须使用GMT时间格式;

  4、<meta http-equiv="Pragma" contect="no-cache">是用于设定禁止浏览器从本地机的缓存中调阅页面内容,设定后一旦离开网页就无法从Cache中再调出;

   5、<meta http-equiv="set-cookie" contect="Mon,12 May 2001 00:20:00 GMT">cookie设定,如果网页过期,存盘的cookie将被删除。需要注意的也是必须使用GMT时间格式;

  6、<meta http-equiv="Pics-label" contect="">网页等级评定,在IE的internet选项中有一项内容设置,可以防止浏览一些受限制的网站,而网站的限制级别就是通过meta属性来设置的;

  7、<meta http-equiv="windows-Target" contect="_top">强制页面在当前窗口中以独立页面显示,可以防止自己的网页被别人当作一个frame页调用;

   8、<meta http-equiv="Page-Enter" contect="revealTrans(duration=10,transtion= 50)">和<meta http-equiv="Page-Exit" contect="revealTrans(duration=20,transtion=6)">设定进入和离开页面时的特殊效果,这个功能即 FrontPage中的“格式/网页过渡”,不过所加的页面不能够是一个frame页面。

  以上是常用的几个meta属性,有个人主页的朋友不妨在你的主页中加上它,效果可是不一样的哦:)。

 

 

php mysql 防sql注入

没有太多的过滤,主要是针对php和mysql的组合。
一般性的防注入,只要使用php的 addslashes 函数就可以了。
 

 

$_POST,$_GET  转义字符:
 

$_POST = sql_injection($_POST);   
$_GET = sql_injection($_GET);   
   
function sql_injection($content)   
{   
if (!get_magic_quotes_gpc()) {   
if (is_array($content)) {   
foreach ($content as $key=>$value) {   
$content[$key] = addslashes($value);   
}   
} else {   
addslashes($content);   
}   
}   
return $content;   
}   

图片不存在的时候,显示一个默认图片

 

<img src="noexist.gif" onerror="this.src='http://www.lanrentuku.com/images/logo.jpg'" />
<p>查找更多代码,请访问:<a href="http://www.lanrentuku.com" target="_blank">懒人图库</a></p>

通过这个方法,就可以实现当没有图片或图片丢失的情况,显示一个默认图片。以后,不用通过程序来判断图片是否存在了