zoukankan      html  css  js  c++  java
  • Div+CSS布局居中

    用CSS让元素居中显示并不是件很简单的事情—同样的合法CSS居中设置在不同浏览器中的表现行为却各有千秋。让我们先来看一下CSS中常见的几种让元素水平居中显示的方法。

    一、使用自动外边距实现居中

      CSS中首选的让元素水平居中的方法就是使用margin属性—将元素的margin- left和margin-right属性设置为auto即可。在实际使用中,我们可以为这些需要居中的元素创建一个起容器作用的div。需要特别注意的一点就是,必须为该容器指定宽度:

    Div+CSS布局居中

    div#container {

    margin-left: auto;

    margin-right: auto;

    168px;

    }

      在大多数主流浏览器中,这种方法都非常有效,即使是Windows平台上的IE6,在其标准兼容模式(compliance mode)下也能够正常显示。但不幸的是,在更低版本的IE中,这种设置却并不能实现居中效果。所以若想在实际项目中使用这种方法,那么就要确保用户的IE浏览器版本不低于6.0。

      尽管在支持上不尽如人意,但大多数设计师都建议尽可能地使用这种方法。该方法也被认为是在各种用CSS实现元素水平居中方法中最正确、最合理的一种。

    二、使用text-align实现居中

      另一种实现元素居中的方法是使用text-align属性,将该属性值设置为center并应用到body元素上即可。这种做法是彻头彻尾的hack,但它却能兼容大多数浏览器,所以在某些情况下也自然必不可少。

      之所以说它是hack,是因为这种方法并没有将文本属性应用到文本上,而是应用到了作为容器的元素上。这也给我们带来了额外的工作。在创建好布局必须的div之后,我们要按照如下代码为body应用text-align属性:

    Div+CSS布局居中

    body{

    text-align:center;

    }

      之后会出现什么问题吗?body的所有子孙元素都会被居中显示。

      因此,我们就需要用再写一条规则,让其中的文本回到默认的居左对齐:

    Div+CSS布局居中 

    p {

    text-align:left;

    }

      可以想象这条附加的规则将带来一些不便。另外,真正完全遵循标准的浏览器并不会改变容器的位置,而只会让其中的文字居中显示。

    三、组合使用自动外边距和文本对齐

      因为文本对齐居中方式有着良好的向下兼容性,且自动外边距方式也被大多数当代浏览器支持,所以很多设计师将二者组合起来使用,以期让居中效果得到最大限度的跨浏览器支持:

    Div+CSS布局居中 

    body {

    text-align: center;

    }

    Div+CSS布局居中 

    #container {

    margin-left: auto;

    margin-right: auto;

    border: 1px solid red;

    168px;

    text-align: left

    }

      可是这始终是个hack,无论如何也算不上完美。我们还是需要为居中容器中的文本编写附加的规则,但至少在各个浏览器中看起来都不错。

    四、负外边距解决方案

      负外边距解决方案远不是仅仅为元素添加负外边距这么简单。这种方法需要同时使用绝对定位和负外边距两种技巧。

      下面是该方案的具体实现方法。首先,创建一个包含居中元素的容器,然后将其绝对定位于相对页面左边边缘50%的位置。这样,该容器的左外边距将从页面50%宽度的位置开始算起。

      然后,将容器的左外边距值设置为负的容器宽度的一半。这样即可将该容器固定在页面水平方向的中点。

    Div+CSS布局居中 

    #container {

    background: #ffc url(52css.jpg) repeat-y center;

    position: absolute;

    left: 50%;

    760px;

    margin-left: -380px;

    }

      看,没有任何hack!虽然这并不是首选的解决方案,但也是个不错的方法,且适用性极广—甚至在Netscape Navigator 4.x中都没有任何问题,很令人吃惊,不是吗?所以若想得到最广泛的浏览器支持,那么这种方法将会是最好的选择。

    垂直居中方法大集合

    时间:2009-02-12 20:56来源:网络 作者:秩名 点击: 15次

      1. 单行文字在固定高度容器中垂直居中

    这个最简单,只要让行间距 line-height 与容器高度 height 相等即可;

       1. #box { height: 120px; line-height: 120px; overflow: hidden }

    2. 多行文字在未知高度容器中垂直居中

    这个也很简单,将 padding-top 与 padding-bottom 设置成相同的值即可;

       1. #box2 { padding: 10px 0 }

    3. 多行文字在固定高度容器中垂直居中(非 IE 浏览器)

       1. #box3_wrapper {

       2.    display: table;

       3.    height: 311px;

       4.    background: #eee

       5. }

       6. #box3 {

       7.    display: table-cell;

       8.    vertical-align: middle

       9. }

    Html代码 复制代码

       1. <div id="box3_wrapper">

       2.    <div id="box3">

       3.         作者:shimano<br />

       4.         如何既给用户提供最大限度的编辑权限<br />

       5.         又能保证网页整体的规范和美观?<br />

       6.         真 TMD 难啊!

       7.    <div>

       8. </div>

    注意:这其中有个关于字号的问题,在 XP 和 Vista 及 Mac 下即使设定了像素为单位的字号,文字大小也依旧不同,这个在我之前一个篇日志里也提到过,在 XP 下,12px 宋体是 11x11(px)的,在 Vista 下有些文字高 11px 有些高 12px,这也是为什么 Vista 下的宋体看起来比较奇怪,Mac 下默认就是平滑边缘的黑体,再有就是 safari 下平滑边缘的宋体,所以更不容易辨别。

    如果细究,在不设定高度和行间距的容器中,12px 宋体文字上下边沿依旧会有 1px 到 2px 的间距,XP 的 IE6 下,字下沿有 3px ,字上沿为 0;Firefox 下,字上沿为 1px,下沿为2px;Vista 下,文字上下各 1px 间距(考虑同等高度文字);这可以理解为默认 line-height,在 这篇日志 中我也是遇到了同样的问题。

    关于 IE6 下 line-height 的问题我在 这篇日志 中有提。

    4. 多行文字在固定高度容器中垂直居中(IE 浏览器)

    因为 IE 不支持将 div 显示为 table 及其同胞,所以我们要另想办法:

    Css代码

       1. #box3_wrapper {

       2.    position: relative;

       3. }

       4. #box3_inner {

       5.    position: absolute;

       6.    top: 50%

       7. }

       8. #box3 {

       9.    position: relative;

      10.    top: -50%;

      11.    background: #eee

      12. }

    Html代码

       1. <div id="box3_wrapper">

       2.    <div id="box3_inner">

       3.       <div id="box3">

       4.          这种方法<br />

       5.          在下面的未知高度 div 垂直居中<br />

       6.          也用到了

       7.       </div>

       8.    </div>

       9. </div>

    下面有个权衡 IE 与 非 IE 浏览器浏览效果的实现方法,请继续看

    5. 未知高度 div 的垂直居中

    Css代码 复制代码

       1. #box4_wrapper {

       2.    height: 100%;

       3.    100%;

       4.    overflow: hidden;

       5.    position: relative

       6. }

       7. #box4_wrapper[id] {

       8.    display: table;

       9.    position: static

      10. }

      11. #box4_outer {

      12.    position: absolute;

      13.    top: 50%

      14. }

      15. #box4_outer[id] {

      16.    display: table-cell;

      17.    vertical-align: middle;

      18.    position: static

      19. }

      20. #box4_inner {

      21.    position: relative;

    22.    top: -50%;
      23.    margin: 0 auto;
      24.    background: #eee
      25. }

    Html代码

       1. <div id="box4_wrapper">
       2.    <div id="box4_outer">
       3.       <div id="box4_inner">
       4.          这是一种无 hack 的方式<br />
       5.          虽然环保,但是臃肿:(
       6.       </div>
       7.    </div>
       8. </div>

    CSS2 选择符 #value[id] 相当于 #value,但是 IE 不支持这种类型的选择符,使用这种方式区分浏览器避免 hack:)

    6. 未知尺寸图片(小与容器高度)在固定高度容器中垂直居中

       1. #box5 {
       2.    display: table-cell;
       3.    *display: block;
       4.    *font-size: 175px;
       5.    *font-family: Arial;
       6.    vertical-align: middle;
       7.    height: 200px;
       8.    200px
       9. }
      10. #box5 img {
      11.    vertical-align: middle
      12. }

    Html代码 复制代码

       1. <div id="box5">
       2.    <img src="img/ctba.png" alt="扯谈社" />
       3. </div>

    <div id="box5">
       <img src="img/ctba.png" alt="扯谈社" />
    </div>

    淘宝 UED 07 前端开发原题。解释下针对 IE 的 hack:在 IE 下,将字号设置为容器高度的 0.873(本例中即 200*0.873 = 175)图片便会垂直居中;字体设置为 Arial 主要防止非 utf-8 引起的 hack 失效问题,如 gbk 编码(摘自译飞的博客)

    当然如果只是图片,在针对非 IE 浏览器时利用单行文字的垂直居中方法也可以。

  • 相关阅读:
    hibernate 总结
    事物随笔
    添加收藏夹的作法
    jquery uploadify多文件上传
    过滤器与拦截器的区别
    网站首页添加缓存--------ehcache的简单使用
    DWR 在项目中的应用
    分页标签:pager-taglib的使用
    关闭iptables(Centos)
    Centos移除图形界面
  • 原文地址:https://www.cnblogs.com/tangge/p/1935271.html
Copyright © 2011-2022 走看看