首页 web前端 html教程 使用CSS使内容垂直居中的N中方法。_html/css_WEB-ITnose

使用CSS使内容垂直居中的N中方法。_html/css_WEB-ITnose

Jun 24, 2016 am 11:54 AM

使用css+div使页面内容水平居中的方法大家并不陌生,那么如何使内容垂直居中呢?

OK,下面进入正题,不如我们使用做高中数学题时经常用的思想:分情况讨论。

 

1.当待垂直居中的DIV高宽为已知时:

 

  1.1绝对定位法:

 

  CSS:

    

    .middle-div{           width:300px;           height:200px;           position:absolute;           left:50%;           top:50%;           margin:-100px 0 0 -150px      }     .parent-div{          position:relitive;     }
登录后复制

   html:

    

    

    <div class="parent-div">        <div class="middle-div">            <p>我是个高度已知的DIV,我里面的内容可以垂直+水平居中吗?</p>        </div>    </div>
登录后复制

此方法即实现了水平居中,也实现了垂直居中。但是限制颇多,最显著的缺陷是使用了绝对定位,居中的DIV脱离了流布局,故而这种方法应用在弹出居中panel时使用较多,配合jquery:

    

    $(".mydiv").css({               position: "absolute",                left: ($(window).width() - $(".mydiv").outerWidth())/2,                top: ($(window).height() - $(".mydiv").outerHeight())/2     });  
