欢迎大家访问我的BLOG,我会多多的出原创文章,希望大家支持我,为我祈祷,让我实现我的三个梦想!再30岁能成为一个名优秀的软件架构师!
随笔 - 13, 文章 - 130, 评论 - 62, 引用 - 0
数据加载中……

2009年12月1日

数据库的表和字段的注释。表的结构。(转)

这里的表结构指的表的基本信息:表名,表的注释(备注),字段名,字段类型,长度,是否允许空,缺省值,字段注释(备注)。
 
主要的是注释..你的表明叫lcxxb,字段名叫lcmc,智商300的用户也看不懂你这是拼音,意思是"流程信息表"和"流程名称"。大家的思路都不一样。

我要做到的就是让用户看到的是"流程信息表"和"流程名称"而实际操作的是lcxxb和lcmc。
你自己建个表XXX来保存lcxxb,lcmc和"流程信息表","流程名称"的对应吧。是相当麻烦的事情,
1,造成数据冗余,人家数据库基本上都能让你给表和字段写注释,你还自己搞一套..
2,每次修改表都要去修改一下这张表,删除的表和字段要删除,更新的表和字段要更新,新建的表和字段要新建,累..
3,每次创建数据库都要独立的再填写表XXX的内容。每次修改了数据库设计,创建数据库的程序也要跟着修改。
所以俺还是老老实实用数据库提供的注释或备注或数据字典功能吧。

但是这又涉及一个问题:各种数据库保存注释(备注)的方法不一样,虽然现在只用MS Sql server,但难保以后不会用Oracle。要不是大家都各搞一套,巴别塔也许早就建成了。
 
SQL server下的方法:
SQL Server下生成数据库框架。
经过反复学习和测试,最后发现自定义的视图才能简单地胜任所需要的工作,否则把事情会变得很复杂。
视图代码如下(摘自 SQL Server下生成数据库框架):
CREATE VIEW dbo.Data_Frame
AS
SELECT dbo.syscolumns.name AS Name, dbo.systypes.name AS Type,
      dbo.syscolumns.length AS Width, dbo.syscolumns.isnullable AS IsNull,
      dbo.sysproperties.[value], dbo.sysobjects.name AS Table_Name
FROM dbo.sysobjects INNER JOIN
      dbo.syscolumns ON dbo.sysobjects.id = dbo.syscolumns.id INNER JOIN
      dbo.sysproperties ON dbo.syscolumns.colid = dbo.sysproperties.smallid AND
      dbo.syscolumns.id = dbo.sysproperties.id INNER JOIN
      dbo.systypes ON dbo.syscolumns.xtype = dbo.systypes.xtype AND
      dbo.syscolumns.xusertype = dbo.systypes.xusertype

最后输出的是:
列名
系统类型
限制长度
是否允许为空
备注
所在表
可以进一步根据需要增加/删除自己希望的部分。
调用:
Select * From [自定义的视图名称] Where Table_Name='[希望检索的表名]'

或者 取得一个表中所有的字段列表及字段描述的方法:
字段名列表:
select Name from syscolumns where id=object_id('custmoerinfo')
字段描述:
select * from ::fn_listextendedproperty(NULL, 'user', 'dbo', 'table', 'custmoerinfo','column', default)

ORACLE下的方法:
ORACLE自己搞了一套数据字典(摘自Oracle数据字典的介绍与应用实例)
创建表的SQL语句如下
--" 创建数据表
create table TABLE_TEST
(
  NAME varchar2(40) not null,
  SEX varchar2(1) default 'Y' not null,
  BIRTHDAY date not null,
  HEIGHT number(3,2),
  WEIGHT number(3,2),
  MEMO blob
);
-- 给列添加备注
  comment on column TABLE_TEST.NAME is '姓名';
  comment on column TABLE_TEST.SEX is '性别';
  comment on column TABLE_TEST.BIRTHDAY is '生日';
  comment on column TABLE_TEST.HEIGHT is '身高';
  comment on column TABLE_TEST.WEIGHT is '体重';
  comment on column TABLE_TEST.MEMO is '备注';
