Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 476|回复: 0

css实现固定高度及未知高度文字垂直居中的完美解决方案

[复制链接]
  • TA的每日心情
    奋斗
    4 天前
  • 签到天数: 802 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726006
    发表于 2021-5-26 17:26:59 | 显示全部楼层 |阅读模式

    css实现固定高度及未知高度文字垂直居中的完美解决方案

    2013-12-03 00:00 by 龙恩0707, 18 阅读, 0 评论, 收藏编辑

        在工作当中我们经常碰到类似于"固定高度文字垂直居中及未知高度垂直居中问题",或者 "图片垂直居中问题",而我们最容易会想到使用表格来垂直居中,或者如果是单行文字的话使用height(高度)和line-height(行高)来解决,但是假如页面有多行文字的话 固定高度该怎么解决? 或者未知高度我们该用css怎么解决? 且兼容各个游览器!

    一:单行文字垂直居中:

         如果一个容器中只有一行文字的话,让他垂直居中比较简单 直接定义height(高度)和 line-height(行高)相等即可。

      如:<div style="height:25px;line-height:25px;overflow:hidden">aa</div>

    二:多行文本固定高度垂直居中:

        1. 除IE7及IE7以下游览器 多行文本固定高度垂直居中的解决方案。

      我们都知道 我们可以用表格的方式 实现文本垂直居中,同理 我们可以用css来模拟表格的方式垂直居中 vertical-align 属性只会对拥有valign特性的(X)HTML标签起作用,比如td等,但是对类似于span等这样的标签并不起作用,如果我们不考虑IE7及以下的话 我们可以用display:table 和 display:table-cell来模拟表格垂直居中。前者必须设置在父级元素上,后者必须设置在子元素上。比如 如下HTML代码:

    1 <div class="wrapper">
    2     <div class="content">content age</div>
    3 </div>

    相对应的css代码如下:

    复制代码
    .wrapper{  
        height:400px;  
        display:table;  
    }  
    .content{  
        vertical-align:middle;  
        display:table-cell;  
        border:1pxsolid#FF0099;  
        background-color:#FFCCFF;  
        width:760px;  
    }
    复制代码

    就可以实现除IE7及IE7以下的游览器支持文本垂直居中的问题!

         2. 兼容IE6+ 火狐 google游览器的多行文本垂直居中的解决方案!

         其实在标准游览器中 解决的方案如上,现在的问题我们该怎么解决IE7及以下的版本的问题了,我们可以考虑用定位的方式来解决,在IE6中对父元素进行定位后,如果再对子元素进行百分比计算时,计算的基础似乎是有继承性的(如果定位的数值是绝对数值没有这个问题,但是使用百分比计算的基础将不再是该元素的高度,而从父元素继承来的定位高度)。

       比如HTML代码如下:

    1 <div class="wrap">
    2     <div class="subwrap">
    3         <div class="content">aaaaa</div>
    4     </div>
    5 </div>

    我们可以对父级元素绝对定位 top:50%;然后在对子元素定位top:-50%,这样可以正好重叠了。css代码如下:

    复制代码
    .wrap{  
        border:1pxsolid#FF0099;  
        background-color:#FFCCFF;  
        width:760px;  
        height:400px;  
        position:relative;  
    }  
    .subwrap{  
        position:absolute;  
        border:1px solid #000;  
        top:50%;  
    }  
    .content{  
        border:1pxsolid#000;  
        position:relative;  
        top:-50%;  
    } 
    复制代码

    所以针对上面的解决方案,我们可以稍微优化下 在标准游览器下 我们使用类似于 表格的方式来解决  但是对于像IE7及以下的版本 我们可以使用绝对定位的方式来解决。所以优化下 css代码如下:

    复制代码
    .wrap{  
        display:table;  
        border:1pxsolid#FF0099;  
        background-color:#FFCCFF;  
        width:760px;  
        height:400px;  
        *position:relative;  
        overflow:hidden;  
    }  
    .subwrap{  
        vertical-align:middle;  
        display:table-cell;  
        *position:absolute;  
        *top:50%;  
    }  
    .content{  
        *position:relative;  
        *top:-50%;  
    }
    复制代码

    三:多行文本 未知高度垂直居中的解决方案:

       其实思路还是上面的一样 标准游览器版本下 采用类似于表格的方式来 垂直居中 解决,对于IE7 6下采用定位的方式来解决。如下代码

     HTML:

    复制代码
    <div class="wrapper">
        <div class="subwrap">
            <div class="content">
                关于 CSS 的未知高度水平垂直居中问题<br />
            </div>
        </div>
    </div>
    复制代码

    css:

    复制代码
    body {padding:0;margin:0;}
    .content{border:1px solid red;width:500px;margin:0 auto;font-size:12px;line-height:1.8;}
    
    /*标准游览器版本*/
    html,body{height:100%;}
    .wrapper{text-align:center;width:100%;height:100%;display:table;}
    .subwrap{display:table-cell;vertical-align:middle;}
    
    /*IE6*/
    *html .wrapper{position:absolute;top:50%;width:100%;text-align:center;display:block;height:auto}
    *html .subwrap{position:relative;top:-50%;text-align:center;}
    
    /*IE7 可以合并 但是为了更好说明 没有合并*/
    *+html .wrapper{position:absolute;top:50%;width:100%;text-align:center;display:block;height:auto}
    *+html .subwrap{position:relative;top:-50%;text-align:center;}
    复制代码

     

     
     
    分类:  CSS
    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-11-15 12:32 , Processed in 1.110300 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表