登录后复制

  1.2外补DIV法:

  CSS:

    

    .floater{        float:left;        height:50%;        margin-bottom:-120px;    }    .middle-div{        clear:both;        height:240px;        position:relitive;        background:#eee;    }
登录后复制

   html:


    

    <div class="floater"></div>    <div class="middle-div"></div>
登录后复制

  1.3 margin:auto法

  CSS:

    

    #content {        position:absolute;        top:0;        bottom:0;        left:0;        right:0;        margin:auto;         height:240px;         width:70%;          background:#eee;    }        
登录后复制

   html:

 <div id="content"> </div>
登录后复制

该方法比较简单,遗憾的是在IE6-7下是无效的。


<strong>2.当待垂直居中的对象为单行文本或图片,高宽未知时(line-height法):</strong>
登录后复制
 大家公认的最简洁有效的方法:设置容器height与line-height相等,另外,加上overflow:hidden防止意外发生(此处指的容器内字体大于容器高度时的意外)。<strong>  CSS:  </strong>
登录后复制

    p.middle-p{            font:bold 12px/24px Helvertica,Arial,sans-serif;        overflow:hidden;    }     .demo{        height:24px;        color:#fff;        background:#a5a5a5;        font:bold 12px Helvertica,Arial,sans-serif;    }
登录后复制

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

<strong>  html:  </strong>
登录后复制

    <p class="demo middle-p">        文本垂直在P中居中。去掉class中的”middle-p“,再看看效果是什么?添上”middle-p“设置字体大小为30px,看看有什么效果,去掉overflow之后呢?    </p>    
登录后复制

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

 该方法的缺点是只支持单行,且当<p>中为纯文字时,兼容各浏览器;当<P>中只有图片时,IE7+可使图片垂直居中。然而在FF,chrome和IE6均无效;当<p>中有图片和文字时,在IE6中无效,在IE7+,FF,Chrome下有效。
登录后复制
     让我们试着解决只有图片时,在FF,Chrome等现代浏览器下无效的情况,在上述CSS中增加:
登录后复制
<strong>  CSS:</strong>
登录后复制

    p:after{        content:',';        font-size:1px;        visibility:hidden;                   }
登录后复制

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
<strong>  html:    </strong>
登录后复制

    <p class="demo middle-p">        <img  src="/static/imghw/default1.png"  data-src="http://img.sootuu.com/vector/2006-4/2006419181421600.jpg"  class="lazy" height="12px"    style="max-width:90%" alt="使用CSS使内容垂直居中的N中方法。_html/css_WEB-ITnose" >    </p>
登录后复制

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
     OK!只有图片时在FF,Chrome下也可以垂直居中了!
登录后复制
<strong>3.当待垂直居中的对象为多行文本或其它,高宽未知时:</strong><strong>  3.1当容器高度不固定时(padding法):</strong>
登录后复制
<strong>  为容器添加CSS</strong>:    
登录后复制

    .middle-div{          padding:20px 5px;          background:#eee;     }
登录后复制

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
<strong> html:    </strong>
登录后复制

    <div class="middle-div">        <p>你好,我在DIV中垂直居中。</p>        <p>你好,我在DIV中垂直居中。</p>        <p>你好,我在DIV中垂直居中。</p>        <p>你好,我在DIV中垂直居中。</p>    </div>    <div class="middle-div">        <img  src="/static/imghw/default1.png"  data-src="http://img.sootuu.com/vector/2006-4/2006419181421600.jpg"  class="lazy" alt="使用CSS使内容垂直居中的N中方法。_html/css_WEB-ITnose" >    </div>
登录后复制

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

 使容器padding上下相等,这是最简单的一种方法。支持各浏览器。 <strong>  3.2当容器高度固定时(display:table-cell法):</strong>
登录后复制
     你仍然可以使用padding,不过你需要清楚知道内容的高度和精确的数学计算...这显然是不可取的。
登录后复制
     那么当容器高度固定,待垂直居中的内容又是多行时,该如何去做呢?
登录后复制
     一种有效的做法是将容器display:table-cell,然后使用td,th,caption等标签专有属性:vertical-align:middle;
登录后复制
<strong> CSS:   </strong>
登录后复制

    .middle-div{          display:table-cell;          vertical-align:middle;          height:500px;          background:#eee;     }
登录后复制

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
<strong> html: </strong>
登录后复制
登录后复制
  
登录后复制
登录后复制
登录后复制

    <div class="middle-div">          <p>我想垂直居中,在一个固定高度的DIV中,可以吗?</p>          <p>我想垂直居中,在一个固定高度的DIV中,可以吗?</p>          <p>我想垂直居中,在一个固定高度的DIV中,可以吗?</p>     </div>
登录后复制

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
     Great!在IE8+,FF,Chrome下确实有效。遗憾的是IE6-7仍然无法垂直居中,因为IE6-7并不认识:table-cell属性,将其自动忽略了。
登录后复制
     也许你会想使用table布局,这样不就可以兼容IE6-7了吗。不要试图这样做,因为使用table进行页面布局早已不被赞成。html标签是负责语义的,而不是样式。不要灰心,想让内容在IE6-7下垂直居中不妨试试这种方法:
登录后复制
<strong> CSS: </strong>
登录后复制
  
登录后复制
登录后复制
登录后复制

    .parent{          height:500px;          position:relative;          background:#eee;     }     .sub-parent{          position:absolute;          top:50%;          }     .middle-div{          position:relative;          top:-50%;     }
登录后复制

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
<strong> html: </strong>
登录后复制
登录后复制
  
登录后复制
登录后复制
登录后复制

    <div class="parent">          <div class="sub-parent">               <div class="middle-div">                    <p>我能垂直居中吗?</p>                    <p>我能垂直居中吗?</p>                    <p>我能垂直居中吗?</p>               </div>          </div>     </div>
登录后复制

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
     让人心塞的是这种方法只在IE6-7下可行,在IE8+以及FF等现代浏览器下效果反而差强人意。为什么呢?是middle-div的top:-50%出了问题。由于父容器的高度根据子容器高度计算出来的,导致-50%无效。可能的解决办法:middle-div的top:-(使用JS得出sub-parent的高度/2)px.
登录后复制
     如果你了解一些CSS hack的技巧,结合上面的display:table-cell方法,那么一个完美的垂直居中方案将会诞生:
登录后复制
<strong> html与上一致; </strong>
登录后复制
<strong> CSS:    </strong>
登录后复制

    .parent{          height:500px;          display:table-cell;          vertical-align:middle;          *position:relative;          background:#eee;     }     .sub-parent{          *position:absolute;          *top:50%;          }     .middle-div{          *position:relative;          *top:-50%;     }
登录后复制

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
     在浏览器中看一下效果吧!这个方法看起来还不错,如果非要找一个缺点,那就是DIV嵌套多了一点.
登录后复制
     当允许使用JS时,完全可以动态获得内容的高度,然后结合display:table-cell和margin-top:-(height/2)px来解决。从而避免了多层嵌套.具体方法见1.1<strong>  3.3当容器高度固定时(display:inline-block法)  CSS:  </strong>
登录后复制

    .parent{          height:700px;          border:1px solid #a5a5a5;            text-align:center;        }     .middle-div{          display:inline-block;          width:300px;          vertical-align:middle;          border:1px solid #f00;     }     .parent:before{          content:'';          display:inline-block;          height:100%;          vertical-align:middle;          margin-right:-0.25em;     }
登录后复制

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

  html:

    <div class="parent">          <div class="middle-div"><p>我是否可以垂直居中?</p></div>     </div>
登录后复制

  由于使用了display:inline-block,故不兼容IE6-7.

登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
<strong>4.小结</strong>  使用CSS布局尤其需要注意浏览器的兼容,一个垂直居中让我初窥各浏览器兼容混战的冰山一角。  想要掌握垂直居中,至少要了解display,position,margin,veritcla-align,line-height,padding以及float,CSS hack等知识。CSS的知识王国不就是一个个小问题堆积出来的吗?  上述只是部分方法,可能存在错误和纰漏,欢迎指正~
登录后复制

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

&gt; gt;的目的是什么 元素? &gt; gt;的目的是什么 元素? Mar 21, 2025 pm 12:34 PM

本文讨论了HTML&lt; Progress&gt;元素,其目的,样式和与&lt; meter&gt;元素。主要重点是使用&lt; progress&gt;为了完成任务和LT;仪表&gt;对于stati

&lt; datalist&gt;的目的是什么。 元素? &lt; datalist&gt;的目的是什么。 元素? Mar 21, 2025 pm 12:33 PM

本文讨论了html&lt; datalist&gt;元素,通过提供自动完整建议,改善用户体验并减少错误来增强表格。Character计数:159

HTML容易为初学者学习吗? HTML容易为初学者学习吗? Apr 07, 2025 am 12:11 AM

HTML适合初学者学习,因为它简单易学且能快速看到成果。1)HTML的学习曲线平缓,易于上手。2)只需掌握基本标签即可开始创建网页。3)灵活性高,可与CSS和JavaScript结合使用。4)丰富的学习资源和现代工具支持学习过程。

&lt; meter&gt;的目的是什么。 元素? &lt; meter&gt;的目的是什么。 元素? Mar 21, 2025 pm 12:35 PM

本文讨论了HTML&lt; meter&gt;元素,用于在一个范围内显示标量或分数值及其在Web开发中的常见应用。它区分了&lt; meter&gt;从&lt; progress&gt;和前

&lt; iframe&gt;的目的是什么。 标签?使用时的安全考虑是什么? &lt; iframe&gt;的目的是什么。 标签?使用时的安全考虑是什么? Mar 20, 2025 pm 06:05 PM

本文讨论了&lt; iframe&gt;将外部内容嵌入网页,其常见用途,安全风险以及诸如对象标签和API等替代方案的目的。

视口元标签是什么?为什么对响应式设计很重要? 视口元标签是什么?为什么对响应式设计很重要? Mar 20, 2025 pm 05:56 PM

本文讨论了视口元标签,这对于移动设备上的响应式Web设计至关重要。它解释了如何正确使用确保最佳的内容缩放和用户交互,而滥用可能会导致设计和可访问性问题。

HTML,CSS和JavaScript的角色:核心职责 HTML,CSS和JavaScript的角色:核心职责 Apr 08, 2025 pm 07:05 PM

HTML定义网页结构,CSS负责样式和布局,JavaScript赋予动态交互。三者在网页开发中各司其职,共同构建丰富多彩的网站。

HTML中起始标签的示例是什么? HTML中起始标签的示例是什么? Apr 06, 2025 am 12:04 AM

AnexampleOfAstartingTaginHtmlis,beginSaparagraph.startingTagSareEssentialInhtmlastheyInitiateEllements,defiteTheeTheErtypes,andarecrucialforsstructuringwebpages wepages webpages andConstructingthedom。

See all articles