-- 创建约束关系 主键 外键 其他
  alter table TABLE_TEST add constraint TB_TEST_P_NAME primary key (NAME);
  
数据表创建完毕,执行下列SQL语句:
  select
  A.column_name 字段名,A.data_type 数据类型,A.data_length 长度,A.data_precision 整数位,
  A.Data_Scale 小数位,A.nullable 允许空值,A.Data_default 缺省值,B.comments 备注
  from
  user_tab_columns A,user_col_comments B
  where
  A.Table_Name = B.Table_Name
  and A.Column_Name = B.Column_Name
  and A.Table_Name = 'TABLE_TEST'
  
我们可以得出以下结果:
字段名 数据类型 长度 整数位 小数位 允许空值 缺省值 备注
Name varchar2 40     N <long> 姓名
Sex varchar2 1     N <long> 性别
........

 

MySql是怎么弄的?有一个词中文读gan,英文读f*ck,法文读什么?-_-!

 

学习数据库的一些资料:

存储过程的好处:1编译2封装3重复使用4安全性5减少网络流量

JDBC读取字段需要按顺序的原因?:SQL数据库在构造虚拟表的时候就是以一种先进先出的原则,把所有的数据排列在一个内存段之中,通过顺序的读取,将数据逐一的读取,而如果跳过某个具体的字段获取下一个字段的信息,系统就会将原来的那个字段的信息丢失,以释放内存,这是出于系统构造的简单性和系统的内存最低化的要求,所以这样也保证了有限的内存资源得到最充分的发挥。?

在SQL Server中保存和输出图片http://www.pcdog.com/p/html/2004124/41220041381_1.htm

很好的一个电子书下载地址http://www.ibook8.com/book/shuju.htm

posted @ 2009-12-01 09:40 程序缘 阅读(90) | 评论(0) | 编辑

2009年11月5日

(转)不同数据库的数据插入

转自:http://www.cnblogs.com/xiayang/archive/2008/11/20/1337499.html

1.同一服务器不同数据库表的数据插入

insert into GDUAPDEV3.dbo.tbltmTaskList
select * from UAP2.dbo.tbltmTaskList --表结构相同的情况

2.不同服务器的数据库表的数据插入

SQL Server2005中要先链接服务器才执行SQL

a.点击链接服务器

b.输入链接服务器的IP,以及选择SQL Server

c.选择“安全性”,点击,“添加”,添加一条,注意第一个选择第项,然后输入用户名与密码,在下面,也要选择最后一个,然后输入用户名与密码。

 

OK,现在已经将数据库链接上了,接下来写脚本然后执行喽。

insert into GDUAPDEV3.dbo.tbltmTaskList
select * from [192.168.138.36].UAP2.dbo.tbltmTaskList --表结构相同的情况

posted @ 2009-11-05 17:30 程序缘 阅读(34) | 评论(0) | 编辑

不同服务器的数据库的数据导入

INSERT INTO OPENDATASOURCE('SQLOLEDB','Data Source=机器名\A实例名;User ID=登陆名;Password=密码').dbname.dbo.tbname
   
SELECT *

   
FROM OPENDATASOURCE('SQLOLEDB','Data Source=机器名\B实例名;User ID=登陆名;Password=密码').dbname.dbo.tbname

这时出现了SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'Ad Hoc Distributed Queries'。的错误

解决方法:

    启用Ad Hoc Distributed Queries:
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
    使用完成后,关闭Ad Hoc Distributed Queries:
exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure
exec sp_configure 'show advanced options',0
reconfigure

posted @ 2009-11-05 17:25 程序缘 阅读(9) | 评论(0) | 编辑

2009年10月26日

