分类目录归档:技术文章

GODADDY ZEND支持方法

zend版本下载 

linux的3.3.3 http://downloads.zend.com/optimizer/3.3.3/ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz

1、首先解压缩下载的文件,你会找到一个名字为data的文件夹。把文件夹的名字修改为比较特殊的名字(主要是为了避免混淆),如 zendofsite ,最好由zend开头,这样方便将来查找和更新。

2、之后上传 zendofsite 文件夹(就是原来的data文件夹,这个名字是自己修改的,修改成什么名字将来就使用什么)到网站根目录。

3、静静等待一小会儿,文件就上传完毕啦。在线解压。登录FTP找到根目录下的PHP.INI文件,如果目录中没有这个文件的,就自行建立一个,键入如下内容:

register_globals = on
allow_url_fopen = on

expose_php = on
max_input_time = 60
variables_order = "EGPCS"
extension_dir = ./
upload_tmp_dir = /tmp
precision = 12
SMTP = relay-hosting.secureserver.net
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset="

[Zend]
zend_optimizer.optimization_level=15
zend_extension=/home/content/u/s/user/html/zendofsite/4_3_x_comp/ZendOptimizer.so
zend_extension_ts=/home/content/u/s/user/html/zendofsite/4_3_x_comp/TS/ZendOptimizer.so

红色部分的为自己的登录路径登录用户名,

修改之后上传,等待更新

从服务器的记录寻找黑客的蛛丝马迹

当服务器被攻击时,最容易被人忽略的地方,就是记录文件,服务器的记录文件了黑客活动的蛛丝马迹。在这里,我为大家介绍一下两种常见的网页服务器中最重要的记录文件,分析服务器遭到攻击后,黑客在记录文件中留下什么记录。 
  
目前最常见的网页服务器有两种:Apache和微软的Internet Information Server (简称IIS)。这两种服务器都有一般版本和SSL认证版本,方便黑客对加密和未加密的服务器进行攻击。
  
IIS的预设记录文件地址在 c:winntsystem32logfilesw3svc1的目录下,文件名是当天的日期,如yymmdd.log。系统会每天产生新的记录文件。预设的格式是W3C延伸记录文件格式(W3C Extended Log File Format),很多相关软件都可以解译、分析这种格式的档案。记录文件在预设的状况下会记录时间、客户端IP地址、method(GET、POST等)、URI stem(要求的资源)、和HTTP状态(数字状态代码)。这些字段大部分都一看就懂,可是HTTP状态就需要解读了。一般而言,如果代码是在200到299代表成功。常见的200状态码代表符合客户端的要求。300到399代表必须由客户端采取动作才能满足所提出的要求。400到499和500到599代表客户端和服务器有问题。最常见的状态代码有两个,一个是404,代表客户端要求的资源不在服务器上,403代表的是所要求的资源拒绝服务。Apache记录文件的预设储存位置在/usr/local/apache/logs。最有价值的记录文件是access_log,不过 ssl_request_log和ssl_engine_log也能提供有用的资料。 access_log记录文件有七个字段,包括客户端IP地址、特殊人物识别符、用户名称、日期、Method Resource Protocol(GET、POST等;要求哪些资源;然后是协议的版本)、HTTP状态、还有传输的字节。
  
我在这里所用的是与黑客用的相似的模拟攻击网站方式和工具。(注意:在本文中所介绍的方法请大家不要试用,请大家自觉遵守网络准则!)

Nginx服务器安装与介绍

安装步骤:
  (系统要求:Linux 2.6+ 内核,本文中的Linux操作系统为CentOS 4.4)

  一、获取相关开源程序:
  1、下载程序源码包到当前目录:
  本文中提到的所有开源软件为截止到2007年11月25日的最新稳定版。我将它们打了两个压缩包。

  第一个压缩包:nginx-php-1.zip
  下载地址:http://ishare.iask.sina.com.cn/cgi-bin/fileid.cgi?fileid=2746375

  第二个压缩包:nginx-php-2.zip
  下载地址:http://ishare.iask.sina.com.cn/cgi-bin/fileid.cgi?fileid=2746370

  附:各开源软件单独下载地址(如果下载了以上两个压缩包,则无需下载以下软件):
  http://down.s135.com/linux/nginx-php/ (登录用户名、密码均为blog.s135.com)

  2、解压缩:

mkdir -p /data0/software
cd /data0/software
unzip nginx-php-1.zip
unzip nginx-php-2.zip
cd /data0/software/nginx-php

  二、安装PHP 5.2.5(FastCGI模式)
  1、编译安装PHP 5.2.5所需的支持库:

tar zxvf libiconv-1.11.tar.gz
cd libiconv-1.11/
./configure –prefix=/usr/local
make
make install
cd ../

tar zxvf freetype-2.3.5.tar.gz
cd freetype-2.3.5/
./configure
make
make install
cd ../

