兼容IE6/IE7/IE8/FF的CSS HACK写法

Firefox为程序员而生,IE6为前端工程师而死,Chrome服务高端人群,Maxthon、Opera、TT、IE8流浪在民间,360自动安装并设为默认,这就是浏览器领域,五花八忙,各有各的生存方式与存在的空间。

兼容问题不容忽视,Chrome、IE8开始趋于规范了,与Firefox解析原理差不多,以下介绍几种常用解决方案:

第一种方法:

还好,微软提供了这样一个代码:

<meta http-equiv="x-ua-compatible" content="ie=7" />

把这段代码放到<head>里面,在ie8里面的页面解析起来就跟ie7一模一样的了,所以,基本上可以无视ie8,剩下的代码只需要这样写就可以了

background:#ffc; /*  对firefox有效*/
*background:#ccc; /* 对ie7有效 */
_background:#000; /* 只对ie6有效 */

解释一下吧:

firefox能解析第一段,后面的两个因为前面加了特殊符号“*”和“_”,firefox认不了,所以只认background:#ffc,看到的是黄色;

ie7前两短都能认,以最后的为准,所以最后解析是background:#ccc,看到的是灰色;

ie6三段都能认,而且“_”这个只有ie6能认,所以最后解析是_background:#000,看到的是黑色

如果你发现按我这样写还是有问题的话,请查看一下你的html头,看看<head>之前的内容是不是这样的标准写法

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

这个是现在比较规范的写法,如果你是用dreamweaver做页面的话,默认也是这种规范的,切记,非这种规范写法的,兼容性不能保证

第二种方法:

要求苛刻的朋友是不愿意在页面头部增加<meta http-equiv="x-ua-compatible" content="ie=7" />这样一句代码的,因为这样的结果是每个页面都得加。那么要想兼容这几个浏览器还真得想别的办法了。早些天本站发布了一篇《完美兼容ie6,ie7,ie8以及firefox的css透明滤镜》,可能当时测试的疏忽,IE8的兼容性没有解决好,好多朋友回复说用不了。今天抽出些时间,查阅大量资料,终于解决了这个问题了。

以下是兼容IE6/IE7/IE8/FF的写法,注意下面的顺序不可颠倒

margin-bottom:40px;       /*ff的属性*/
margin-bottom:140px\9;    /* IE6/7/8的属性 */
color:red\0;              /* IE8支持 */
*margin-bottom:450px;     /*IE6/7的属性*/

下面以一个实例的形式表现,大家可以运行代码查看一下效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>2010最新全面兼容ie6,ie7,ie8,ff的CSS HACK写法——www.0491.com</title>
<style type="text/css">
#abc {
 border:2px solid #00f;     /*ff的属性*/
 border:2px solid #090\9;   /* IE6/7/8的属性 */
 border:2px solid #F90\0;     /* IE8支持 */
 _border:2px solid #f00;     /*IE6的属性*/
 }
 /*上下顺序不可以写错*/
 </style>
</head>
<body>
<div id="abc">
  <ul>
    <li>FF下蓝边</li>
    <li>IE6下红边</li>
    <li>IE7下绿边</li>
    <li>IE8下黄边</li>
    <li>转载请注明来源标准之路<a href="http://521-wf.com">WiFeng的博客</a></li>
  </ul>
</div>
</body>
</html>
1
Sep 2010
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

程序生成word文档出现各种乱码

先简单介绍生成word文档的方法,虽说简单,但不是最完美,因为打开后与你手动创建的word文档还是有区别的。

先看代码:

<?php
$html = <<<EOF
		<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40">
		<head></head>
		<body>
EOF;

$html .= <<<EOF
	<h1><center>祖国,我爱你</center></h1>
	<br />
	<h2 style="margin-left:21.0pt;">详情</h2>
	<p style="margin-left:42.0pt;"><b>编号</b> : 00000111</p>
	<p style="margin-left:42.0pt;"><b>名称</b> : 中国红十字会</p>
EOF;

$html .= '</body></html>';

//$html = mb_convert_encoding($html,"GB2312","UTF-8");

$filename = strip_tags('祖国,我爱你');
$filename = str_replace(array('?', '!' , '\\', '/', '.', ' '), array(''), $filename);
$filename = mb_convert_encoding($filename, "GB2312", "UTF-8");

header ('Content-Disposition: attachment; filename="'.$filename.'-'.date('Ymd', TIMESTAMP).'.doc"' );
header ('Content-Length: '.strlen($html));
header ('Content-type: application/msword');

