关于文字和图片的水平垂直居中,在前端界绝对算是一个老生常谈的问题了,尤其是垂直居中,什么千奇百怪的解法都能想的出来。下面我就总结一些比较常用的方法:

一、文本的水平垂直居中:

1、水平居中:

是不是很开心?超级简单的问题,一个text-align:center 就搞定了。过过过...

-------------------------------------下面看单行、多行文本的垂直居中-------------------------------------

2、垂直居中:

  1)、单行文本

<!--只要height值等于line-height值就ok -- >
<div style="height:100px;line-height:100px;">
有且仅占有一行的情况下垂直居中
</div>

ps:height === line-height 无法使替换元素,如<img>、<input>、<areatext>、<select>...垂直居中,必须有<a>、<span>...类似行内标签配合才能使垂直居中生效! (下面的图片垂直居中解法5 会用到这个特性)

  2)、多行文本

情况1:高度固定

关键属性:display:tabel-cell; vertical-align:middle;

<style>
div{height:300px;width:200px;vertical-align:middle;display:table-cell;word-break:break-all;background:#666;}
</style>
<div>
ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
</div>

情况2:父级高度固定,嵌套行内元素

关键属性:父级:diaplay:tabel; 子集:display:tabel-cell; vertical-align:middle;

<style>
div{height:300px;width:200px;display:table;word-break:break-all;background:#666;}
span{display:table-cell;vertical-align:middle;}
</style>
<div>
<span>ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd</span>
</div>

情况3:父级高度固定,嵌套块级元素且该元素高确定

关键属性:定位 + margin-top:负值;

<style type="text/css">
*{margin:0;padding:0;}
div{height:300px;width:200px;position:relative;word-break:break-all;background:#666;}
p{position:absolute;top:50%;left:0;height:80px;margin-top:-40px;background:red;}
</style> <div>
<p>ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd</p>
</div>

情况4:父级高度固定,嵌套块级元素且该元素高不确定

关键属性:定位 + transform:translateY(-50%);

<style>
*{margin:0;padding:0;} /*不加的话会被p或其他标签默认样式影响*/
div{height:300px;width:200px;position:relative; word-break:break-all;background:#666;}
p{position:absolute;top:50%;left:0;transform:translateY(-50%);}/*个人建议,被包裹的块标签就不要height,用内容将高度撑开就好*/
</style> <div>
<p>ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd</p>
</div>

情况5:父子均 定宽 定高  (水平垂直居中)

关键属性:定位 + margin:auto;

<style>
*{margin:0;padding:0;}
div{height:300px;width:400px;position:relative;word-break:break-all;background:#666;}
p{position:absolute;top:0;bottom:0;right:0;left:0;margin:auto;height:80px;width:200px;background:red;}
</style> <div>
<p>ddddddddddddddddddddddddddddddddddd</p>  /*水平垂直居中*/
</div>

二、图片的水平垂直居中:

1、水平居中:

  1)、给img设display:inline-block;然后父级text-align:center;

   2)、给img设display:block; 同时设margin: 0 auto;

2、垂直居中:

解法1:img父级display:table-cell; vertical:middle; height:xxx;  (推荐)

<style>
div{display: table-cell;width:400px;height:300px;vertical-align: middle;text-align:center;background:#999;} /*table-cell 可以使替换元素垂直居中,强大!*/
</style> <div>
<img src="/i/eg_tulip.jpg" width=150 height=150 alt="上海鲜花港 - 郁金香" />
</div>

解法2:定位 + transform: translate(-50%,-50%);

<style>
div{position:relative;width:400px;height:300px;text-align:center;background:#999;}
img{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);}
</style> <div>
<img src="/i/eg_tulip.jpg" width=150 height=150 alt="上海鲜花港 - 郁金香" />
</div>

另:当已知图片大小时也可以把translate换成margin负值,这里不推荐使用。

解法3:定位 + margin:auto;

<style>
div{position:relative;width:400px;height:300px;text-align:center;background:#999;}
img{position:absolute;top:0;bottom:0;left:0;right:0;margin:auto;}
</style> <div>
<img src="/i/eg_tulip.jpg" width=150 height=150 alt="上海鲜花港 - 郁金香" />
</div>
</body

解法4:父级display:table; + 包裹img的元素(<span>)设为display:table-cell;

<style>
div{display:table;width:400px;height:300px;text-align:center;background:#999;}
span{display:table-cell;vertical-align:middle;}
</style> <div>
<span>
<img src="/i/eg_tulip.jpg" width=150 height=150 alt="上海鲜花港 - 郁金香" />
</span>
</div>

解法5:父级line-height == height + <img>vertical-align:middle (推荐)

<style>
img{border:0;}
div{width:500px;height:300px;line-height:300px;background:#999;text-align:center;}
img{vertical-align:middle;}
</style> <div>
<a>哪怕我里面有一个字符都行</a>
<img src="/i/eg_tulip.jpg" alt="上海鲜花港 - 郁金香" />
</div>

解法6:background实现

div{
  width:500px;
height:300px;
background:#999 url(/i/eg_tulip.jpg) no-repeat center center;
} <div></div>

下面是图片垂直水平居中的效果:

介于pc端对flex布局的兼容有限,暂且不谈。

若发现错误之处,欢迎拍砖指正,真心感谢!_><_

CSS实现文字和图片的水平垂直居中的更多相关文章

  1. css 文字和子元素水平垂直居中

    关于水平垂直居中,这是一个很简单的问题,但是很多时候,往往简单的东西,反而做不出来.这就是基础不扎实的缘故吧,我参照一些资料,总结了水平垂直居中的几种方法如下: 1 .文字水平垂直居中 这个比较简单, ...

  2. CSS元素(文本、图片)水平垂直居中方法

    1.text-align:center; 2.margin:0 auto; 3.display:inline-block; + text-align:center; 4.position:relati ...

  3. css — 定位、背景图、水平垂直居中

    目录 1. 定位 2. 背景图 3. 水平垂直居中 1. 定位 position:static | relative | absolute | fixed; static 静态定位 relative ...

  4. HTML/CSS实现文字环绕图片布局

    原文: https://blog.csdn.net/yiyelanxin/article/details/75006925 在一个图文并茂的网页上,文字环绕图片可以使布局美观紧凑,如何实现呢?有两种办 ...

  5. CSS之常见布局|常用单位|水平垂直居中

    常见布局: 1. 流式布局:百分比布局,宽高.margin.pinding都是百分比 2. 固定布局:盒子的宽高固定,如:margin.padding等 3. 浮动布局:float 4. 弹性布局:f ...

  6. 【css】常用的几种水平垂直居中方式与盒子模型,面试经常问到!

    div水平垂直居中 假设结构为此,2个div嵌套 <div class="box"> <div class="content">< ...

  7. HTML中,大小不确定图片的水平垂直居中

    html: css: div{ width:400px;height:300px;text-align:center;font-size:0;*font-size:200px;} div:after{ ...

  8. CSS布局之-水平垂直居中

    对一个元素水平垂直居中,在我们的工作中是会经常遇到的,也是CSS布局中很重要的一部分,本文就来讲讲CSS水平垂直居中的一些方法.另外,文中的css都是用less书写的,如果看不懂less,可以把我给的 ...

  9. 解读 CSS 布局之水平垂直居中

    对一个元素水平垂直居中,在我们的工作中是会经常遇到的,也是CSS布局中很重要的一部分,本文就来讲讲CSS水平垂直居中的一些方法.由于我们大搜车的日常工作中已经不再需要理会低版本IE,所以本文所贴出的方 ...

随机推荐

  1. Amazon Alexa登录授权(Android)

    访问Alexa的API,必须要携带AccessToken,也就是必须要登录授权,本文主要记录Amazon Alexa在Android平台上的登录授权过程. 一.在亚马逊开发者平台注册应用 进入亚马逊开 ...

  2. JSON 解析工具的封装(Java)

    JSON 解析工具的封装(Java) 一直想有一个属于自己的JSON工具,今天终于弄好了..... 1.添加pom依赖包 <!--json解析--> <dependency> ...

  3. [ext4]04 磁盘布局 - Meta Block Groups

    Meta Block Groups,可以翻译为元块组集. 如果不采用Meta Block Groups特性,在每个冗余备份的超级块的后面是一个完整的(包含所有块组描述符的)块组描述符表的备份.如前所述 ...

  4. CSS3弹性伸缩布局(中)——flexbox布局

    混合过渡版 上一篇我们主要讲了旧版box布局,今天这篇主要讲flexbox布局. 混合版本的Flexbox模型是2011年提出的工作草案,主要是针对IE10浏览器实现的伸缩布局效果,其功能和旧版本的功 ...

  5. 0基础搭建Hadoop大数据处理-环境

    由于Hadoop需要运行在Linux环境中,而且是分布式的,因此个人学习只能装虚拟机,本文都以VMware Workstation为准,安装CentOS7,具体的安装此处不作过多介绍,只作需要用到的知 ...

  6. 非学习型单层感知机的java实现(日志三)

    要求如下: 所以当神经元输出函数选择在硬极函数的时候,如果想分成上面的四个类型,则必须要2个神经元,其实至于所有的分类问题,n个神经元则可以分成2的n次方类型. 又前一节所证明出来的关系有: 从而算出 ...

  7. Windows下安装Nodejs步骤

      最近打算把我们的微信端用Vue.js重构,为什么选择Vue.js,一是之前使用的是传统的asp.net mvc,多页面应用用户体验比单页面要差.二是使用过Angular.js,感觉对开发人员要求较 ...

  8. kotlin, 一种新的android平台一级开发语言

    最近看到一则科技新闻, 大致内容是google将kotlin语言作为android应用开发的一级语言, 与java并驾齐驱, 这是一个开发界的大事件大新闻, 连google的亲儿子go语言也没有这种待 ...

  9. iOS tableView移除某一行的分割线 让分割线宽度为整个cell的宽度

    移除tableViewCell中某一行的分割线 有2种方法 1. 移除系统的分割线,自己定义每行的分割线 self.tableView.separatorStyle = UITableViewCell ...

  10. Spark学习资料共享

    链接相关 课件代码:http://pan.baidu.com/s/1nvbkRSt 教学视频:http://pan.baidu.com/s/1c12XsIG 这是最近买的付费教程,对资料感兴趣的可以在 ...