tar zxvf libpng-1.2.20.tar.gz
cd libpng-1.2.20/
./configure
make
make install
cd ../

tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b/
./configure –enable-static –enable-shared
make
make install
make install-lib
cd ../

tar zxvf libxml2-2.6.30.tar.gz
cd libxml2-2.6.30/
./configure
make
make install
cd ../

tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8/
./configure
make
make install
/sbin/ldconfig
cd libltdl/
./configure –enable-ltdl-install
make
make install
cd ../../

tar zxvf mhash-0.9.9.tar.gz
cd mhash-0.9.9/
./configure
make
make install
cd ../

cp /usr/local/lib/libmcrypt.* /usr/lib
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2

tar zxvf mcrypt-2.6.6.tar.gz
cd mcrypt-2.6.6/
./configure
make
make install
cd ../

  2、编译安装MySQL 5.0.45

/usr/sbin/groupadd
/usr/sbin/useradd -g mysql mysql
tar zxvf mysql-5.0.45.tar.gz
cd mysql-5.0.45
./configure –prefix=/usr/local/webserver/mysql/ –without-debug –with-unix-socket-path=/tmp/mysql.sock –with-client-ldflags=-all-static –with-mysqld-ldflags=-all-static –enable-assembler –with-extra-charsets=gbk,gb2312,utf8 –with-pthread –enable-thread-safe-client
make && make install
chmod +w /usr/local/webserver/mysql
chown -R mysql:mysql /usr/local/webserver/mysql
cp support-files/my-medium.cnf /usr/local/webserver/mysql/my.cnf
cd ../

  附:以下为附加步骤,如果你想在这台服务器上运行MySQL数据库,则执行以下两步。如果你只是希望让PHP支持MySQL扩展库,能够连接其他服务器上的MySQL数据库,那么,以下两步无需执行。
  ①、以mysql用户帐号的身份建立数据表:

/usr/local/webserver/mysql/bin/mysql_install_db –defaults-file=/usr/local/webserver/mysql/my.cnf –basedir=/usr/local/webserver/mysql –datadir=/usr/local/webserver/mysql/data –user=mysql –pid-file=/usr/local/webserver/mysql/mysql.pid –skip-locking –port=3306 –socket=/tmp/mysql.sock

  ②、启动MySQL(最后的&表示在后台运行)

/bin/sh /usr/local/webserver/mysql/bin/mysqld_safe –defaults-file=/usr/local/webserver/mysql/my.cnf &

  3、编译安装PHP(FastCGI模式)

tar zxvf php-5.2.5.tar.gz
cd php-5.2.5/
./configure –prefix=/usr/local/webserver/php –with-config-file-path=/usr/local/webserver/php/etc –with-mysql=/usr/local/webserver/mysql –with-iconv-dir=/usr/local –with-freetype-dir –with-jpeg-dir –with-png-dir –with-zlib –with-libxml-dir –enable-xml –disable-debug –disable-rpath –enable-discard-path –enable-safe-mode –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –with-curl –with-curlwrappers –enable-mbregex –enable-fastcgi –enable-force-cgi-redirect –enable-mbstring –with-mcrypt
sed -i 's#-lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt#& -liconv#' Makefile
make
make install
cp php.ini-dist /usr/local/webserver/php/etc/php.ini
cd ../

  4、编译安装PHP5扩展模块

tar zxvf memcache-2.2.1.tgz
cd memcache-2.2.1/
/usr/local/webserver/php/bin/phpize
./configure –with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../

cd php-5.2.5/ext/gd/
/usr/local/webserver/php/bin/phpize
./configure –with-jpeg-dir –with-png-dir –with-zlib-dir –with-ttf –with-freetype-dir –with-php-config=/usr/local/webserver/php/bin/php-config
make
make install
cd ../../../

  5、修改php.ini文件
  手工修改:查找/usr/local/webserver/php/etc/php.ini中的extension_dir = "./"
  修改为extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/"
  并在此行后增加以下几行,然后保存:
  extension = "memcache.so"
  extension = "gd.so"

  自动修改:若嫌手工修改麻烦,可执行以下shell命令,自动完成对php.ini文件的修改:

sed -i 's#extension_dir = "./"#extension_dir = "/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/"
extension = "memcache.so"
extension = "gd.so"
#' /usr/local/webserver/php/etc/php.ini

  6、创建www用户和组,以及其使用的目录:

/usr/sbin/groupadd www -g 48
/usr/sbin/useradd -u 48 -g www www
mkdir -p /data0/vshare/htdocs
chmod +w /data0/vshare/htdocs
chown -R www:www /data0/vshare/htdocs

  7、安装lighttpd中附带的spawn-fcgi,用来启动php-cgi
  注:压缩包中的spawn-fcgi程序为已经编译成二进制的版本。