(转)C#冒泡算法

 参加多次笔试,居然有几次都考到了冒泡算法,一次是C#版的填空,一次是javascript版的全部写出。
  虽然每次都凭着我对冒泡法的理解给弄出来的,但是多多少少与标准模式有点差别,在网上搜了一下关于C#版的冒泡算法,居然也没有一个象样的,自己对照算法模式认真写了一个C#版的,已经测试成功。

    class Program
    {
        static void Main()
        {
            int[] R ={ 9, 2, 8, 4, 7, 6 };
            BubbleSort(R);
            foreach (int i in R)
            {
                Console.WriteLine(i);
            }

            Console.Read();
           
        }
         public static void BubbleSort(int[] R)
          {
              int i, j, temp; //9 2 8 4 7 6
              //交换标志
              bool exchange;
              //最多做R.Length-1趟排序
              for (i = 0; i < R.Length; i++)
              {
                  //本趟排序开始前,交换标志应为假
                  exchange = false;
                  for (j = R.Length - 2; j >= i; j--)
                  {
                      //交换条件
                      if (R[j + 1] < R[j])
                      {
                          temp = R[j + 1];
                          R[j + 1] = R[j];
                          R[j] = temp;
                          //发生了交换,故将交换标志置为真
                          exchange = true;
                      }
                  }


                  //本趟排序未发生交换,提前终止算法
                  if (!exchange)
                  {
                      break;
                  }
              }
          }  
    }

posted @ 2009-10-26 15:10 程序缘 阅读(34) | 评论(0) | 编辑

(转)用递归的算法求1,1,2,3,5,8.......的第30位数是多少,然后求这些数的和

用递归的算法求1,1,2,3,5,8.......的第30位数是多少,然后求这些数的和.
    代码如下: 
     public int num(int i)    //第i位数是多少
        {
            if (i == 1)
                return 1;
            else if (i == 2)
                return 1;
            else
                return num(i - 1) + num(i - 2);
        }
        public int sum(int i)   //所有数的和
        {
            if (i == 1)
                return 1;
            else if (i == 2)
                return 2;
            else
                return sum(i - 1) + num(i);

        }

调用:num(7),即求出第7位数是多少。

调用:sum(7),即求出这7位数的和。

 

转自:http://www.cnblogs.com/paper/archive/2009/07/28/1533111.html

posted @ 2009-10-26 14:27 程序缘 阅读(71) | 评论(0) | 编辑

2009年9月21日

JavaScript 闭包深入理解(closure)

本文来自: 脚本之家(www.jb51.net) 详细出处参考:http://www.jb51.net/article/18303.htm

最近在网上查阅了不少Javascript闭包(closure)相关的资料,写的大多是非常的学术和专业。对于初学者来说别说理解闭包了,就连文字叙述都很难看懂。撰写此文的目的就是用最通俗的文字揭开Javascript闭包的真实面目。
一、什么是闭包?
“官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
相信很少有人能直接看懂这句话,因为他描述的太学术。其实这句话通俗的来说就是:JavaScript中所有的function都是一个闭包。不过一般来说,嵌套的function所产生的闭包更为强大,也是大部分时候我们所谓的“闭包”。看下面这段代码:

function a() {
  var i = 0;
  function b() {
    alert(++i);
  }
  return b;
}
var c = a();
c();
这段代码有两个特点:

函数b嵌套在函数a内部;
函数a返回函数b。

引用关系如图:


这样在执行完var c=a()后,变量c实际上是指向了函数b,b中用到了变量i,再执行c()后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b,就是说:

当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个我们通常所谓的“闭包”。
让我们说的更透彻一些。所谓“闭包”,就是在构造函数体内定义另外的函数作为目标对象的方法函数,而这个对象的方法函数反过来引用外层外层函数体中的临时变量。这使得只要目标 对象在生存期内始终能保持其方法,就能间接保持原构造函数体当时用到的临时变量值。尽管最开始的构造函数调用已经结束,临时变量的名称也都消失了,但在目 标对象的方法内却始终能引用到该变量的值,而且该值只能通这种方法来访问。即使再次调用相同的构造函数,但只会生成新对象和方法,新的临时变量只是对应新 的值,和上次那次调用的是各自独立的。
为了更深刻的理解闭包,下面让我们继续探索闭包的作用和效果。

