2006年01月08日 星期日

关于居中布局和IE双倍边距bug

今天google了一下css居中布局的问题,结果差不多都是引用了同一篇文章。在ie中要居中,只要在<body>元素中定义text-align:center;的属性。而在firefox中,需要定义一个wrapper包裹器。然后指定margin-left:auto;margin-right:auto;的属性来使区块在firefox中居中。其实,我自己都是用margin:auto;的缩写margin属性来设定居中。margin缩写属性是上、右、下、左的顺时针顺序来设定四个方位的页面边距的。需要注意的是,如果你据此以为只要设定margin-top:auto;属性后就想使区块居中的话,那你就错了。用这种方式的时候,非得同时设定margin-left:auto;margin-right:auto;属性才能居中。但是,你设定margin:0 auto;这样的方法也是可以居中的。
另外一种居中的方法是在使用绝对定位的前提下,用left:50%+margin-left:-375px;的组合方式来居中。两种居中方式如下。

/* 方法一 */
body {
    background: #00FF7F;
    text-align: center; /* hack for ie center alignlayout */
}
#wrapper{
    background: Aqua;
    width: 750px;
    margin:auto; /* 或者 margin-left:auto;margin-right:auto;*/
}
/* 方法二 */
#wrapper2 {
    position: absolute;
    width:750px;
    left:50%;
    margin-left:-375px;
    background: Orange;
}

我个人一直使用方法一的方式来居中,因为感觉方法二的区块缺乏必要的刚性,代码也不太好理解。如果你缩小方法二的窗体到一定限度,就会看到整个布局会出现流动的情况。当然有人要的就是这种效果。:),另外方法二的一个好处是在其他嵌套区块中不必覆盖body元素的text-align: center;的设定,因为大部分文本还是会以左对齐居多。这样一定程度上可以减少一点冗余。不过我觉得这个好处可以忽略不计。总之,大家根据各自喜好各取所需便是。

另外一个是ie的双倍边距的bug,解决方法就是加上display:inline;的设定即可。其实这个解析错误的bug会影响很多方面。如果你遇到css布局在ie中间距表现异常的时候,就可以试试看加上display:inline;的属性申明了。而且在一定特定的布局问题问题,需要组合使用display:block;和display:inline;才能让布局如你所愿。我在一个unorder list控制的图片菜单中就遇到过类似的问题。

尽快各种不同的浏览器都有css bug,但是css页面布局方式发展到今天,已经比较成熟了,因为bug而让你抓狂不已的发生机率已经不大了。如果有问题,多查查搜索引擎能够解决你大部分的问题。如果,平时闲着的时候,可以作些试验的话,也许更能够在紧急情况下也能够泰然自若。

下次有机会谈谈,图形、图片、flash、javascript和css的组合布局问题。毕竟,客户要的是更“美”的布局。

[technorati relative tag]

[相关内容]

由 tristones 发表于 2006年01月08日 下午09時43分

留言

你好,想请教一个问题,就是在一般的blog中,一般会控制页面中的图片显示大小,以免图片太大撑坏了本来的框架,请问这个是在CSS的哪里设置的,可以把框架改得大一点,这样贴了大的图片也不会超出页面的框架。谢谢

Posted by: tia 发表于 2006年01月14日 下午08時26分

最基本就是width属性,这个看你的具体的问题来谈比较好。

Posted by: tristones 发表于 2006年01月15日 上午12時32分

tp huiqun:
我不知道是你断章取义的问题还是翻译的问题。我无法确切明白他在说些什么,感觉你看这本中译本是有点浪费自己的意思。
扔掉它,从自己实践开始,有问题,网络上那么多的资源,一般来说,你的问题前人肯定遇到过了。而且有现成的解答,不用抓住我这个半瓶水不放哦。:)

Posted by: tristones 发表于 2006年01月19日 上午10時25分

不是我抓住你不放,而是你上次,回答的几个问题,很到位,对你很信任。别人那我也没问出来,GOOGLE,BAIDU也搜不着,着急,我看的书是“css权威指南”,不好意思,如果站主,有好的书,发我几本,或告诉我书名也好,我实在是受不了了,崩溃中。

Posted by: huiqun 发表于 2006年01月19日 上午10時38分

只能说明他们的翻译有够烂的。:),关于css的书,我一本也没看过。如果要学,你可以去css zen garden,把不同设计师贡献的不同布局风格copy回来,一个个试验看看。我想你学到的要远远比这本书多且有用。
ps:我不是诋毁这本书,作者够权威,译者很一般。

Posted by: tristones 发表于 2006年01月19日 上午10時58分

介绍几个比较好学习地方或网站,上次由于重做系统,几个比较好的外国网站,都忘了。

Posted by: huiqun 发表于 2006年01月19日 上午11時06分

问一个菜鸟问题:
*************************
html的定位规则是什么??
*************************

Posted by: huiqun 发表于 2006年01月20日 下午02時22分