cp spawn-fcgi /usr/local/webserver/php/bin
chmod +x /usr/local/webserver/php/bin/spawn-fcgi

  8、启动php-cgi进程,监听127.0.0.1的10080端口,进程数为64(如果服务器内存小于3GB,可以只开启25个进程),用户为www:

/usr/local/webserver/php/bin/spawn-fcgi -a 127.0.0.1 -p 10080 -C 64 -u www -f /usr/local/webserver/php/bin/php-cgi

  三、安装Nginx 0.5.33
  1、安装Nginx所需的pcre库:

tar zxvf pcre-7.2.tar.gz
cd pcre-7.2/
./configure
make && make install
cd ../

  2、安装Nginx

tar zxvf nginx-0.5.33.tar.gz
cd nginx-0.5.33/
./configure –user=www –group=www –prefix=/usr/local/webserver/nginx –with-http_stub_status_module
make && make install
cd ../

  3、创建Nginx日志目录

mkdir -p /data1/logs
chmod +w /data1/logs
chown -R www:www /data1/logs

  4、创建Nginx配置文件
  ①、在/usr/local/webserver/nginx/conf/目录中创建nginx.conf文件:

rm -f /usr/local/webserver/nginx/conf/nginx.conf
vi /usr/local/webserver/nginx/conf/nginx.conf

  输入以下内容:

引用
user www www;

worker_processes 10;

error_log /data1/logs/nginx_error.log crit;

#pid logs/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;

events
{
use epoll;

worker_connections 51200;
}

http
{
include conf/mime.types;
default_type application/octet-stream;

charset gb2312;

server_names_hash_bucket_size 128;

#sendfile on;
#tcp_nopush on;

keepalive_timeout 60;

tcp_nodelay on;

gzip on;
gzip_min_length 1k;
gzip_buffers 4 8k;
gzip_http_version 1.1;
gzip_types text/plain application/x-javascript text/ text/html application/xml;

server
{
listen 80;
server_name blog.s135.com;
index index.html index.htm index.php;
root /data0/vshare/htdocs;

if (-d $request_filename)
{
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}

location ~ .*.php?$
{
include conf/fcgi.conf;
fastcgi_pass 127.0.0.1:10080;
fastcgi_index index.php;
}

log_format access '$remote_addr – $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
access_log /data1/logs/access.log access;
}

server
{
listen 80;
server_name status.blog.s135.com;

location / {
stub_status on;
access_log off;
}
}
}

  ②、在/usr/local/webserver/nginx/conf/目录中创建fcgi.conf文件:

vi /usr/local/webserver/nginx/conf/fcgi.conf

  输入以下内容:

引用
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;

fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;

fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;

# PHP only, required if PHP was built with –enable-force-cgi-redirect
#fastcgi_param REDIRECT_STATUS 200;

  5、启动Nginx

ulimit -SHn 51200
/usr/local/webserver/nginx/sbin/nginx -c /usr/local/webserver/nginx/conf/nginx.conf

  四、配置开机自动启动Nginx + PHP

vi /etc/rc.local

  在末尾增加以下内容:

引用
ulimit -SHn 51200
/usr/local/webserver/php/bin/spawn-fcgi -a 127.0.0.1 -p 10080 -C 64 -u www -f /usr/local/webserver/php/bin/php-cgi
/usr/local/webserver/nginx/sbin/nginx -c /usr/local/webserver/nginx/conf/nginx.conf

  五、优化Linux内核参数

vi /etc/sysctl.conf

  在末尾增加以下内容:

引用
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000 65000

  使配置立即生效:

/sbin/sysctl -p

  六、在不停止Nginx服务的情况下平滑变更Nginx配置
  (1)、修改/usr/local/webserver/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确:

/usr/local/webserver/nginx/sbin/nginx -t

  如果屏幕显示以下两行信息,说明配置文件正确:
  the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok
  the configuration file /usr/local/webserver/nginx/conf/nginx.conf was tested successfully

  (2)、这时,输入以下命令查看Nginx主进程号:

ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}'

  屏幕显示的即为Nginx主进程号,例如:
  6302
  这时,执行以下命令即可使修改过的Nginx配置文件生效:

kill -HUP 6302

CSS不自动增加高度 和不自适应高度

 1.    额外标签法

  这种方法就是向父容器的末尾再插入一个额外的标签,并令其清除浮动(clear)以撑大父容器。这种方法浏览器兼容性好,没有什么问题,缺点就是需要额外的(而且通常是无语义的)标签。
我个人不喜欢这种方法,但是它确实是W3C推荐的方法

<div style="clear:both;"></div>

  或者使用