二、闭包有什么作用和效果?
简而言之,闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。这是对闭包作用的非常直白的描述,不专业也不严谨,但大概意思就是这样,理解闭包需要循序渐进的过程。
在上面的例子中,由于闭包的存在使得函数a返回后,a中的i始终存在,这样每次执行c(),i都是自加1后alert出i的值。

那么我们来想象另一种情况,如果a返回的不是函数b,情况就完全不同了。因为a执行完后,b没有被返回给a的外界,只是被a所引用,而此时a也只会被b引用,因此函数a和b互相引用但又不被外界打扰(被外界引用),函数a和b就会被GC回收。(关于Javascript的垃圾回收机制将在后面详细介绍)

三、闭包的微观世界
如果要更加深入的了解闭包以及函数a和嵌套函数b的关系,我们需要引入另外几个概念:函数的执行环境(excution context)、活动对象(call object)、作用域(scope)、作用域链(scope chain)。以函数a从定义到执行的过程为例阐述这几个概念。

当定义函数a的时候,js解释器会将函数a的作用域链(scope chain)设置为定义a时a所在的“环境”,如果a是一个全局函数,则scope chain中只有window对象。
当执行函数a的时候,a会进入相应的执行环境(excution context)。
在创建执行环境的过程中,首先会为a添加一个scope属性,即a的作用域,其值就为第1步中的scope chain。即a.scope=a的作用域链。
然后执行环境会创建一个活动对象(call object)。活动对象也是一个拥有属性的对象,但它不具有原型而且不能通过JavaScript代码直接访问。创建完活动对象后,把活动对象添加到a的作用域链的最顶端。此时a的作用域链包含了两个对象:a的活动对象和window对象。
下一步是在活动对象上添加一个arguments属性,它保存着调用函数a时所传递的参数。
最后把所有函数a的形参和内部的函数b的引用也添加到a的活动对象上。在这一步中,完成了函数b的的定义,因此如同第3步,函数b的作用域链被设置为b所被定义的环境,即a的作用域。
到此,整个函数a从定义到执行的步骤就完成了。此时a返回函数b的引用给c,又函数b的作用域链包含了对函数a的活动对象的引用,也就是说b可以访问到a中定义的所有变量和函数。函数b被c引用,函数b又依赖函数a,因此函数a在返回后不会被GC回收。

当函数b执行的时候亦会像以上步骤一样。因此,执行时b的作用域链包含了3个对象:b的活动对象、a的活动对象和window对象,如下图所示:

如图所示,当在函数b中访问一个变量的时候,搜索顺序是:

先搜索自身的活动对象,如果存在则返回,如果不存在将继续搜索函数a的活动对象,依次查找,直到找到为止。
如果函数b存在prototype原型对象,则在查找完自身的活动对象后先查找自身的原型对象,再继续查找。这就是Javascript中的变量查找机制。
如果整个作用域链上都无法找到,则返回undefined。
小结,本段中提到了两个重要的词语:函数的定义与执行。文中提到函数的作用域是在定义函数时候就已经确定,而不是在执行的时候确定(参看步骤1和3)。用一段代码来说明这个问题:

function f(x) {
  var g = function () { return x; }
  return g;
}
var h = f(1);
alert(h());这段代码中变量h指向了f中的那个匿名函数(由g返回)。

假设函数h的作用域是在执行alert(h())确定的,那么此时h的作用域链是:h的活动对象->alert的活动对象->window对象。
假设函数h的作用域实在定义时确定的,就是说h指向的那个匿名函数在定义的时候就已经确定了作用域。那么在执行的时候,h的作用域链为:h的活动对象->f的活动对象->window对象。
如果第一种假设成立,那输出值就是undefined;如果第二种假设成立,输出值则为1。

运行结果证明了第2个假设是正确的,说明函数的作用域确实是在定义这个函数的时候就已经确定了。

