博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
完美实现文字图片水平垂直居中
阅读量:6611 次
发布时间:2019-06-24

本文共 3139 字,大约阅读时间需要 10 分钟。

垂直居中是一个历史悠久的大问题,要做到兼容所有浏览器少不了要花点时间,网上也流传了很多解决方案,但没发现比我现在用的方案更完美,至少在我的项目是如此。

项目中要用到垂直居中而碰到兼容性问题的,一般都是以下几种情况:

  1. 换行文字垂直居中

  2. 图片垂直居中

以上都是在固定宽高的容器里垂直居中,不然的话marginpadding便可实现。

解决垂直居中无非就从几个方面入手

  1. 利用行高等于容器高度

  2. 模拟表格单元格特性

  3. 定位布局

  4. css3display:box

换行文字垂直居中

结合表格单元格特性和定位来实现

/* 换行文字垂直居中 */.vc-font1 {    border: 1px solid black;    width: 200px;    height: 200px;    display: table-cell;    vertical-align: middle;    text-align: center;}/* 兼容IE6、7 */*+html .vc-font1 {    height: auto;    min-height: 200px;}.vc-font1 .vc-fix {    *position: relative;    *top: 50%;    *left: 50%;    *width: 100%;}.vc-font1 .vc-inner {    *position: relative;    *top: -50%;    *left: -50%;}
换行文字垂直居中,兼容所有浏览器

当文字高度超出容器时,识别table-cell的浏览器容器会自适应,此时容器的height属性相当于min-height,为了达到所有浏览器效果一致,容器的height还要Hack一下。

缺点:增加了多余的标签

利用行内块vertical-align:middle来实现

.vc-font2 {    border: 1px solid black;    width: 200px;    height: 200px;    text-align: center;    overflow: hidden;}.vc-font2 .vc-inner {    display: inline-block;    vertical-align: middle;}.vc-font2 .vc-fix {    display: inline-block;    width: 0;    height: 100%;    line-height: 100%;    vertical-align: middle;    visibility: hidden;}
换行文字垂直居中,兼容所有浏览器

vc-innervc-fix必须是行内元素,vc-inner加上vc-fix的宽度不能超过容器宽度,行内块换行时会多出空隙(容器font-size: 0可去除,但这里不适用),所以这两个标签不能换行。

缺点:增加了多余的标签(硬伤),标签不能换行且必须是行内元素。

固定宽高图片垂直居中

前面提到的换行文字垂直居中的方法对于固定宽高图片垂直居中也是适用的

利用定位(原理跟方法1类似)

.vc-img1 {    border: 1px solid black;    width: 200px;    height: 200px;    position: relative;}.vc-img1 img {    width: 100px;    height: 100px;    position: absolute;    top: 50%;    left: 50%;    margin: -50px 0 0 -50px;}

既然已经确定了图片的宽高,毫无疑问使用这种方法就没有兼容性的问题出现了

缺点:图片宽高必须固定,以便计算图片margin的负值。

行高等于容器高度

.vc-img2 {    border: 1px solid black;    width: 200px;    height: 200px;    line-height: 200px;    _font-size: 200px;    text-align: center;}.vc-img2 img {    width: 100px;    height: 100px;    vertical-align: middle;}/*hack for ie7 字体要设置多大,自个慢慢调整*/*+html .vc-img2 {    font-size: 180px;}

我以为设置了行高等于容器高度就完事了,依然还是碰到了问题,IE6不买账没效果,IE7也闹别扭,在标签同一行情况下失效。

这里顺便推荐一个很好用的,好奇的童鞋猛戳链接吧 :)

缺点:感觉这样写不爽

图片自适应容器宽高垂直居中

这个方法很简单,就是在方法4的基础上改一下图片的宽高改成max-width,max-height,代码如下:

.vc-img3 {    border: 1px solid black;    width: 200px;    height: 200px;    line-height: 200px;    text-align: center;}.vc-img3 img {    max-width: 150px;    max-height: 150px;    vertical-align: middle;}/*hack for ie7 字体要设置多大,自个慢慢调整*/*+html .vc-img3 {    font-size: 180px;}

很明显这是不兼容IE6,要兼容IE6恐怕就要写JS。对此,我只想说,让IE6见鬼去吧!

CSS3display:box

最后给出一种高端大气上档次的方法。

.vc-css3 {    border: 1px solid black;    width: 200px;    height: 200px;    text-align: center;    display: -webkit-box;    -webkit-box-align: center;    -webkit-box-pack: center;    display: -moz-box;    -moz-box-align: center;    -moz-box-pack: center;    display: -o-box;    -o-box-align: center;    -o-box-pack: center;    display: -ms-box;    -ms-box-align: center;    -ms-box-pack: center;    display: box;    box-align: center;    box-pack: center;}.vc-css3 img {    width: 100px;    height: 100px;}
想居中就居中,爽啊!

很完美有木有?如果IE能支持的话,又是该死的IE...

文章转自

转载地址:http://juoso.baihongyu.com/

你可能感兴趣的文章
Samba服务介绍及配置
查看>>
Android系统的开机画面显示过程分析(5)
查看>>
DataGrid Web Control 连载之四
查看>>
在Windows Server 2008上实现带宽控制---QoS
查看>>
Web Client Software Factory系列(1):初识与预备知识
查看>>
HTML元素的默认CSS设置介绍
查看>>
CSS-图片不变形设置
查看>>
Git异常:fatal: could not create work tree dir 'XXX': No such file or directory
查看>>
JavaScript:综合案例-表单验证
查看>>
GNU make manual 翻译(八十二)
查看>>
python批量下载图片的三种方法
查看>>
[项目过程中所遇到的各种问题记录]部署篇——项目部署过程中那些纠结的问题-IIS...
查看>>
Android + eclipse +ADT安装完全教程
查看>>
[书友交流] <Autodesk 地理信息系统解决方案--FDO、MapGuide、AutoCAD Map 3D二次开发指南>读书交流贴...
查看>>
小Q书桌的下载、安装和使用
查看>>
ASP.NET MVC5+EF6+EasyUI 后台管理系统(71)-微信公众平台开发-公众号管理
查看>>
【数据结构与算法】基础排序算法总结与Python实现
查看>>
《Android学习指南》目录
查看>>
IOC/AOP随笔目录
查看>>
小议解耦合--应用设计模式
查看>>