夜鹰教程网-程序员的加油站
 当前位置:文章中心 >> Css3.0_css2.0_html5
不知道容器大小如何实现内容水平垂直居中
夜鹰教程网 来源:www.yyjcw.com 日期:2017-11-11 13:56:13
不知道容器大小如何实现内容水平垂直居中

大致有4种方法实现:
        一、table布局(display:table)
        二、绝对布局(position:absolute)+translate
        三、转化为行内标签display:inline-block,借助另外一个标签高度来实现
        四、通过js的获取标签的宽高来控制位置,得在元素加载完成后调用js
肯定还有其他方法可以实现,我目前就发现这几种,比较推荐第二种和第四种。

示例代码:

<!DOCTYPE html>

<html>
    <head>
        <meta charset="utf-8">
        <title>未知宽度高度的水平垂直居中(4种)</title>
        <script src="http://lib.sinaapp.com/js/jquery/1.7.2/jquery.min.js" type="text/javascript" charset="utf-8"></script>
        <style type="text/css">
            /*未知宽度高度的水平垂直居中(一):
             * 如果放在body中,则需要给html,body设置一个“height:100%”的属性。
             * display:table;
             * display:table-cell;
             * vertical-align: middle;
             * */
            h1{font-weight: normal;}
            body{
                margin: 0;
                padding: 0;
            }
            .section{
                width: 1200px;
                height: 500px;
                margin: 0 auto;
                position: relative;
                text-align: center;
            }
            .section-1{
                background: #666;
            }
            .table{
                width: 100%;
                height: 100%;
                display: table;/*定义成表结构*/
                position: relative;
                background: #666;
            }
            .tablecell{
                display: table-cell;
                text-align: center;
                vertical-align: middle;
            }
            .content{
                font-size: 30px;
                line-height: 1.5;
            }
            /*未知宽度高度的水平垂直居中(二):
             * 采用的position: absolute,然后用translate移动位置。translate的比例针对的是元素本身的宽高
             * */
            .section-2{
                background: #333;
                color: #fff;
            }
            .section-2 .middle{
                position: absolute;
                left: 50%;
                top: 50%;
                transform: translate(-50%,-50%);
                -ms-transform: translate(-50%,-50%);
                -moz-transform: translate(-50%,-50%);
                -webkit-transform: translate(-50%,-50%);
            }
            /*未知宽度高度的水平垂直居中(三):
             * 采用的display:inline-block,然后借助另一个元素的高度来实现居中
             * */
            .section-3 {
                /*定义高度,让线盒型div#extra有一个参照物,可以是固定值,也可以是百分比*/
                background: #999;
            }
            #vertically_center,#extra {
                display: inline-block;/*把元素转为行内块显示*/
                vertical-align: middle;/*垂直居中*/
                text-align: center;
            }
            #extra {
                height: 100%; /*设置线盒型为父元素的100%高度*/
            }
            /*未知宽度高度的水平垂直居中(四):
             * 通过js获取计算宽高
             * */
            .section-4{
                background: #000;
                color: #fff;
            }
        </style>
    </head>
    <body>
        <!-- method-1 -->
        <div class="section section-1">
            <div class="table">
                <div class="tablecell">
                    <h1>未知宽度高度的水平垂直居中(一)</h1>
                    <p class="content">
                        目前太阳模式仅用于体验<br />
                        更多功能敬请关注APP更新
                    </p>
                </div>
            </div>
        </div>
        <!-- method-2 -->
        <div class="section section-2">
            <div class="middle">
                <h1>未知宽度高度的水平垂直居中(二)</h1>
                <p>
                    目前太阳模式仅用于体验<br />
                    更多功能敬请关注APP更新
                </p>
            </div>
            <div id="extra"></div>
        </div>
        <!-- method-3 -->
        <div class="section section-3">
            <div class="wrap">
                <p class="content">
                    未知宽度高度的水平垂直居中(四)<br />
                    目前太阳模式仅用于体验<br />
                    更多功能敬请关注APP更新
                </p>
            </div>
        </div>
        <!-- method-4 -->
        <div class="section section-4">
            <div class="wrap">
                <p class="content">
                    未知宽度高度的水平垂直居中(四)<br />
                    目前太阳模式仅用于体验<br />
                    更多功能敬请关注APP更新
                </p>
            </div>
        </div>
        <script type="text/javascript">
            (function($){
                $.fn.vhAlign =  function(){
                    return this.each(function(i){
                      //获取元素的内容高度
                        var h = Math.ceil($(this).height());
                        //outerHeight=padding+border+height
                        var oh = Math.ceil($(this).outerHeight());
                        //取得margin-top值
                        var mt = Math.ceil(oh / 2);
                        //取得元素宽度
                        var w = Math.ceil($(this).width());
                        //outerWidth=padding+border+width
                        var ow = Math.ceil($(this).outerWidth());
                        //取得margin-left
                        var ml = Math.ceil(ow / 2);
                        //实现元素居中效果
                        $(this).css({
                            "margin-top": "-" + mt + "px",
                            "top": "50%",
                            "margin-left": "-" + ml + "px",
                            "left": "50%",
                            "width":w,
                            "height":h,
                            "position": "absolute"
                        });
                    });
                };
            })(jQuery);
        </script>
        <script type="text/javascript">
            $(document).ready(function(){
                $(".wrap").vhAlign();
            });
        </script>
    </body>