四、闭包的应用场景
保护函数内的变量安全。以最开始的例子为例,函数a中i只有函数b才能访问,而无法通过其他途径访问到,因此保护了i的安全性。
在内存中维持一个变量。依然如前例,由于闭包,函数a中i的一直存在于内存中,因此每次执行c(),都会给i自加1。
通过保护变量的安全实现JS私有属性和私有方法(不能被外部访问)推荐阅读:http://javascript.crockford.com/private.html
私有属性和方法在Constructor外是无法被访问的

function Constructor(...) {
  var that = this;
  var membername = value;
  function membername(...) {...}
}以上3点是闭包最基本的应用场景,很多经典案例都源于此。

五、Javascript的垃圾回收机制
在Javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收。如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。因为函数a被b引用,b又被a外的c引用,这就是为什么函数a执行后不会被回收的原因。

六、结语
理解JavaScript的闭包是迈向高级JS程序员的必经之路,理解了其解释和运行机制才能写出更为安全和优雅的代码。如果您对本文有任何的建议和疑问,欢迎留言。转载请著名出处。

本文来自: 脚本之家(www.jb51.net) 详细出处参考:http://www.jb51.net/article/18303.htm

posted @ 2009-09-21 13:57 程序缘 阅读(60) | 评论(0) | 编辑

2009年9月16日

haslayout综合

要想更好的理解 css, 尤其是 IE 下对 css 的渲染,haslayout 是一个非常有必要彻底弄清除的概念。大多 IE
下的显示错误,就是源于 haslayout。

什么是 haslayout ?

haslayout 是Windows Internet Explorer渲染引擎的一个内部组成部分。在Internet Explorer中,一个元素要么自己对自身的内容进行计算大小和组织,要么依赖于父元素来计算尺寸和组织内容。为了调节这两个不同的概念,渲染引擎采用了 hasLayout 的属性,属性值可以为true或false。当一个元素的 hasLayout 属性值为true时,我们说这个元素有一个布局(layout)

当一个元素有一个布局时,它负责对自己和可能的子孙元素进行尺寸计算和定位。简单来说,这意味着这个元素需要花更多的代价来维护自身和里面的内容,而不是依赖于祖先元素来完成这些工作。因此,一些元素默认会有一个布局。当我们说一个元素“拥有layout”或“得到layout”,或者说一个元素“has layout” 的时候,我们的意思是指它的微软专有属性 hasLayout 被设为了 true 。一个“layout元素”可以是一个默认就拥有 layout 的元素或者是一个通过设置某些 CSS 属性得到 layout 的元素。如果某个HTML元素拥有 haslayout 属性,那么这个元素的 haslayout 的值一定只有 true,haslayout 为只读属性 一旦被触发,就不可逆转。通过 IE Developer Toolbar 可以查看 IE 下 HTML 元素是否拥有haslayout,在 IE Developer Toolbar 下,拥有 haslayout 的元素,通常显示为“haslayout = -1”。

负责组织自身内容的元素将默认有一个布局,主要包括以下元素(不完全列表):

* body and html
* table, tr, th, td
* img
* hr
* input, button, file, select, textarea, fieldset
* marquee
* frameset, frame, iframe
* objects, applets, embed

对于并非所有的元素都默认有布局,微软给出的主要原因是“性能和简洁”。如果所有的元素都默认有布局,会对性能和内存使用上产生有害的影响。

如何激发 haslayout?

大部分的 IE 显示错误,都可以通过激发元素的 haslayout 属性来修正。可以通过设置 css 尺寸属性(width/height)等来激发元素的 haslayout,使其“拥有布局”。如下所示,通过设置以下 css 属性即可。

* display: inline-block
* height: (任何值除了auto)
* float: (left 或 right)
* position: absolute
* width: (任何值除了auto)
* writing-mode: tb-rl
* zoom: (除 normal 外任意值)

Internet Explorer 7 还有一些额外的属性(不完全列表):

* min-height: (任意值)
* max-height: (除 none 外任意值)
* min-width: (任意值)
* max-width: (除 none 外任意值)
* overflow: (除 visible 外任意值)
* overflow-x: (除 visible 外任意值)
* overflow-y: (除 visible 外任意值)
* position: fixed

