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

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

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. JDK与Apache Tomcat服务器的安装步骤

    先解释一下JDK和Tomcat是什么: Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP ...

  2. 永久设置mysql中文乱码问题

    1.进入mysql的命令窗口 输入 show variables like '%char%'; 查看当前编码是否为UTF-8 2.在上述命令的结果中我们可以看到Wamp的安装目录,找到这一目录,在里面 ...

  3. python练习_12

    题目:敏感词文本文件 filtered_words.txt,里面的内容 和 0011题一样,当用户输入敏感词语,则用 星号 * 替换,例如当用户输入「北京是个好城市」,则变成「**是个好城市」.(11 ...

  4. 前端模块化——seaJS

    1.seaJS手记 一:Bower获取 要安装bower Npm install -g bower Bower install seajs 二:Use方法是整个项目的入口方法,通常一个项目中只调用一次 ...

  5. jenkins 使用注意

    在jenkins使用的时候,在输入文件地址的时候,文件各级目录不能有空格等特殊符号!否则报错!

  6. Android获取状态栏高度、标题栏高度、编辑区域高度

    一.Activity界面的划分 简单说明一下(上图Activity采用默认Style,状态栏和标题栏都会显示):最大的草绿色区域是屏幕界面,红色次大区域我们称之为"应用程序界面区域" ...

  7. Linux系统管理10——进程和计划任务管理

    Linux系统管理10——进程和计划任务管理 一.程序和进程的关系 1.程序 ·保存在硬盘.光盘等介质中的可执行代码和数据 ·静态保存的代码 2.进程 ·在CPU及内存中运行的程序代码 ·动态执行的代 ...

  8. 谈谈RDD、DataFrame、Dataset的区别和各自的优势

    在spark中,RDD.DataFrame.Dataset是最常用的数据类型,本博文给出笔者在使用的过程中体会到的区别和各自的优势 共性: 1.RDD.DataFrame.Dataset全都是spar ...

  9. vue视频学习笔记

    video 7 vue问题: 论坛 http://bbs.zhinengshe.com------------------------------------------------UI组件 别人提供 ...

  10. hdu2717Catch That Cow 简单BFS

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2717 刚开始思路错了,用的DP,一直WA,后来才发现是搜索,还是简单的BFS,顿时.... 思路: B ...