echo $html;
?>

上面的程序的文件编码为“UTF-8”,经过验证可以实现文档下载功能,也不会出现乱码。

接着就开始谈谈注意事项:

1. 内容不需要进行转换编码。如果内容进行过转码,保存的文件名中包含“啊”这个汉子的时候,全部文档内容会变为韩文,很奇怪。

2. 文件名(也就是上面的$filename)要进行转码,转换为GB2312,应该GBK也是可以的。记得要吧文件名的特殊字符去掉哦,因为windows中文件名称是有规定的,所以在浏览器提示下载的时候,文件名可能会显示乱码,文件内容也可能出现异常。

30
May 2010
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

PHP魔术方法中 __set() __get()

先看看官方文档的解释
__set() is run when writing data to inaccessible properties.
__get() is utilized for reading data from inaccessible properties.
究竟用中文怎么翻译呢?   inaccessible :n. 难达到;难接近;无法理解。
有代码有真相:
<?php
error_reporting(E_ALL);
class stu{
	private $a;
	private $b = 0;
	public $c;
	public $d = 0;
	
	//这里的 private 可以用 protected public 替代
	private function __get($name) {
		return 123;
	}
	
	//这里的 private 也可以用 protected public 替代
	private function __set($name, $value) {
		echo "This is set function";
	}
}

$s = new stu();

var_dump($s->a);  //output: 123
var_dump($s->b);  //output: 123
var_dump($s->c);  //output: null
var_dump($s->d);  //output: 0
var_dump($s->e);  //output: 123

$s->a = 3;	//output: This is set function
$s->c = 3;  //no output
$s->f = 3;  //output: This is set function
?>
结果:
如果没有__get方法,执行 var_dump($s->a)  var_dump($s->b) 会有致命的错误
如果没有__get方法,执行 var_dump($s->e) 会有一个notice,提示没有定义属性 $e
总结:
1. 从一个难以访问的属性读取数据的时候 __get() 方法被调用
2. 向一个难以访问的属性赋值的时候 __set() 方法被调用
3. 难以访问包括:(1)私有属性,(2)没有初始化的属性
4. __isset() __unset() 也类似
11
Mar 2010
AUTHOR WiFeng
CATEGORY Web
COMMENTS 4 Comments

使用mysql 命令行导入.sql 文件后中文出现乱码

以下是对UTF8编码的注意事项:
1. 检查  .sql 文件的编码格式,需要是 UTF8
2. 检查这些SQL语句的写法
ENGINE=MyISAM AUTO_INCREMENT=57 DEFAULT CHARSET=utf8;
要保证 CHARSET=utf8;
3.执行命令行的时候在最后指定编码
mysql -uroot -p gzmama_app < d:\Doc\gzmama_app.sql -f --default-character-set=utf8
记住这3条军规,可以在正常情况下保证不会出现乱码。其他编码格式也是同样的道理,只要把以上的 utf8 全部替换为对于的编码即可。
27
Feb 2010
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

ThinkPHP U函数最经典的写法

第一种:

<ul class="Rtext">
     <volist name="list" id="vo">
                 <li>
                   <a href='{:U("Index/showContent/id/$vo[id]")}' title="{$vo.title}">
                  <span class="text">{$vo.title|substr_chinese=###,0,35}</span>{$vo.post_time|date='Y-m-d',###}</a>
                 </li>
     </volist>
</ul>

单引号与双引号都不能错,必须一模一样。是不是值得收藏啊! 

第二种(标准写法):建议使用

('User/edit', array('id'=>$vo['id'])) 
27
Feb 2010
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

shell之输入参数

在 shell 脚本中如何得到一些程序外部的变量呢?通过输入参数可以实现这个步骤,如下:
./test.sh -f config.conf -v --prefix=/home

这是随便写的一个示例,没有任何实际意义。

 test.sh 中通过什么方式获取到 config.conf   /home 这些参数,然后做不同的处理呢?

$0 : ./test.sh,即命令本身,相当于C/C++中的argv[0]
$1 : -f,第一个参数.
$2 : config.conf
$3, $4 ... :类推。
$# : 参数的个数,不包括命令本身,上例中$#为4.
$@ :参数本身的列表,也不包括命令本身,如上例为 -f config.conf -v --prefix=/home
$* :和$@相同,但"$*" 和 "$@"(加引号)并不同,"$*"将所有的参数解释成一个字符串,而"$@"是一个参数数组。
可以用下面的这个程序来详细看看 $* $@ 的值:
#!/bin/bash

# 输出 $*
for arg in "$*"
do
    echo $arg
done

# 输出 $@
for arg in "$@"
do
    echo $arg
done
更多内容可参考:Bash Shell中命令行选项/参数处理


18
Feb 2010
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

Linux 常用小命令

1. find(在指定目录下搜索指定文件名的文件)

##在bin目录下查找名为insmanyou的文件##
[liuweifeng@mydev ~]$ find ./bin/  -name insmanyou 

2. groups (查看当前用户的用户组)

[liuweifeng@mydev ~]$ groups

3. su (切换当前登录用户)

[liuweifeng@mydev ~]$ su root

4. sudo(执行root有权限执行的命令)

[liuweifeng@mydev ~]$ sudo svn info

阅读剩余部分...

18
Feb 2010
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

抓取数据出现MySQL server has gone away

在抓取数据的时候总是提示:MySQL server has gone away, 在这样的情况下正是由于某两条SQL查询之间隔离的时间过长,导致该连接自动断开。 解决方案:在打开链接的时候如下多加一个参数

mysql_connect($dbhost, $dbuser, $dbpw, false, MYSQL_CLIENT_INTERACTIVE)

然后接着执行这样的query:

mysql_query("set interactive_timeout=24*3600");

这样的话,就不会出现mysql server has gone away 了。
为什么呢? 看看官方手册里的说明
MYSQL_CLIENT_COMPRESS 使用压缩的通讯协议
MYSQL_CLIENT_IGNORE_SPACE 允许在函数名后留空格位
MYSQL_CLIENT_INTERACTIVE 允许设置断开连接之前所空闲等候的 interactive_timeout 时间(代替 wait_timeout)。
MYSQL_CLIENT_SSL 使用 SSL 加密。本标志仅在 MySQL 客户端库版本为 4.x 或更高版本时可用。在 PHP 4 和 Windows 版的 PHP 5 安装包中绑定的都是 3.23.x。

16
Mar 2008
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

PHP 连接 Access 数据库

PHP连接好多数据库哦,access也可以的

原文地址:http://superstar888.wf.blog.163.com.......

27
Feb 2008
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments

无限极分类中最经典的代码(函数)

第一种形式(最新版本)推荐使用:
<?php
function d($arr,$pid,$s) {
  static $r_arr=array();
  static $n = 0;
        $s=$s."&nbsp;&nbsp;&nbsp;";
        for($i=0;$i<count($arr);$i++){
            if($arr[$i]['parentid']==$pid){
                $r_arr[$n]['catname'] = $s.'|-'.$arr[$i]['catname'];
                $r_arr[$n]['catid'] = $arr[$i]['catid'];
    $n++;
                for($j=0;$j<count($arr);$j++){
                    if($arr[$i]['catid']==$arr[$j]['parentid']){
                        $r_arr[$n]['catname'] = $s."&nbsp;&nbsp;&nbsp;|-".$arr[$j]['catname'];
      $r_arr[$n]['catid'] = $arr[$j]['catid'];
      $n++;
                        d($arr,$arr[$j]['catid'],$s."&nbsp;&nbsp;&nbsp;");
                    }
                }
            }


        }
  return $r_arr;
    }
?>
第二种形式(原始版本):
<?php
header("Content-Type:text/html;charset=utf-8");
function d($arr,$pid,$s) {
        $s=$s."&nbsp;&nbsp;&nbsp;";
        for($i=0;$i<count($arr);$i++){
            if($arr[$i][2]==$pid){
                echo $s.$arr[$i][1]."<br>";


                for($j=0;$j<count($arr);$j++){
                    if($arr[$i][0]==$arr[$j][2]){
                        echo $s."&nbsp;&nbsp;&nbsp;".$arr[$j][1]."<br>";
                        d($arr,$arr[$j][0],$s."&nbsp;&nbsp;&nbsp;");
                    }
                }
            }
        }
    }
    $arr1=array('a1','根目录1','0','1');
    $arr2=array('b1','根目录2','0','1');
    $arr3=array('a2','一级目录','a1','2');
    $arr4=array('b2','一级目录','b1','2');
    $arr5=array('a3','二级目录','a2','3');
    $arr6=array('b3','二级目录','b2','3');
    $arr7=array('a4','三级目录','a3','4');
    $arr=array($arr1,$arr2,$arr3,$arr4,$arr5,$arr6,$arr7);
    d($arr,'0'," ");
?>
27
Feb 2008
AUTHOR WiFeng
CATEGORY Web
COMMENTS No Comments