其中 overflow-x 和 overflow-y 是 css3 盒模型中的属性,目前还未被浏览器广泛支持。

对于内联元素(默认即为内联的元素,如 span,或 display:inline; 的元素),

  • width 和 height 只在 IE5.x 下和 IE6 或更新版本的 quirks 模式下触发 hasLayout 。而对于 IE6,如果浏览器运行于标准兼容模式下,内联元素会忽略 width 或 height 属性,所以设置 width 或 height 不能在此种情况下令该元素具有 layout。
  • zoom 总是可以触发 hasLayout,但是在 IE5.0 中不支持。

具有“layout” 的元素如果同时 display: inline ,那么它的行为就和标准中所说的 inline-block 很类似了:在段落中和普通文字一样在水平方向和连续排列,受 vertical-align 影响,并且大小可以根据内容自适应调整。这也可以解释为什么单单在 IE/Win 中内联元素可以包含块级元素而少出问题,因为在别的浏览器中 display: inline 就是内联,不像 IE/Win 一旦内联元素拥有 layout 还会变成 inline-block。

haslayout 问题的调试与解决

当网页在 IE 中有异常表现时,可以尝试激发 haslayout 来看看是不是问题所在。常用的方法是给某元素 css 设定 zoom:1 。使用 zoom:1 是因为大多数情况下,它能在不影响现有环境的条件下激发元素的 haslayout。而一旦问题消失,那基本上就可以判断是 haslayout 的原因。然后就可以通过设定相应的 css 属性来对这个问题进行修正了。建议首先要考虑的是设定元素的 width/height 属性,其次再考虑其他属性。

对 IE6 及更早版本来说,常用的方法被称为霍莉破解(Holly hack),即设定这个元素的高度为 1% (height:1%;)。需要注意的是,当这个元素的 overflow 属性被设置为 visible 时,这个方法就失效了。或者使用 IE 的条件注释。

对 IE7 来说,最好的方法时设置元素的最小高度为 0 (min-height:0;)。

haslayout 问题引起的常见 bug

IE6 及更低版本的双空白边浮动 bug

bug 修复: display:inline;

IE5-6/win 的 3 像素偏移 bug

bug 修复: _height:1%;

E6 的躲躲猫(peek-a-boo) bug

bug 修复: _height:1%;

糖伴西红柿说,这篇文章不是原创,是网上资源的汇总,加上自己理解的综合。可能还不是很全面,还需要再进一步细化。


转自:http://www.qianduan.net/comprehensive-haslayout.html

posted @ 2009-09-16 16:04 程序缘 阅读(54) | 评论(0) | 编辑

详解display:inline | block |inline-block的区别(转)

display:block就是将元素显示为块级元素.

block元素的特点是:
总是在新行上开始;
高度,行高以及顶和底边距都可控制;
宽度缺省是它的容器的100%,除非设定一个宽度
<div>, <p>, <h1>, <form>, <ul>
<li>是块元素的例子。

display:inline就是将元素显示为行内元素.

inline元素的特点是:
和其他元素都在一行上;

高,行高及顶和底边距不可改变;
宽度就是它的文字或图片的宽度,不可改变。
<span>, <a>, <label>, <input>, <img>, <strong>
<em>inline元素的例子。

inlineblock可以控制一个元素的行宽高等特性,需要切换的情况如下:

让一个inline元素从新行开始;
让块元素和其他元素保持在一行上;
控制inline元素的宽度(对导航条特别有用);
控制inline元素的高度;
无须设定宽度即可为一个块元素设定与文字同宽的背景色。

display:inline-block将对象呈递为内联对象,但是对象的内容作为块对象呈递。旁边的内联对象会被呈递在同一行内,允许空格。