<br style="clear:both;" />

  2.    使用after伪类

  这种方法就是对父容器使用after伪类和内容声明在指定的现在内容末尾添加新的内容。经常的做法就是添加一个“点”,因为它比较小不太引人注意。然后我们再利用它来清除浮动(闭合浮动元素),并隐藏这个内容。

  这种方法兼容性一般,但经过各种 hack 也可以应付不同浏览器了,同时又可以保证html 比较干净,所以用得还是比较多的。

#outer:after{ 
    content:"."; 
    height:0; 
    visibility:hidden; 
    display:block; 
    clear:both; 
}

  3.    设置overflow为hidden或者auto

  这种做法就是将父容器的overflow设为hidden或auot就可以在标准兼容浏览器中闭合浮动元素.
不过使用overflow的时候,可能会对页面表现带来影响,而且这种影响是不确定的,你最好是能在多个浏览器上测试你的页面

  4.    浮动外部元素,float-in-float

  这种做法就是让父容器也浮动,这利用到了浮动元素的一个特性——浮动元素会闭合浮动元素。这种方式在 IE/Win 和标准兼容浏览器中都有较好的效果,但缺点也很明显——父容器未必想浮动就浮动的了,毕竟浮动是一种比较特殊的行为,有时布局不允许其浮动也很正常。

手动复位锁定的帐户

要在失败的尝试计数器自动复位之前,手动复位被锁定的用户帐户,请删除以下与用户帐户名称对应的注册表子项:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesRemoteAccessParametersAccountLockout域名:用户名

当由于成功的身份验证或自动复位,用户帐户的锁定计数被复位为 0 时,将删除该用户帐户的注册表子项。

注意

远程访问帐户锁定与用户帐户属性的“帐户”选项卡上的“帐户锁定”设置无关。

远程访问帐户锁定功能不能区分企图访问 Intranet 的用户和尝试远程访问但忘记了当前密码的可信用户。忘记当前密码的用户通常会尝试所记得的密码,而根据尝试次数和“MaxDenials”设置,也可能将他们的帐户锁定。

如果启用了远程访问帐户锁定功能,则恶意用户可能会对用户帐户尝试多次身份验证直到帐户锁定为止,因此也阻止了可信用户的登录。

mysql 绿色版的安装

1、添加windows服务
%_root%/bin/mysqld.exe install
2、卸载windows服务 
%mysql_root%/bin/mysqld.exe remove
3、修改my.ini文件
#Path to installation directory. All paths are usually resolved relative to this.
basedir="E:/mysql-5.1.6-alpha-win32/"
#Path to the database root
datadir="E:/mysql-5.1.6-alpha-win32/Data/"
4、重新设置密码
mysqladmin -u root password newpassword
5、登陆
mysql -uroot -p

 1、解压缩mysql-noinstall-5.0.45-win32.zip到一个目录。
      假定MYSQL_HOME=D:Devmysql-5.0.45
 
 2、编写mysql的运行配置文件my.ini
my.ini
—————————–

[mysqld]
# 设置mysql的安装目录
basedir=$MYSQL_HOME
# 设置mysql数据库的数据的存放目录,必须是data,或者是\xxxdata
datadir=$MYSQL_HOMEdata
# 设置mysql服务器的字符集
default-character-set=utf8
 
[client]
# 设置mysql客户端的字符集
default-character-set=gbk
—————————–

3、安装mysql服务
从MS-DOS窗口进入目录E:myservermysql-5.0.37-win32in,运行如下命令:
mysqld –install MySQL5 –defaults-file=:Devmysql-5.0.45my.ini

4、启动mysql数据库
还在上面的命令窗口里面,输入命令:net start MySQL5
这样就启动了mysql服务。

5、删除服务
执行mysqld –remove MySQL5即可

google AD 帐户被停止仍然可以获得站长应得的收入

AdSense发布者在账号被停止后是否可以收到已经支付或即将支付的款项,这是最近很多发布者都在关注的问题,尤其是通过西联汇款支付的用户,因为一旦被停止账号后就不能登录系统,也就无从得到西联的监控码。

事实上Google AdSense发布者可以在账号停止后收到已经支付的款项的。当然这也得看具体的情况,因为和之前支票付款一样,被停止账号的发布者是否能获得之前的收入取决于停止账号的原因。

严重的作弊和其他比较恶劣的投放行为,这样的情况比较难,因为无效点击的收入已经包含在了之前的收入里,甚至有一些已经支付并收到的款项里也有无效点击的收入。这样的发布者不仅不能收到已支付和未支付的款项,还有可能被Google AdSense追溯责任。而一般情形的作弊或无意违反规则的行为,Google AdSense依然会支付之前的收入和即将获得的收入,目前的大部分被停止账号的发布者应该属于这种情况。

上面提到的已支付和未支付收入包含以下几种情况:

1、显示已付款,但是发布者未领取收入,或者未及时登录后来查看并记录西联监控码,这时被停止账号的的;

2、显示正在付款但未显示已支付,这时被停止账号的;

