1、CSS 中元素水平居中显示的方法(2009-06-12)用 CSS 让元素居中显示并不是件很简单的事情。同样的 CSS 居中设置在不同浏览器中的表现也各有千 秋。本文就介绍了在 CSS 中常见的几种让元素水平居中显示的方法。1.使用自动外边距实现居中CSS 中首选的让元素水平居中的方法就是使用 margin 属性将元素的margin-left 和 margin-right 属性设置为 auto 即可。在实际使用中,我们可以为这些需要居中的元素创建一个起容器作用的 div。需要特别注意的一点就是,必须为该容器指定宽度:在大多数主流浏览器中,这种方法都非常有效,即使是 Windows 平台上的IE
2、6,在其标准兼容模式(compliance mode)下也能够正常显示。但不幸的是,在更低版本的 IE 中,这种设置却并不能实现居中效果。所以若想在实际项目中使用这种方法,那么就要确保用户的 IE 浏览器版本不低于 6.0。尽管在支持上不尽如人意,但大多数设计师都建议尽可能地使用这种方法。该方法也被认为是在各种用 CSS 实现元素水平居中方法中最正确、最合理的 一种。2.使用 text-align 实现居中另一种实现元素居中的方法是使用 text-align 属性,将该属性值设置为center 并应用到 body 元素上即可。这种做法是彻头彻尾的 hack,但它却能兼容大多数浏览器,所以在某些
3、情况下也自然必不可少。之所以说它是 hack,是因为这种方法并没有将文本属性应用到文本上,而是应用到了作为容器的元素上。这也给我们带来了额外的工作。在创建好布 局必须的 div 之后,我们要按照如下代码为 body 应用 text-align 属性:之后会出现什么问题吗?body 的所有子孙元素都会被居中显示。因此,我们就需要用再写一条规则,让其中的文本回到默认的居左对齐:可以想象这条附加的规则将带来一些不便。另外,真正完全遵循标准的浏览器并不会改变容器的位置,而只会让其中的文字居中显示。3.组合使用自动外边距和文本对齐因为文本对齐居中方式有着良好的向下兼容性,且自动外边距方式也被大多数当代浏
4、览器支持,所以很多设计师将二者组合起来使用,以期让居中效果得 到最大限度的跨浏览器支持:可是这始终是个 hack,无论如何也算不上完美。我们还是需要为居中容器中的文本编写附加的规则,但至少在各个浏览器中看起来都不错。4.负外边距解决方案负外边距解决方案远不是仅仅为元素添加负外边距这么简单。这种方法需要同时使用绝对定位和负外边距两种技巧。下面是该方案的具体实现方法。首先,创建一个包含居中元素的容器,然后将其绝对定位于相对页面左边边缘 50%的位置。这样,该容器的左外边距将 从页面 50%宽度的位置开始算起。然后,将容器的左外边距值设置为负的容器宽度的一半。这样即可将该容器固定在页面水平方向的中点
5、。虽然这并不是首选的解决方案,但利用 CSS 使网页居中对齐文章来源:网络 文章作者: 发布时间:2006-04-14 字体: 大 中 小如何使 DIV 居中主要的样式定义如下:body TEXT-ALIGN: center;#center MARGIN-RIGHT: auto; MARGIN-LEFT: auto; 说 明:首先在父级元素定义 TEXT-ALIGN: center;这个的意思就是在父级元素内的内容居中;对于 IE 这样设定就已经可以了。 但在 mozilla 中不能居中。解决办法就是在子元素定义时候设定时再加上“MARGIN-RIGHT: auto;MARGIN- LEFT:
6、 auto; ”需要说明的是,如果你想用这个方法使整个页面要居中,建议不要套在一个DIV 里,你可以依次拆出多个 div, 只要在每个拆出的 div 里定义 MARGIN-RIGHT: auto;MARGIN-LEFT: auto; 就可以了。 如何使图片在 DIV 中垂直居中用背景的方法。举例:bodyBACKGROUND: url(http:/www.w3cn.org/style/001/logo_w3cn_194x79.gif) #FFF no-repeat center; 关 键就是最后的 center,这个参数定义图片的位置。还可以写成“top left”(左上角)或者“bottom
7、 right“等,也可以直接写数 值“50 30“效果如下:如何使文本在 DIV 中垂直居中如果是文字,便不能用背景方法,可以用增高行距的办法 变通实现垂直居中,完整代码如下:bodyTEXT-ALIGN: center;#center MARGIN-RIGHT: auto;MARGIN-LEFT: auto; height:200px;background:#F00;width:400px;vertical-align:middle;line-height:200px;test content说 明:vertical-align:middle;表示行内垂直居中,我们将行距增加到和整个 DIV
8、一样高 line- height:200px;然后插入文字,就垂直居中了。-传统的做法:居中的布局 首先,由于是做比较,让我们来看一个例子,它是一种基于一个居中表格的页面设计。图表 A 中显示了一个例 子,以下是这个例子的编码: Header Navigation Let me not to the marriage of true minds Admit impediments; love is not love Which alters when it alteration finds Main Content - Loves not times fool. Footer text - A
9、dmit impediments. 这个标签包括了以下一些属性,将其宽度定义为页面宽度的 80%,并将该表格置于页面的中间。在表格的前面有一个空白段落,这就使得页面的顶端与表 格的顶端之间有一些垂直空间。在表格的后面也有一个空白段落,这就使得页面的底端与表格的底端之间也有一些空间。这个表格包括两列三行。顶端的单元被合并 了,用来放置页眉,底端的行也合并了,以安置页脚,而中间那些单元则被分为两列,一个供放置主要内容,另一个则是导航工具栏。 这 是一个简单的例子,诠释的是一种多年以来广为人们使用的技术。在现今的那些应用软件中,有代表性的主要种包含了嵌套表格,用以创建一种复杂得多的版面设 计,不过,
10、它的复杂性虽然被人为加大了,它所采用的基本技术却并没有改变。 将居中的设计转换成使用 CSS 要 想将这种传统的基于表格的版面设计转换成用 CSS,你只要用 divs 来代替那些表格和表格单元就行了。一个 div 取代表格本身,另一个取代那些单个的表格 单元,这些单个的表格单元定义了主要的版面设计元素,诸如标题,页脚,导航工栏,以及主要内容。每个 div 都有一个 id,且它们的 id 都是独一无二的,你 可以用一个 CSS 选择器来让它们创建各自不同的样式,每一种样式对应于 div 中的一种,这种对应关系依据 id 而建立。那个取代表格的div 被标上了 id= 外部,其它那些 div 则靠
11、他们各自的功能来鉴别。 这是已校订过的用 div 代替表格的 XHTML 的编码: Header Navigation Let me not to the marriage of true minds Admit impediments; love is not love Which alters when it alteration finds Main Content - Loves not times fool. Footer text - Admit impediments. 注意一下所有那些陈述的格式,原来它们被包括 在和标签中,现在已经被移走了。而那些位于表格前面和后面的空白段落也
12、都不见了。CSS格式会处理所有的 格式化以及空间的问题。 以下是 CSS 的编码,就是这些编码,将页面设计成一种居中的样式,这种设计与前面所说的基于表 格的设计很类似: body background-color: #999999; font-size:12px; font-family:Verdana, Arial, Helvetica, sans-serif; div#outer width: 80%; background-color:#FFFFFF; margin-top: 50px; margin-bottom: 50px; margin-left: auto; margin-rig
13、ht: auto; padding: 0px; border: thin solid #000000; div#header padding: 15px; margin: 0px; text-align: center; div#nav width: 25%; padding: 10px; margin-top: 1px; float: left; div#main margin-left: 30%; margin-top: 1px; padding: 10px; div#footer padding: 15px; margin: 0px; border-top: thin solid #00
14、0000; 解析 CSS 编码 与基于表格 的版面设计比起来,它的主体样式并没有什么变化。它只不过设置了一下背景颜色,默认正文字体以及尺寸大小。 div#outer 是其中的一种样式,它是这一技术的关键。这就是前面提到过的以 div 取代表格的样式,它创建了居中的盒子,而这个盒子成了包容该页面所有内容的容器。将宽 度设置为 80%的规则设定了该 div 的宽度,就跟表格标签的相应属性规定该表格的宽度一样。与此相类似,background-color: #FFFFFF 为 div 建立了一个白色的背景,就如同表格中 bgcolor=“#FFFFFF“属性为表格设置白色背景一样。margin-to
15、p: 50px and margin-bottom: 50px则用顶端和底端的空白来取代表格中用来造成垂直空间的空白段落。 这一技术的 关键在于,外部 div 的中心要安排合适。这里存在一个难题,可以说是我们面临的一个挑战,即 div 没有像 align=“center“这样一个属性,这与 表格不同,表格中有这样一种属性。你可以在 div 的母元素(在本案例,指标签)中使用 text-align: center 来将外部 div 置于中心位置。尽管除了正文以外,大多数浏览器还会为一些诸如 div 的块元素使用该队列,但是我们有证据可以证明它是对排列正 文这一属性的误用,而且它会使问题复杂化,就
16、如同你创建一些额外的样式来使那些已按正常标准对齐的文字重新回到左边一样。 用 CSS 来将 块元素置于中心位置的正确方法是这样设置:margin-left: auto,margin-right: auto。这就指示浏览器自动计算页面两边合适的空白宽度,从而将 div 置于中心。border: thin solid #000000 这一规则在外部div 的周围添加了一个边界,这是因为用 CSS 添加很容易,而如果用表格的话就很难了。CSS 编码中的其它部份则规定了 div 的页眉,页脚,nav,以及主要内容。 div#header 和 div#footer 则设定了那些 div 的页边空白以及填
17、料。此 外,div#header 包含了 text-align: center 这一规则,它可以将页眉文本置于中心位置,div#footer 则包含了 border-top: thin solid #000000 这一规则,它可以创建一个围绕该 div 的顶端边缘的边界,而在基于表格的版面设计中,与它相对应的则是位于页脚上方的一些水平线。 在 这个居中的盒子的中央,div#nav 和 div#main 建立了两个纵列。在div#nav 样式中,float: left 这一规则将 div 推到它的母元素(外部 div)的左边,而 width: 25%这一规则将该 div 的宽度设置为它的母元素的 25%。由于该 nav div 被移到了左端,其宽度也被限定了,这就为主要的 div 留下了活动空间,让它可以移到该 nav div 的右边,这样就取得了两个纵列的效果。div#main 样式包含了左边页面空白 30%的规则,以让主要文本排列在一个整齐的纵栏中,而不是分散开 来,甚至散到该 nav 纵栏外面。主要的 div左边的空白页面比 nav div 中左边空白页面的宽度稍稍大一点。