inline-block的元素特点:

     将对象呈递为内联对象,但是对象的内容作为块对象呈递。旁边的内联对象会被呈递在同一行内,允许空格。(准确地说,应用此特性的元素呈现为内联对象,周围元素保持在同一行,但可以设置宽度和高度地块元素的属性)

     并不是所有浏览器都支持此属性,目前支持的浏览器有:OperaSafariIE中对内联元素使用display:inline-blockIE是不识别的,但使用display:inline-blockIE下会触发layout,从而使内联元素拥有了display:inline-block属性的表症。从上面的这个分析,也不难理解为什么IE下,对块元素设置display:inline-block属性无法实现inline-block的效果。这时块元素仅仅是被display:inline-block触发了layout,而它本就是行布局,所以触发后,块元素依然还是行布局,而不会如Opera中块元素呈递为内联对象。

IE下块元素如何实现display:inline-block的效果?

有两种方法:
1
、先使用display:inline-block属性触发块元素,然后再定义display:inline,让块元素呈递为内联对象(两个display要先后放在两个CSS声明中才有效果,这是IE的一个经典bug,如果先定义了display:inline-block,然后再将display设回inlineblocklayout不会消失)。代码如下(...为省略的其他属性内容):

div {display:inline-block;...}
div {display:inline;}


2
、直接让块元素设置为内联对象呈递(设置属性display:inline),然后触发块元素的layout(如:zoom:1等)。代码如下:

div {display:inline; zoom:1;...}



http://www.cnblogs.com/trendline/articles/1500716.html

posted @ 2009-09-16 14:06 程序缘 阅读(78) | 评论(0) | 编辑

css中的min-width

http://kino.javaeye.com/blog/239812

 

我们在做布局设计时,经常有这样的布局,两边或者一边是导航类工具栏 ,中间是内容区域。

 

但我们希望中间的内区域能够自动适应,随着不同的分辨率和浏览器的大小自动适应高度和宽度,以获得较好的显示效果。

 

我们假设中间的内容区域是个div,如果我们不明确设置它样式的width属性,它是可以自动适应的,按说这满足了要求。

 

但是当浏览器的宽度过小时,小到已经不能整齐的显示我们的内容,页面的显示就会混乱不堪。

 

这时我们可以为该内容div设置一个min-width,比如在css中:
Html代码

#content{
     min-width:600px;
}

 这个属性的功能就像它的名字一样简单:最小宽度。该div还是自动适应宽度,但它多了个条件,当它自适应的宽度小于设置的最小宽度时,就会把该div的宽度设置为最小宽度,不再自动适应。

 

这个属性在firefox和ie7中是可以使用的,但在ie6中不支持,我们可以用下面这段代码代替:
Java代码

#content{
  _width: expression(((document.compatMode && document.compatMode=='CSS1Compat')? document.documentElement.clientWidth : document.body.clientWidth) < 700? '600px' : 'auto');
}

 前面的这段:
Js代码


((document.compatMode && document.compatMode=='CSS1Compat')? document.documentElement.clientWidth : document.body.clientWidth) < 700


 只是个判定条件,判定页面body的宽度,这里的是,如果页面body的宽度小于700(这个要根据具体的页面来指定),就把content的宽度指定为600,否则就让它自适应宽度。

 

 

其实min-height也同理!

posted @ 2009-09-16 11:10 程序缘 阅读(34) | 评论(0) | 编辑

2009年8月24日

带业往生净土者,是否以后不受果报?

     摘要: 往生净土后不是意味有债不必还,犯杀盗淫妄不受报,若如此观念是邪见错误的;往生到极乐净土,是因为净土环境好(依报庄严),师资阵容、同参道友殊胜(正报庄严),在彼极乐净土好修行 ,其道心永不退转(梵语avinivartaniya),直至成佛,或随其本愿修短自在(住在极乐净土长短可随心所欲),若一旦证成果位,你亦可倒驾慈航还入娑婆度化有情,是这种立场与动机而带业往生的,并不是成佛后或往生后即不受果报,若...  阅读全文

posted @ 2009-08-24 15:13 程序缘 阅读(21) | 评论(0) | 编辑