您现在的位置是:网站首页> 编程资料编程资料
大小不固定的图片和多行文字的垂直水平居中实现分析CSS 垂直水平居中的5种最佳解决方案CSS水平垂直居中的几种方法总结纯css多种方法实现div中单行文字、多行文字及嵌套div垂直水平居中如何使div垂直水平居中的css代码CSS 实现未知内容高度的垂直水平居中(改良版)CSS解决未知高度的垂直水平居中自适应问题CSS水平垂直居中解决方案(6种)
2021-09-07
790人已围观
简介 其核心原理其实与第二种利用font-size大小实现IE下图片垂直居中是一致的。将font-size设置得很大,目的是撑开IE下默认文字空间的高度,其性质类似于空格,然后通过vertical-align:middle属性让图片与这个高高的空白空格空间垂直居中对齐,需要的朋友可以参考下
一、大小不固定,多行文字的垂直居中
① 单行文字
可能很多人都知道如何让单行文字垂直居中显示,就是使用line-height,将line-height值与外部标签盒子的高度值设置成一致就可以了。例如: 单行文字居中显示测试,css样式为:height:3em; line-height:3em;……
② 多行文字
但是对于外框高度固定,文字大小个数不固定的多行文字呢?文字可能一行显示,也有可能多行显示;文字可能是小号字体,也有可能是大号的。这时候如何让其垂直居中显示呢?看下面! 这里的文字用来做多行文字垂直居中对齐的测试。
这是第二行文字,您还可以再添加一行文字做测试!
这是隐藏的第三行文字,注意到文字的变化没,依旧垂直居中。
上面所展示的就是多行文字垂直居中的效果!
HTML结构如下:
css代码如下:
.zxx_align_box_2{display:table-cell; width:550px; height:1.14em; padding:0 0.1em; border:4px solid #beceeb; color:#069; font-size:10em; vertical-align:middle;}
.zxx_align_box_2 span.zxx_align_word{display:inline-block; font-size:0.1em; vertical-align:middle;}
实现的原理:
说白了,就是把文字当图片处理。用一个span标签将所有的文字封装起来,设置文字与图片相同的display属性(inline-block属性),然后用处理图片垂直居中的方式处理文字的垂直居中即可。有几点简要说明:1.此例子用em做单位,如果您对em单位了解不够,把握不来的话,可以使用px做单位,值要换;2.外部div不能使用浮动;3.外部div高度和文字大小比例1.14为宜;4.内部标签的vertical-align:middle可以省略,但是外部div高度和文字大小比例要修改,我自己试了一下,高度比字体1.5左右的样子;5.系统原因,我没能够在IE8下测试。
对于一些细化的原理,将在图片垂直居中处讲一下。二、大小不固定,图片的垂直居中
① 透明gif图片+背景定位
这里利用了background-position:center实现图片居中显示。这是个很实用也是很聪明的办法,对于维护控制成本都很不错。微软必应图片搜索的图片排列就是使用的这种方法。 方法的原理很简单,使用一个透明的gif图片做覆盖层,高宽拉伸至所需要的大小,然后给这个gif图片一个background-position:center center的属性。而background-image建议写在页面上,因为实际项目中,这肯定是个动态的URL地址,css文件似乎不支持动态URL地址。下面就是此方法的实例表现。HTML部分(仅示例一张图片,其他重复,故略):
css部分:
.zxx_align_box_3 li{width:1em; height:1em; padding:0.1em; margin:0 0.1em 0 0; font-size:128px; float:left; border:1px solid #beceeb;}
.zxx_align_box_3 li img{display:block; width:100%; height:100%; background-repeat:no-repeat; background-position:center;}
② display:table-cell和文字大小控制居中 据说这个方法是淘宝的工程师想到的,确实是不错的方法!但是下面展示的却不是原版,而是我的修改版,去掉了没有必要的hack。
HTML部分(仅示例一张图片,其他重复,故略):
css部分:
.zxx_align_box_4 li{float:left; margin-right:13px;}
.zxx_align_box_4 li div{display:table-cell; width:144px; height:144px; border:1px solid #beceeb; font-size:118px; text-align:center; vertical-align:middle;}
.zxx_align_box_4 li div img{vertical-align:middle;}
需要说明的: 1.原版的代码中有两个hack,一个是针对文字大小的,另外一个是针对block属性的;后经过我测试推敲后证实这两个hack都是多余的,而*display:block更是多余,因为IE6,IE7根本就不认识display:table-cell是谁!
2.这个通过文字大小控制IE下图片垂直居中是个很不错的方法,要比使用position:relative这类高消耗的css方法要好多了。但是这个方法不足之处在于:不支持img外标签的浮动,所以当多图片显示时需要再在外面嵌套一层标签——资源消耗多了!
3.高度:文字大小=1.14,这个比例我一直记着,但是后来我将这个比例的概念淡化了,原因在于多次遇到其他比例实现效果的情况。例如上面,就是1:1实现的。4.这个方法巧妙的应用了IE默认文字空间的概念,然而这个默认文字空间是看不见,摸不着的,较抽象,不好理解,使用者多记住用法,深层次原因不太理解,不易上手。但是,这里我要转折一下,我想到了一种方法,将抽象默认文字空间的概念具体出来,实现了更加容易理解,更加方便使用,更加利于维护的新方法,这就是最后一种方法。
③ display:inline-block和文字大小控制居中
这是我自己想到的方法,代码相当简洁,是个成本很低,效果惊人的方法,适用于多图显示的情况。只需要一层必须要的a标签就解决问题了!



HTML部分(仅示例两张图片,其他重复,故略):
css部分:
.zxx_align_box_5 a{display:inline-block; width:1.2em; font-size:128px; text-align:center; vertical-align:middle;}
.zxx_align_box_5 a img{vertical-align:middle; padding:2px; border:1px solid #beceeb;}
需要说明的:
1.img外的标签需是a标签或span这类inline属性的标签,div标签也可以,但是css代码多些:display:inline; display:inline-block先变成inline属性,再转变成inline-block属性,原因讲起来又是一篇长长的文章,放着。2.此方法只需要两层标签即可,可谓代码超简洁,但是只适用于多图垂直居中对齐的情况。因为其对齐原理是相邻的图片居中对齐,如果只是一个图片,vertical-align:middle就只有与空格对齐了。
④ 使用空白图片实现垂直对齐
好吧,我知道说大话会被人笑的,但是我还是非常自信地推荐下面这种我想出来的图片垂直居中对齐的方法。非常简单,非常易懂,出错率低,上手方便,兼容性上佳!
HTML部分(仅示例一张图片,其他重复,故略):
css部分:
.zxx_align_box_6 li{height:128px; width:150px; padding:13px 0; float:left; margin-right:10px; border:1px solid #beceeb; text-align:center; font-size:0;}
.zxx_align_box_6 li .alpha_img{height:100%; width:1px; vertical-align:middle;}
.zxx_align_box_6 li .show_img{vertical-align:middle;}
原理简述: 一句话,将要显示的图片与一张透明的高度100%,宽度1像素的透明图片vertical-align:middle对齐。
其核心原理其实与第二种利用font-size大小实现IE下图片垂直居中是一致的。将font-size设置得很大,目的是撑开IE下默认文字空间的高度,其性质类似于空格,然后通过vertical-align:middle属性让图片与这个高高的空白空格空间垂直居中对齐;而这里将这个看不见的文字空间实例成一张透明的gif图片,高度可以轻松设置为外部标签的高度,然后通过vertical-align:middle对齐,就实现效果了,在各个浏览器下都是一样的表现,不需要担心什么兼容性的问题。而且代码很简单,很易懂,想出错都难!
相关内容
- 关于CSS中的display:table-cell使用技巧的几种应用CSS display属性的table表格布局基于display:table的CSS布局让HTML元素和像table一样css display table 自适应高度、宽度问题的解决
- css属性让网页文字实现竖排的几种方法设置div背景透明的方法示例CSS实现div不设高度完全居中div自适应高度自动填充剩余高度详解DIV+CSS的命名规矩才能有利于SEO优化的实现方法DIV或者DIV里面的图片水平与垂直居中的方法详解如何用div实现自制滚动条div对齐与网页布局详解DIV+CSS实现电台列表设计的示例代码div+css实现带箭头的面包屑导航栏不定宽高的文字在div中垂直居中实现方法
- css 半透明 让IE6支持png图片半透明解决方法纯css实现背景图片半透明内容不透明的方法利用CSS3制作简单的3d半透明立方体图片展示CSS实现让文字半透明显示在图片上的方法css3实现背景图片半透明内容不透明的方法示例
- PNG8格式图片是不支持半透明等问题深入分析背景半透明效果CSS链接样式代码img 半透明 处理img加半透明背景实现思路及代码css 半透明 让IE6支持png图片半透明解决方法背景半透明最佳实践div背景半透明,覆盖整个可视区域的遮罩层效果 css 背景半透明最佳实践div背景半透明 覆盖整个可视区域的遮罩层效果利用js+css简单实现半透明遮罩弹窗DIV半透明代码 兼容主流浏览器CSS 半透明度设置归纳总结[Firefox,IE,Chrome,Safari]
- CSS伪类与CSS伪元素的区别及由来具体说明详解如何使用CSS3中的结构伪类选择器和伪元素选择器解析CSS中的伪元素及其与伪类的区别详解CSS中的伪类与伪元素及二者间的区别浅谈CSS伪类与伪元素CSS伪类和伪元素的区别详解css3 伪元素和伪类选择器详解CSS伪类/伪元素选择器整理css伪类伪元素域高级选择器的介绍浅谈CSS 伪元素&伪类的妙用
- ie10 css hack 条件注释等兼容方式整理针对主流浏览器的CSS-HACK写法及IE常用条件注释 css 条件注释区分非IE浏览器 css 条件注释使用指南 css 条件注释使用指南CSS教程:条件注释的格式以及作用CSS条件注释详解(根据不同浏览器加载CSS)
- 如何在class内写xsl标记注意事项CSS Transition通过改变Height实现展开收起元素从QQtabBar看css命名规范BEM的详细介绍css实现两栏布局,左侧固定宽,右侧自适应的多种方法CSS 实现Chrome标签栏的技巧CSS实现两列布局的N种方法CSS实现隐藏搜索框功能(动画正反向序列)CSS3中Animation实现简单的手指点击动画的示例详解CSS中的特指度和层叠问题详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)关于CSS浮动与取消浮动的问题
- ie6不支持两个连续并列class类名怎么解决浅谈原生页面兼容IE9问题的解决方案新版chrome浏览器设置允许跨域的实现css hack之\9和\0就可能对hack IE11\IE9\IE8无效css区分ie8/ie9/ie10/ie11 chrome firefox的代码解决CSS浏览器兼容性问题的4种方案常见的浏览器兼容性问题(小结)border-radius IE8兼容处理的方法浅谈遇到的几个浏览器兼容性问题base64图片在各种浏览器的兼容性处理 对常见的css属性进行浏览器兼容性总结(推荐)
- 用css margin去掉横排图片之间的间距CSS Transition通过改变Height实现展开收起元素从QQtabBar看css命名规范BEM的详细介绍css实现两栏布局,左侧固定宽,右侧自适应的多种方法CSS 实现Chrome标签栏的技巧CSS实现两列布局的N种方法CSS实现隐藏搜索框功能(动画正反向序列)CSS3中Animation实现简单的手指点击动画的示例详解CSS中的特指度和层叠问题详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)关于CSS浮动与取消浮动的问题
- js 解决隐藏与显示div的相关问题CSS Transition通过改变Height实现展开收起元素从QQtabBar看css命名规范BEM的详细介绍css实现两栏布局,左侧固定宽,右侧自适应的多种方法CSS 实现Chrome标签栏的技巧CSS实现两列布局的N种方法CSS实现隐藏搜索框功能(动画正反向序列)CSS3中Animation实现简单的手指点击动画的示例详解CSS中的特指度和层叠问题详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)关于CSS浮动与取消浮动的问题