CSS制作图片水平垂直居中
所谓的图片水平垂直居中就是把图片放在一个容器元素中(容器大于图片尺寸或是指定了大小的容器),并且图片位居此容器正中间(中间是指元素容器的正中间),而图片不是以背景图片(background-image)形式展示,是以<img>元素形式展示的。如下图所示:
解决问题——让图片水平垂直居中
解决水平居中是相当的容易,如果图片左浮动并且"display:inline"时,我们只要给图片设置一个"text-align:center"属性,就顺利解决了水平居中。
对于垂直居中的最佳解决方案,在现代浏览器中,我们可以给图片容器设置“dipslay:table-cell;vertical-align:middle”, 这种方法能顺利的让图片实现垂直居中,但只能在现代浏览器运行,在IE6-7中无法正常运。这样一来是不是将无法实现呢?大家别急,我们一起来看下面的几种方法:
1、table-cell加上display:inline
这种方法很神奇,前面我们说过用display-table和vertical-middle是在现代浏览器中实现图片垂直居中是最佳办法,只是IE6-7不支持display:table-cell,其实并不是那么严重,我们只要在IE6-7下给他来个另外的写法。其实掌握了原理在IE下实现起来也并不难,下面我们一起先来看看这个思路:
- 首先在图片的容器元素中设置“display:table-cell;vertical-align:middle;”实现现浏览器的垂直居中;
- IE6-7有一个好的办法,就是创建一个线盒,此线盒的高度和图片容器的高度一样,并且给这个线盒也设置“vertical-align:middle”。
接下来的关键是给IE6-7创建线盒,还好IE6-7下部分显示支持“dipslay:inline-block”。这样我们就可以在图片的容器中创建一个空元素(比如说span),并且设置span的“display:inline-block;height:100%;vertical-align:middle”。
创建线盒中有一个细节需要注意,在IE6-7中空的line-block元素宽度为“0”,这样在IE6-7下是没有效果的,此时我们需要给span加上“width:1px”,此时会给水平居中造成1px的误差,但这种bug你是可以接受得了的。
那么最终解决方案就是使用display:table-cell和设置了display:inline-block的线合span。当然其中还是需要为IE写一点特殊的代码,接下来我们的起来看代码:
HTML Markup
<ul class="imgWrap clearfix">
<li><a href="#" class="imgBox"><span></span><img src="data:images/img1.jpg" alt="" /></a></li>
<li><a href="#" class="imgBox"><span></span><img src="data:images/img2.jpg" alt="" /></a></li>
<li><a href="#" class="imgBox"><span></span><img src="data:images/img3.jpg" alt="" /></a></li>
<li><a href="#" class="imgBox"><span></span><img src="data:images/img4.jpg" alt="" /></a></li>
</ul>
<style type="text/css">
.imgWrap li {
float: left;
border: solid 1px #666;
margin: 10px 10px 0 0;
list-style: none;
border-collapse: collapse;
}
.imgWrap a {
background: #ffa url(images/gridBg.gif) repeat center;
width: 219px;
height: 219px;
display: table-cell;/*图片容器以表格的单元格形式显示*/
text-align: center; /* 实现水平居中 */
vertical-align: middle; /*实现垂直居中*/
}
.imgWrap a:hover {
background-color: #dfd;
}
.imgWrap img {
border: solid 1px #66f;
vertical-align: middle; /*图片垂直居中*/
}
</style>
<!--下面是解决IE6-7的正常显示的代码-->
<!--[if lt IE 8]>
<style type="text/css">
.imgWrap a {
display: block;
}
.imgWrap span {
display: inline-block;
vertical-align: middle;
height: 100%;
}
.imgWrap {
_height:;
zoom:;
}
</style>
<![endif]-->
CSS代码
2、空白标签实现图片的垂直居中
将span行内元素设置为行内块元素,也就是将其display设置为“inline-block”,将其宽度定位1px,height为容器的100%,这样高度可以和容器的高度达到一样,然后通过“vertical-align:middle”设置垂直对齐,从而实现所需要的效果。本人感觉这个方法优于上面那个方法,最主要的不要单独给IE写效果,而且易懂
<ul class="imgWrap clearfix">
<li><a href="#" class="imgBox"><span></span><img src="data:images/img1.jpg" alt="" /></a></li>
<li><a href="#" class="imgBox"><span></span><img src="data:images/img2.jpg" alt="" /></a></li>
<li><a href="#" class="imgBox"><span></span><img src="data:images/img3.jpg" alt="" /></a></li>
<li><a href="#" class="imgBox"><span></span><img src="data:images/img4.jpg" alt="" /></a></li>
</ul>
<style type="text/css">
.imgWrap li{
width: 219px;
height: 219px;
float: left;
border: solid 1px #666;
margin: 10px 10px 0 0;
list-style: none;
text-align: center;
font-size:;
} .imgWrap a {
display: block;
height: 100%;
background: #ffa url(images/gridBg.gif) repeat center;
}
.imgWrap a:hover {
background-color: green;
}
.imgWrap span {
display: inline-block;/*将行内元素改变为行内块元素显示*/
width: 1px;/*实现IE下可读效果*/
height: 100%;/*使用元素高度和图片容器高度一样*/
vertical-align: middle;/*垂直对齐*/
} .imgWrap img {
vertical-align: middle;
}
</style>
3、display:table模拟表格实现图片垂直居中
接下来要说的这种方法是结构有点复杂,而且在IE6-7事要配合hack来产现。这个方法就是模拟表格的形式来实现图片垂直居中的效果。
表格大家都知道,他有行(table-row)单元格(table-cell),众所周知,表格单元格中“vertical-align: middle”能让元素垂直居中,那么下面这个实例就是利用这种原理来制作的,一起来看代码
<ul class="imgWrap clearfix">
<li>
<div class="table">
<div class="tableCell">
<a href="#" class="imgBox"><img src="data:images/img1.jpg" alt="" /></a>
</div>
</div>
</li>
<li>
<div class="table">
<div class="tableCell">
<a href="#" class="imgBox"><img src="data:images/img2.jpg" alt="" /></a>
</div>
</div>
</li>
<li>
<div class="table">
<div class="tableCell">
<a href="#" class="imgBox"><img src="data:images/img3.jpg" alt="" /></a>
</div>
</div>
</li>
<li>
<div class="table">
<div class="tableCell">
<a href="#" class="imgBox"><img src="data:images/img4.jpg" alt="" /></a>
</div>
</div>
</li>
</ul>
.imgWrap li {
background: #ffa url(images/gridBg.gif) repeat center;
width: 219px;
height: 219px;
float: left;
border: solid 1px #666;
margin: 10px 10px 0 0;
list-style: none;
text-align: center;
}
.table {
width: 100%;
height: 100%;
display: table;
position: relative;
} .tableCell {
display: table-cell;
vertical-align: middle;
text-align: center;
padding: 10px;
*position: absolute;
*top: 50%;
*left: 50%;
}
.imgWrap a {
display: block;
*position:relative;
*top: -50%;
*left: -50%;
}
CSS
4、jQuery方法实现图片居中
这个方法很简单,就是得用jQuery方法,将图片转换为其父元素的背景图片,并且在其父元素中居中显示背景图片,然后在将其自身的透明度设置为“0”, 这样也能达到图片居中的效果。
Html Markup
<ul class="imgWrap clearfix">
<li><a href="#" class="imgBox"><img src="data:images/img1.jpg" alt="" /></a></li>
<li><a href="#" class="imgBox"><img src="data:images/img2.jpg" alt="" /></a></li>
<li><a href="#" class="imgBox"><img src="data:images/img3.jpg" alt="" /></a></li>
<li><a href="#" class="imgBox"><img src="data:images/img4.jpg" alt="" /></a></li>
</ul>
CSS Code
.imgWrap li {
float: left;
border: solid 1px #666;
margin: 10px 10px 0 0;
list-style: none;
background: #ffa url(images/gridBg.gif) repeat center;
}
.imgWrap a {
width: 219px;
height: 219px;
display: block;
}
jQuery Code
//先写一个小插件
$.fn.imgVAlign=function(){
return $(this).each(function(i){
//获取图片的src值,并定义给变量bg
var bg = $(this).attr("src");
//给图片的父元素定义背景图片的样式,并且背景图片
$(this).parent().css({"background": "url("+ bg +") no-repeat center center"
});
//将图片隐藏
$(this).css("opacity","0");
});
}
//调用上面写的插件
$(document).ready(function(){
$(".imgBox img").imgVAlign();
});
CSS制作图片水平垂直居中的更多相关文章
- CSS制作图片水平垂直居中 亲测推荐
空白标签实现图片的垂直居中 这种方法很有意思,也很有独特之处,我的思路也是来自于张鑫旭-鑫空间-鑫生活写的<大小不固定的图片.多行文字的水平垂直居中>一文中的使用空白图片实现垂直对齐.他主 ...
- css实现图片水平垂直居中
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- CSS中图片水平垂直居中方法小结
写页面时难免会遇到水平垂直居中的问题,总结一下最近使用的方法. 一.使用垂直居中和水平居中 <div id="div1"> <img src="img/ ...
- css 使图片水平垂直居中
1.利用display:table-cell,具体代码如下: html代码如下: <div class="img_wrap"> <img src="wg ...
- 纯CSS实现图片水平垂直居中于DIV(图片未知宽高)
<div class="demo"><a href="#"><img src="http://nec.netease.c ...
- Flexbox制作CSS布局实现水平垂直居中
Flexbox实现一个div元素在body页面中水平垂直居中: <!DOCTYPE html><html lang="en"><head> & ...
- 图片水平垂直居中(兼容IE6,IE7,firefox,opera,safari,其中图片可以是任何块元素)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- css中元素水平垂直居中4种方法介绍
table-cell轻松设置文本图片水平垂直居中 让一个元素垂直居中的思路:把这个元素的容器设置为table-cell,也就是具有表格单元格的特性,再使用vertical-align(这个属性对blo ...
- 【最全】CSS盒子(div)水平垂直居中居然还有这种方式
最全的CSS盒子(div)水平垂直居中布局,对CSS 布局掌握程度决定你在 Web 开发中的开发页面速度. 相对于屏幕 方法一:利用定位 <div class="box"&g ...
随机推荐
- [资源]PHP使用消息队列
利用PHP操作Linux消息队列完成进程间通信 基于HTTP协议的轻量级开源简单队列服务:HTTPSQS[原创] Redis队列——PHP操作简单示例 入队操作 <?php $redis = n ...
- How to configure SRTM elevations in WorldWind WMS
In this thread I will try to explain how to serve SRTM elevations using NASA WorldWind WMS. ! Import ...
- Qt——QLineEdit使用总结
QLineEdit是一个单行文本编辑控件. 使用者可以通过很多函数,输入和编辑单行文本,比如撤销.恢复.剪切.粘贴以及拖放等. 通过改变QLineEdit的 echoMode() ,可以设置其属性,比 ...
- 用python简单处理图片(4):图像中的像素访问
前面的一些例子中,我们都是利用Image.open()来打开一幅图像,然后直接对这个PIL对象进行操作.如果只是简单的操作还可以,但是如果操作稍微复杂一些,就比较吃力了.因此,通常我们加载完图片后,都 ...
- 在opencv3中实现机器学习之:利用正态贝叶斯分类
opencv3.0版本中,实现正态贝叶斯分类器(Normal Bayes Classifier)分类实例 #include "stdafx.h" #include "op ...
- LeetCode:Populating Next Right Pointers in Each Node I II
LeetCode:Populating Next Right Pointers in Each Node Given a binary tree struct TreeLinkNode { TreeL ...
- 信息安全系统设计基础第四次实验报告20135324&&20135330
课程:信息安全系统设计基础 班级:1353 姓名:杨舒雯 张若嘉 学号:20135324,20135330 实验日期:2015.11.17 15:30-17:30 实验名称:外设驱动程序设计 实验目的 ...
- iOS——关于打印控件
20.UIPrintFormatterUIPrintFormatter时打印格式化的抽象基类:展示了传统的可打印的内容对象可以跨页边界.由于打印格式化,打印系统,可以自动打印与打印格式化的内容相关联的 ...
- 一个优秀的Android应用从建项目开始
1.项目结构 现在的MVP模式越来越流行.就默认采用了.如果项目比较小的话: app——Application Activity Fragment Presenter等的顶级父类 config——AP ...
- NoSQL数据库之国产开源产品:SequoiaDB 分析前言
随着互联网技术的发展,面对海量数据的存储和分析,传统关系型数据库已经无法满足,由此衍生出一种与关系型数据库区别开的数据库NoSQL(Not Only SQL). 国外做的比较成熟的NoSQL有Mong ...