0

0

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

php中文网

php中文网

发布时间:2016-06-24 11:54:51

|

1292人浏览过

|

来源于php中文网

原创

使用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;     }

 

Molica AI
Molica AI

一款聚合了多种AI工具的一站式创作平台

下载

立即学习前端免费学习笔记(深入)”;

   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="http://img.sootuu.com/vector/2006-4/2006419181421600.jpg" 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="http://img.sootuu.com/vector/2006-4/2006419181421600.jpg" 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的知识王国不就是一个个小问题堆积出来的吗?  上述只是部分方法,可能存在错误和纰漏,欢迎指正~

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

616

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

194

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

91

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

20

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

54

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

29

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

15

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

598

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

56

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号