3、上月收入已显示,但未进入支付阶段,这时被停止账号的;

4、月初上月收入尚未显示,这时被停止账号的;

5、累计未支付,或由于其他原因未支付,但是当月已经取消保留付款并满足支付条件,这时被停止账号的;

6、其他的你认为应该或者即将支付的情形,这时被停止账号的。

点击此链接查询被停止账号的监控码,中国服务小组会帮助发布者查询监控码并告诉你相关信息,以便你顺利得到属于你的收入。

https://www.google.com/adsense/support/bin/request.py?search_ask=2&subtopic=&contact=eft&main_topic=receivingPayments&contact_type=6&contact_topic=%E7%94%B5%E5%AD%90%E8%BD%AC%E5%B8%90%E6%88%96%E8%A5%BF%E8%81%94%E4%BB%98%E6%AC%BE&Action.Search=%E7%BB%A7%E7%BB%AD

总之,是你的总会属于你。

如何防止网站被采集

1.搜索自己独有的文章,找到别人采集的联系方式,加他,恐吓他,吓唬他。

2.修改程序,让他采集不完整,故意弄乱序列号。列表也程序化+手工化

3.将自己网站多增加一些内联+外链,用同列网站,交织的让他采集不了

4.增加部分图片,图片带上自己的标识

5.设置修改为一个ip 最多只能读取50页,要他采集不完 

6.故意弄几篇非法色情的的,等他采集走了,自己给删除,**就封了他

7.多弄点对自己网站有用的软文,让别人去采集吧 或弄成自己的镜像网站域名,担心自己的域名被人批量替换掉了

8.dim onlyURL,from '***指定来源网址…

    from=trim(request.serverVariables("HTTP_REFERER"))
    if from="" then '***来源为空:可能是直接输入网址或小偷…
    response.write "
    拒绝小偷!!!"
    response.write "来自:" & from
    response.write "请访问:" & onlyURL &""
    response.write ""
    response.write "" & vbCRLF
    response.end
    else
    if inStr(from,onlyURL)<>1 then
    ' ***非指定来源:盗链…
    response.write "拒绝盗链!!!"
    response.write "来自:" & from
    response.write "请访问:"
    response.write ""
    response.write ""
    response.end
    else '***来源正常,将访问后面的内容…

    end if
    end if
    %> 

    过滤文字:COPYFROM
    替换文字:文章来源: admin5.com  中文站长的聚集地

    在css中添加:
    .copyfrom{
    color:#FFFFFF;/*应该定义为你的文章背景颜色*/
    font-size:1px;
    }

    然后添加文章时,在文章中,最好是换行的时候加几个COPYFROM进去!

三面环绕CSS+DIV广告代码

<div id="new">
        <div id="zhan"></div>
        <div id="ad">放广告代码</div>
        内容标签

</div>

CSS部分:
#zhan{
float: left;            

clear: left;          

height: 200px;  
width: 1px;        
}
#ad{
height: 250px;
width: 250px;
float: left;          
clear: left;        
margin: 15px 15px 15px 0px;
}
#new img,#new table{
clear: left;      

}
#new{
float: left;
}

CSS实用教程(2)

从基础到精通:CSS实用教程(三)
  十二.控制BOX的样式
  样式表规定了一个容器BOX,它将要储存一个对象的所有可操作的样式。包括了对象本身、边框空白、对象边框、对象间隙四个方面。

  为了大家更好地理解这些属性的意义,以及互相之间的关系,请看下面这个图示:

  1.边框空白(MARGIN)
  如图所示,位于BOX模型的最外层,包括四项属性。
  格式分别如下:
  ·margin-top:顶部空白距离
  ·margin-right:右边空白距离
  ·margin-bottom:底部空白距离
  ·margin-left:左边空白距离
  空白的距离可以用带长度单位的数字表示。
  如果使用上述属性的简化方式margin,可以在其后连续加上四个带长度单位的数字,来分别表示margin-top、margin-right、margin-bottom、margin-left,每个数字中间要用空格分隔。
  2.对象边框(BORDER)
  如图所示,位于边框空白和对象空隙之间,包括了七项属性。
  格式分别如下:
  ·border-top:顶边框宽度
  ·border-right:右边框宽度
  ·border-bottom:底边框宽度
  ·border-left:左边框宽度
  ·border-width:所有边框宽度
  ·border-color:边框颜色
  ·border-style:边框样式参数
  其中border-width可以一次性设置所有的边框宽度,border-color同时设置四面边框的颜色时,可以连续写上四种颜色,并用空格分隔。上述连续设置的边框都是按border-top、border-right、border-bottom、border-left的顺序。
  Border-style相对别的属性而言稍稍复杂些,因为它还包括了多个边框样式的参数:
  ·none:无边框。
  ·dotted:边框为点线。
  ·dashed:边框为长短线。
  ·solid:边框为实线。
  ·double:边框为双线。
  ·groove:根据color属性显示不同效果的3D边框
  ·ridge:根据color属性显示不同效果的3D边框
  ·inset:根据color属性显示不同效果的3D边框
  ·outset:根据color属性显示不同效果的3D边框
  3.对象间隙(PADDING)
  如图所示,位于对象边框和对象之间,包括了四项属性。
  基本格式如下:
  ·padding-top:顶部间隙
  ·padding-right:右边间隙
  ·padding-bottom:底部间隙
  ·padding-left:左边间隙
  和MARGIN类似,PADDING也可以用padding一次性设置所有的对象间隙,格式也和MARGIN相似,不再一一列举了。
  十三.显示控制样式
  基本格式如下:
  display: 参数
  参数取值范围:
  ·block(默认):在对象前后都换行
  ·inline:在对象前后都不换行
  ·list-item:在对象前后都换行,增加了项目符号
  ·none:无显示
  十四.空白控制样式
  基本格式如下:
  空白属性决定如何处理元素内的空格。
  white-space: 参数
  参数取值范围:
  normal:把多个空格替换为一个来显示
  pre:忠实地按输入显示空格
  nowrap:禁止换行
  但要注意的是,write-space也是一个块级属性。
  –系列完–