</html>
复制链接 网友评论 收藏本文 关闭此页
上一条: 使用JQuery 的 Deferred实现图片预…  下一条: 什么样的网站适合做自适应
夜鹰教程网成立于2008年,目前已经运营了将近 13 年,发布了大量关于 html5/css3/C#/asp.net/java/python/nodejs/mongodb/sql server/android/javascript/mysql/mvc/easyui/vue/echarts原创教程。 我们一直都在坚持的是:认证负责、一丝不苟、以工匠的精神来打磨每一套教程,让读者感受到作者的用心。我们默默投入的时间,确保每一套教程都是一件作品,而不是呆板的文字和视频! 目前我们推出在线辅导班试运营,模式为一对一辅导,教学工具为QQ。我们的辅导学科包括 java 、android原生开发、webapp开发、商城开发、C#和asp.net开发,winform和物联网开发、web前端开发,但不仅限于此。 普通班针对的是国内学员,例如想打好基础的大学生、想转行的有志青年、想深入学习的程序员、想开发软件的初学者或者业余爱好者等。 就业办针对即将毕业上岗的大四学生,或者打算转行的初级开发工程师。 留学生班针对的是在欧美、加拿大、澳洲、日本、韩国、新加坡等地留学的中国学子,目的是让大家熟练地掌握编程技能,按时完成老师布置的作业,并能顺利地通过考试。 详细咨询QQ:1416759661   夜鹰教程网  基于角色的权限管理系统(c-s/b-s)。
  夜鹰教程网  基于nodejs的聊天室开发视频教程
  夜鹰教程网  Git分布式版本管理视频教程
  夜鹰教程网  MVC+EasyUI视频教程
  夜鹰教程网  在线考试系统视频教程
  夜鹰教程网  MongoDB视频教程。
  夜鹰教程网 Canvas视频教程
  夜鹰教程网 报表开发视频教程
  热点推荐
什么是css框架
meta标签实现页面的动感效果
CSS半透明滤镜在FIREFOX和IE下面的…
div+css鼠标悬停在div上,div背景色…
纯css下拉菜单特效
div+css的浏览器兼容问题
CSS定义表格线为单一线
CSS滤镜效果收集(全)
列表显示文字和图片垂直居中对齐
在固定位置显示背景图片
网站变换图片的显示方法
在select外面套一个div或span, se…
常用的CSS命名规则
闪字闪字闪字闪字闪字闪字闪字闪字…
css让图片自动适应表格大小
  最近更新
HTTP协议实现文件断点续传
H5实现断点上传
行内元素和块级元素汇总
H5视频直播技术介绍
border-image详解
你必须知道的HTML5的新特性
html5 js控制音乐播放
HTML+CSS代码规范
css3学习笔记 transition与animat…
css3学习笔记Transform
css3学习笔记2D或3D转换
css3学习笔记文本特效
css3学习笔记颜色和透明度
css3学习笔记二
css3学习笔记一

关于我们 | 网站建设 | 技术辅导 | 常见问题 | 联系我们 | 友情链接

夜鹰教程网 版权所有 www.yyjcw.com All rights reserved 备案号:蜀ICP备08011740号3