HTML中的水平垂直居中问题

---------------------------

更新,其实吧http://blog.csdn.net/freshlover/article/details/11579669 这里已经总结了很多实用的方法。我用的这种方法文中也提到了,但别人用了更好的一种方法,使用了after选择器,也就可以避免创建span这种没什么意义的标签了。

---------------------------


HTML中的定位一直是很令人头疼的问题,最近又看了遍html和css方面的知识,准备再次捡起这方面的知识。  

昨晚睡觉前突然想做一个垂直居中的效果,这样以后测试小模块的时候,放在中间看着不更舒服嘛,当时马上想到的就是用text-align和vertical-align实现。   

本以为很简单,可今天早上做的时候,各种令人不解的问题出现,最终我还是放弃了自己解决而转向了百度,[找到了这篇文章。](http://http://www.xuehuwang.com/div-vertical-align/)   

文章中跟我的思路是一样的,不一样的地方,同时也是我搞错的地方,在于我没有设定行高,而他设定行高的方法则是通过添加一个没用的span,并设置其height为100%。(当然span还必须是inline-block才能设置高度。)

这是我最终写好的,在div.center中添加任何内容,都可以恰当的居中了,而不像绝对定位实现的居中,还得根据内容长宽设置偏移。

<!DOCTYPE HTML >
<html>
 <head>
  <title> New Document </title>
  <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
  <meta name="Generator" content="EditPlus">
  <meta name="Author" content="Vincent Jiao">
  <style>
    html,body
    {
        padding:0;
        margin:0;
        font-size:12px;
        width:100%;
        height:100%;
    }
    div.container
    {
        position:absolute;
        background-color:Coral;
        text-align:center;
        height:100%;
        width:100%;
    }
    div.center
    {
        display:inline-block;
        background-color:Tan;
        vertical-align:middle;
    }
    span
    {
        height:100%;
        display:inline-block;
        vertical-align:middle;
    }
  </style>
 </head>

 <body>
    <div class="container">
        <span></span>
        <div class="center">anything can dispaly here</div>
    </div>
 </body>
</html>

在写这段代码的时候我又想起了曾忘记的一些知识。

比如text-align是作用于子元素,并会被所有子元素继承。而vertical-align只是作用于当前元素(还必须是行内元素。inline or inline-block)。

还有就是关于块元素和行内元素的问题,块元素默认占一行,其中可以有块元素和内联元素(混合两种我觉得不太好)。而块元素,比如<p>,内部有<a> <span> <b>这些内联元素,它们是流动的,当到达边缘时会自动换行。而行的高度,又取决于其内最高的元素。eg. 如果<p>中只有文本,那么行高就取决于当前的font-size,另外,line-height也会影响行高,它可以更改行间距,如果设置它的值为100%,那么行高就是font-size,段落中的文本看起来就是一行贴着一行。

在这个例子,为了实现垂直居中,将div的display属性改为了inline-block,这样text-align=center和vertical-align=middle就可以作用在它上面。但这并不够,还必须将行高设置为整个屏幕的高度才行。用line-hight吗?不行,因为它是设置在父元素作用于子元素上,而且百分比值是相对与行内元素的高度。那该怎样将行扩充呢?这个例子中添加了一个多余的<span>将它的height设置为100%,这样就将行撑大了,和它同行的元素设置vertical-align=middle,垂线上的中点就会跟span在同一高度了。

设置span时还要注意一点,就是它的display属性必须是inline-block,否则是无法设置高度和宽度的。另:使用百分比设置高度时,参考的heigth与width是最临近的那个拥有position:[relative|absolute|fixed]的块元素。

在这里div.container的postion属性设为absolute,所以span的height就是div.container的height的100%。其实div.container并不需要设置postion属性,因为它的大小实际是和body一样的,span在设置大小时以body作参考就够了。

你可能感兴趣的:(HTML中的水平垂直居中问题)