CSS样式表:详细介绍IE7新支持的选择器

  现在IE7已经推出一段时间并且渗透到用户当中,不用等太久我们就可以在页面上使用更高级的CSS。两个最有用的项目将是 Child子和Adjacent Sibling相邻兄弟选择符。现在已是时候使用它们制作网页,并且更深入研究它们。
  注意,选择器包括现行的符号,“>”,“+”和空格(后代选择符),涉及到子选择器,相邻兄弟选择器,后代选择器,统称为选择符。
  一个较好的方法
  在我们研究选择符之前,弄清楚他们的不同和为什么它们是好东西的原因是个不错的主意。原因很简单,它减少网页的“class-itis”弊病。主要原因就是“class-itis”在目前网页中非常普遍,直到现在,我们拥有了为建立配合CSS选择器而存在而且支持完美的后代选择符,即两个选择器之间空格。
  当使用后代选择符,右边的一个元素选择器是被选择的,不管左边的元素选择器标签有几个。举例,p a{color:red;},意思是段落里面的所有链接都是红色。这非常有用,也是一类相当广泛的选择组合。
  代表性的class-itis的级数像下面一样。首先,你使用一个非常好的干净的html结构运用简单的CSS样式构建标题、段落等等。然后有人告诉你每个div块第一段里文本颜色需要红色。你不能仅改变目标段落的样式,因为那可能影响全部,所以你被迫命名一个特殊class应用在第一段。
  于是数十次相同的要求在后面继续,结果就形成了class-itis现象。为什么说这样是糟糕有害的?因为这和font标签比起来没什么区别。当然,classes允许无穷的花样,但是紧随其后就是无穷的混乱,或可能更快胜于随后。
  举个例子,假设你已经给所有第一段加上class属性,而且一切都好。现在你被告知,首两段需要样式,不仅是第一个。为使用正确class完成目的,你必须确信第二段的每个都有专用的class。最后,这样的习惯导致源代码里到处都是class,感觉像新旧两个样式在打斗冲突,让人头痛。
  如果我们只针对CSS讲这样未必不好,实际上“运用下列样式到每个div块第一段和第二段里面。”这样的情况发生了,最新的CSS选择符允许我们耍点小聪明就可办到。
  回顾复习下
  让我们复习一些术语。W3C 2.1 规范解释了选择器(selectors)和选择(combinators):
  “一个选择器是用选择符连接起来的一个或更多的选择器。选择符包括:空格,‘>’和‘+’。空格可能出现在一个选择符和简单的选择器之间。”一个简单的选择器可以是一种类型选择器或是通用选择器跟随零或者更多属性选择器,ID选择器或者伪类,在任何顺序。
  第一个支持的选择符(也经常被称作选择器,这是唯一正确的部分)是子选择符。在简单的选择器之间指定“>”符号。一个简单的例子,#leftcol>p{color:blue;},意思是#leftcol下面所有子段落文本颜色是蓝色。
  但是如果#leftcol有一个DIV,而且DIV还有一个段落,#left>p选择器不会使这个段落里的文本变成蓝色,因为子选择符,不像频繁使用的后代选择符,只选择直接的孩子,不是“>”符号的左边元素任何深度的嵌套后代。
  另外一个新支持的选择符将是相邻选择符,使用"+"符号。子选择符可以指向另外一个元素的子部,相邻选择符可以指向跟随的元素,但与前面的元素独立。例子,h2+p {color:blue;},跟随h2元素后面段落的文本颜色为蓝色。
  现在你明白选择符怎么工作,我们开始研究复杂联合元素,看看我们能不能不使用class达到目的。
  使用选择符
  我们从简单但充分复杂的html结构开始:
  <div>First
DIV
  <p>Paragraph One –
    <a href="#">link A</a>
    <a href="#">link B</a>
  </p>
  <div>Second DIV
    <p>Paragraph Two –
      <a href="#">link C</a>
      <a href="#">link D</a>
    </p>
    <p>Paragraph Three –
      <a href="#">link E</a>
      <a href="#">link F</a>
    </p>
    <p>Paragraph Four –
      <a href="#">link G</a>
      <a href="#">link H</a>
    </p>
    <div>Third DIV
      <p>Paragraph Five –
        <a href="#">link I</a>
        <a href="#">link J</a>
      </p>
      <p>Paragraph Six –
        <a href="#">link K</a>
        <a href="#">link L</a>
      </p>
      <p>Paragraph Seven –
        <a href="#">link M</a>
        <a href="#">link N</a>
      </p>
    </div>
    <p>Paragraph Eight –
      <a href="#">link O</a>
      <a href="#">link P</a>
    </p>
  </div>
  <p>Paragraph Nine –
    <a href="#">link Q</a>
    <a href="#">link R</a>
  </P>
  </div>
  图1 是html结构的文本对象模型树,图揭示了元素之间真实结构的联系。

图1
  在图1里兄弟元素分布在较低的支线上,它们的源头分布在图表从左到右顺序上。每组兄弟元素是它们所在支线会合顶点单一元素的子元素。如Paragraph One, Second DIV, and Paragraph Nine都是兄弟,而且都是First DIV的子元素。
  图2使用清楚的样式显示它们怎么展示,First DIV的结构有Paragraph One, Second DIV, and Paragraph Nine组成。Second DIV有三个以上段落和拥有三个以上段落的Third DIV。所有段落的颜色是白色,每个包含两个链接元素。所有DIV黑色边框轻度褐色。

图2
  图2: DIVs are black-bordered and paragraphs are colored white for clarity.
  这个结构可以进行许多选择符的试验。#p#分页标题#e#
  好了,让我们试着更改Second DIV的三四两个段落。如果我们只想使用后代选择符可以像这样div div p {color:red;};问题是上面的规则影响了Second DIV所有的段落,当然包括Third DIV的所有段落,因为Third div在DIV里面而段落在它里面。 还使用它?后代选择符没有一点选择性,让很多嵌套的元素都被选择当我们宁愿有给小的组选择。
  的确,classes提供更好的选择性,但我们正试着避免class-itis。可是,不使用任何class仅使用相邻选择符比较困难。IE7 以前我们使用下面的方法:
div div p {color: red;}
div div div p {color: black;}
div div p.first {color: black;}
  第一个规则应用了,然后带有另外DIV选择器的另外一个规则颠倒了Third DIV里的样式。随后阻止Paragraph Two的样式,我们没有选择,只有给段落指定一个class更换样式。真是痛苦!
  通过子和兄选择符,我们可以很简单的实现,不需要class。
div>div>p+p {color: red;}
div>div>div p {color: black;}

图3
  图3: Our new combinators have selected only Paragraphs Three and Four.
  让我们来分析下上面的代码,第一个规则的意思是:选择div的子部div的子部段落的相邻兄弟段落。
  Second DIV是第一DIV的子部,Second DIV里面的两个段落即符合直接跟随另外一个段落的要求是Paragraph Two 和 Paragraph Three。Paragraph one没有被选中,因为在Second DIV里面没有兄弟段落在它前面。
  这太棒了,但是还有一个问题。Third DIV同样是一个DIV的子部,同样有三个相邻段落的子部。我们不想Paragraph Six 和 Paragraph Seven被选中,所有必须制定一个规则,第二句的意思就是:选择div的子部div的子部div的后代段落。
  对于我们测试的html,只有Third DIV里的段落适合描述的情况,所以对于目标段落它们用黑色文本代替红色文本。简洁明了,是不是?使用强大的后代、子、兄选择符,大部分class可以从我们的页面去除。我们也不是说大家一定要用到这些选择符,但是我们确信它们比单独使用后代选择符能够给你带来更多的适用性。
  现在我们试着选择Paragraph Eight里的link O 。你将会怎么做?花一点时间想下再看下面介绍的方法。
  我们的方法
  我们的第一个方法就是把Second DIV当做对象,然后使用兄弟选择符链接四个段落选择第四个段落,然后显示第四个段落的链接,最后写上段落的链接颜色代码。
div>div>p+p+p+p a {color: red;}
div>div>p+p+p+p a+a {color: blue;}

图4
  图4: A very narrowly defined element selection without using classes.
  你们知道上面错在哪里了吗?考虑下Third DIV,它的位置正好和这四个段落有关。那就对了,四个段落都是兄弟,但是Paragraph Eight不是Paragraph Four的直接相邻兄弟。Third DIV在它们之间必须作为兄弟考虑进去。我可以仅仅在第三和第四个"P"选择器之间粘贴一个DIV选择器,但是这里有另外一个简单方法实现我们的目的。
div>div>div+p a {color: red;}
div>div>div+p a+a {color: blue;}
  上面的第一条语法指向Third DIV,然后选择它的直系兄弟段落(Paragraph Eight),最后选择段落里面的链接。“a”选择了段落里面所有的链接。接着第二条语句让跟随链接后面的所有链接为蓝色。所以link P的红色链接变成了蓝色,留下link O保持红色。好了我知道蓝色的链接是默认颜色,但我们学到了方法。
  让我们最后阐明下窍门
  考虑到一个元素包含很长的链接元素和其他(我们的例子没有提到)。如果你写个a{color:red;},所有的链接都是红色。现在写 a+a {color:red;},这个结构选择了另外一个直系跟随的链接。在我们的链接元素里每个链接都符合这样的描述,除了第一个链接。不要陷入到认为这个想法将选择互动链接。所有规则的意思是寻找和选择拥有直系并且在它前方有链接的任何链接。明显的除了第一个链接每个链接都是一致符合要求的。
  第一个链接不跟随任何级数的链接,所以a+a{color:red;}没有被选择。知道这个事实,想象下在这个结构里我们添加另外兄弟选择符和“a”选择器每次会发现什么情况。a+a+a{color:red;}排除最初的两个链接,a+a+a+a{color:re
d}排除最初三个链接,等等。
  所以如果你曾经看过,或你自己使用这个选择器窍门,仅仅只要记住这个基本规则:参加的兄弟选择器数目等于序列里第一个被选择的元素的位置。如果这里有8个"a"选择器通过七个兄弟选择符联合,第八个链接和级数里剩余的所有链接将被选择。因而,你可能把相同类型的一系列元素划分为两组,或是为后面的一组使用新样式或是为全组更换样式,然后再为后面的一组更换样式,你自己选择。
  浏览器问题
  IE7非常不幸的认为HTML注释也是真实的DOM元素,所以如果你在错误的地方使用注释,IE7将会把它当作兄弟计算在内,而你设定的选择器将不会工作。使用兄弟选择符时只要了解这个问题注意让注释出现在不会惹麻烦的地方。
  另外一个知道的兄弟选择符问题,除了opera 9外的所有浏览器,当额外元素是经script增加的,它们不会解释基于样式表的兄弟选择符。所以如果你用script在元素中建立一个新的段落,只有Opera 9才会认识到从而改变样式。其他当前浏览器只会忽略动态结构,在新的元素添加进来前保持原来样式。
  额外介绍下:first-child伪类
  IE7新支持:first-child伪类。这个选择器的语法和用法和 :hover伪类相似,:first-child选择元素里出现的第一个子部,用法像:hover一样,比如链接会是a:first-child。
我们认识到使用:first-child比仅使用兄弟选择符来的简单。但在怎样获得赞扬或是用:first-child伪类选择器替换它之前,我们希望大家同样认识到兄弟选择符是怎么独立运用的。
  比较下面的代码,使用:first-child简单许多。
使用 :first-child之前
div>div>div+p a {color: red;}
div>div>div+p a+a {color: blue;}
使用 :first-child…
div>div>div+p a:first-child {color: red;}
  :first-child确实让工作简单许多!不需要另外规则改变样式,只要记住当使用:first-child,它只作用于第一个子部first child。没有其他兄弟元素被选择,所以我们还需要兄弟选择符的才干。
  我们可不可以使用兄弟和子选择符联合:first-child?当然可以,子选择符看起来没有问题。可是,兄弟选择符不能直接跟在:first-child前面,因为很明显第一个子部不可能有上面的兄弟。
  IE的问题
  IE7似乎有一个问题,当兄弟选择符比:first-child在选择器中来的晚,IE7顺从兄弟选择符。这个情况也在其他浏览器有,但IE7显然不能处理相关的复杂性。这看来不够完美,不过至少IE7支持简单适度的联合结构,或许现在就可。
  所以脑袋里记住,作为兄弟选择符,IE7将会考虑第一个链接前面的html注释为元素节点,而且IE7会选择注释代替,甚至你使用a:first-child都没用。IE7不关心:first-child伪类前面的"a",它仍然坚持选择注释(注释和第一个链接在同一个容器而且在链接前面)。所以当你使用注释和高级CSS选择器要清楚了解真相。
  结论
  我们希望这篇文章没有给你们带来困惑,当支持更多选择符时了解更多可以用到的可能性样式。这在IE7大规模推广前还没有用处,现在你可以做好准备,至少关注已经支持的选择符。