div居中

1、使用绝对定位和负外边距让块级元素垂直居中

要点:必须提前知道被居中块级元素的尺寸,否则无法准确实现垂直居中。

<div id="box">
<div id="child">我是测试DIV</div>
</div>

CSS代码:

#box {
width: 300px;
height: 300px;
background: #ddd;
position: relative;
}
#child {
width: 150px;
height: 100px;
background: orange;
position: absolute;
top: 50%;
margin: -50px 0 0 0; /*top设为50%,margin-top设置为负的容器的高度/2*/
line-height: 100px; /*单行文字,line-height值等于div的高度,使文字垂直居中*/
}

或者如下:

#box {
width: 300px;
height: 300px;
background: #ddd;
position: relative;
}
#child {
  width: 50%;
height: 30%;
background: pink;
position: absolute;
top: 50%;
margin: -15% 0 0 0; /*margin的取值也可以是百分比,这时这个值规定了该元素基于父元素尺寸的百分比,可以根据实际的使用场景来决定是用具体的数值还是用百分比*/
}

2、使用绝对定位和transform让块级元素垂直居中

要点:不必提前知道被居中元素的尺寸了,因为transform中translate偏移的百分比就是相对于元素自身的尺寸而言的。

CSS代码:

#box {
width: 300px;
height: 300px;
background: #ddd;
position: relative;
}
#child {
background: #93BC49;
position: absolute;
top: 50%;
transform: translate(0, -50%);
}
3、绝对定位结合margin: auto让块级元素垂直居中

要点:

  1. 把要垂直居中的元素相对于父元素绝对定位,top和bottom设为相等的值(这里设成了0,也可以设为99999px或者-99999px无论什么,只要两者相等就行)。
  2. 再将要居中元素的margin设为auto,这样便可以实现垂直居中了。
  3. 被居中元素的宽高也可以不设置,但不设置的话就必须是图片这种自身就包含尺寸的元素,否则无法实现。

css代码:

#box {
width: 300px;
height: 300px;
background: #ddd;
position: relative;
}
#child {
width: 200px;
height: 100px;
background: #A1CCFE;
position: absolute;
top:;
bottom:;
margin: auto;
line-height: 100px;
}

4、使用padding实现子元素的垂直居中

要点:给父元素设置相等的上下内边距,则子元素自然是垂直居中的,当然这时候父元素是不能设置高度的,要让它自动被填充起来,除非设置了一个正好等于上内边距+子元素高度+下内边距的值,否则无法精确的垂直居中。

#box {
width: 300px;
background: #ddd;
padding: 100px 0;
}
#child {
width: 200px;
height: 100px;
background: #F7A750;
line-height: 50px;
}

5、设置第三方基准

要点:首先设置一个高度等于父元素高度一半的第三方基准元素,那么此时该基准元素的底边线自然就是父元素纵向上的中分线,做完这些之后再给要垂直居中的元素设置一个margin-top,值的大小是它自身高度的一半取负,则实现垂直居中。

<div id="box">
<div id="base"></div>
<div id="child">测试测试测试!!</div>
</div>

CSS代码:

#box {
width: 300px;
height: 300px;
background: #ddd;
}
#base {
height: 50%;
background: #AF9BD3;
}
#child {
height: 100px;
background: rgba(131, 224, 245, 0.6);
margin-top: -50px;
line-height: 50px;
}

 6、flex布局使块级元素垂直居中

 要点:元素可以通过将父元素设置display:flex;将其指定为flex布局的容器,指定好了容器之后再为其添加align-items属性,该属性定义项目在交叉轴(这里是纵向轴)上的对齐方式,可能的取值有五个,分别如下:

  flex-start::交叉轴的起点对齐;

  flex-end:交叉轴的终点对齐;
  center:交叉轴的中点对齐;
  baseline:项目第一行文字的基线对齐;
  stretch(该值是默认值):如果项目没有设置高度或者设为了auto,那么将占满整个容器的高度。

具体flex布局在此。

<div id="box">
<div id="child">我是测试DIV</div>
</div>

CSS代码:

#box {
width: 300px;
height: 300px;
background: #ddd;
display: flex;
align-items: center;
}
#child {
width: 300px;
height: 100px;
background: #8194AA;
line-height: 100px;
}

7、第二种使用flex实现块级元素垂直居中

要点:首先给父元素设置display:flex,设置好之后改变主轴的方向flex-direction: column,该属性可能的取值有四个,分别如下:

  row(该值为默认值):主轴为水平方向,起点在左端;
  row-reverse:主轴为水平方向,起点在右端;
  column:主轴为垂直方向,起点在上沿;
  column-reverse:主轴为垂直方向,起点在下沿。
justify-content属性定义了项目在主轴上的对齐方式,可能的取值有五个,分别如下(不过具体的对齐方式与主轴的方向有关,以下的值都是假设主轴为从左到右的):
  flex-start(该值是默认值):左对齐;
  flex-end:右对齐;
  center:居中对齐;
  space-between:两端对齐,各个项目之间的间隔均相等;
  space-around:各个项目两侧的间隔相等。
具体flex布局在此。
css代码:

#box {
width: 300px;
height: 300px;
background: #ddd;
display: flex;
flex-direction: column;
justify-content: center;
}
#child {
width: 300px;
height: 100px;
background: #08BC67;
line-height: 100px;
}

8、使用 line-height 和 vertical-align 对图片进行垂直居中

<div id="box">
<img src="duncan.jpeg">
</div>

css代码:

#box{
width: 300px;
height: 300px;
background: #ddd;
line-height: 300px;
}
#box img {
vertical-align: middle;
}

9、结合表格和vertical-align属性

要点:将div转变成table-cell显示,然后通过vertical-align: middle;再设置其子元素垂直居中,子元素的高度可以动态改变,当outer里没有足够空间时,middle不会被截断。

<div id="outer">
<div id="middle">
测试测试测试!!!
</div>
</div>

CSS代码:

#outer{
background-color: #13CDF4;
width: 300px;
height: 200px;
display: table-cell;
vertical-align: middle;
}
#middle{
background-color: #E41627;
width: 100px;
height: 100px;
margin: 0 auto;
}

文本居中

1、单行文本

要点:只需要将文本行高(line-height)和所在区域高度(height)设为一致即可

<div id="div1">
这是单行文本垂直居中
</div>

CSS代码:

#div1{
width: 300px;
height: 100px;
margin: 50px auto;
border: 1px solid red;
line-height: 100px; /*设置line-height与父级元素的height相等*/
text-align: center; /*设置文本水平居中*/
overflow: hidden; /*防止内容超出容器或者产生自动换行*/
}

2、使用flex布局

<div id="box">测试测试测试!!</div>

CSS代码:

#box {
width: 300px;
height: 300px;
background: #ddd;
display: flex;
align-items: center;
}

3、多行文本垂直居中

(1)父级元素高度不固定,随着内容变化

  要点:父级高度不固定的时,高度只能通过内部文本来撑开。这样,我们可以通过设置内填充(padding)的值来使文本看起来垂直居中,只需设置padding-top和padding-bottom的值相等。

<div id="div1">
这是多行文本垂直居中,这是多行文本垂直居中,这是多行文本垂直居中,这是多行文本垂直居中。
</div>

CSS代码:

        #div1{
width: 300px;
margin: 50px auto;
border: 1px solid red;
padding: 50px 20px; /*设置padding-top和padding-bottom的值相等*/
text-align: center; /*设置文本水平居中*/
}

(2)父级元素高度固定

要点:css中的vertical-align属性只对拥有valign特性的元素才生效,结合display: table,可以使得div模拟table属性。因此我们可以设置父级div的display属性:display: table;然后再添加一个div包含文本内容,设置其display:table-cellvertical-align:middle

    <div id="outer">
<div id="middle">
这是固定高度多行文本垂直居中,这是固定高度多行文本垂直居中,这是固定高度多行文本垂直居中,这是固定高度多行文本垂直居中。
</div>
</div>

CSS代码:

#outer{
width: 400px;
height: 200px;
margin: 50px auto;
border: 1px solid red;
display: table;
}
#middle{
display:table-cell;
vertical-align:middle;
text-align: center; /*设置文本水平居中*/
width:100%;
}

但是在IE7中显示效果如下:

这是因为IE7及以下的版本并不能很好的支持display:table和display:table-cell属性,当然,如果你不考虑IE7以下的版本的浏览器,上述方法是可以实现垂直居中。如果把IE7及以下版本考虑进去,我们可以通过用到CSS hack的知识来设置针对不同浏览器的属性。

要点:使用position定位来解决

    <div id="outer">
<div id="middle">
<div id="content">
这是固定高度多行文本垂直居中(兼容IE7),这是固定高度多行文本垂直居中(兼容IE7),这是固定高度多行文本垂直居中(兼容IE7),这是固定高度多行文本垂直居中(兼容IE7)。
</div>
</div>
</div>

CSS代码:

        #outer{
width: 400px;
height: 200px;
margin: 50px auto;
border: 1px solid red;
display: table;
*position:relative; /*兼容IE7及以下版本*/
}
#middle{
display:table-cell;
vertical-align:middle;
text-align: center; /*设置文本水平居中*/
width:100%;
*position:absolute; /*兼容IE7及以下版本*/
*top:50%; /*兼容IE7及以下版本,令middle相对于outer向下50%*/
}
#content {
*position:relative; /*兼容IE7及以下版本 */
*top:-50%; /*兼容IE7及以下版本,令content相对于middle向上50%,这样content就会相对于outer居中*/
}

CSS元素和文本垂直居中的更多相关文章

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

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

  2. css元素水平居中和垂直居中的方式

    关于居中的问题,一直处于疑惑不解的状态,知道的几种方法好像也不是每一次都会起到作用,所以更加迷惑.主要是不清楚该 在什么情况下采用哪种解决方法,所以,整理了一些方法,梳理一下思路,做一个总结. 1. ...

  3. CSS元素水平居中和垂直居中的方法大全

    水平居方法: 1.最熟悉的是给元素定义一个宽度,然后使用margin: body{ width:960px; margin:0 auto;}这个是当我们的定义元素的宽度时显现的,如果我们不能定义宽度时 ...

  4. css确定元素水平居中和垂直居中

    ---恢复内容开始--- 首先,我们在了解如何通过css了解元素水平和垂直居中之前,先要了解下html都有哪些元素,这些元素与偶有哪些分类,因为不同类别的元素的水平垂直居中方法是完全不同的,究其根本当 ...

  5. [转]-CSS 元素垂直居中的6种方法

    原文地址:http://blog.zhourunsheng.com/2012/03/css-%E5%85%83%E7%B4%A0%E5%9E%82%E7%9B%B4%E5%B1%85%E4%B8%AD ...

  6. CSS 元素垂直居中的 6种方法

    利用CSS进行元素的水平居中,比较简单,行级元素设置其父元素的text-align center,块级元素设置其本身的left 和 right margins为auto即可.本文收集了六种利用css进 ...

  7. CSS中元素水平居中和垂直居中的方法

    #CSS中水平居中和垂直居中的方法 一. 水平居中 1.行内元素(文本,图片等) 如果被设置元素为文本.图片等行内元素时,可以通过给父元素设置` text-align:center;` 来实现 2.定 ...

  8. CSS元素水平垂直居中方法总结(主要对大漠以及张鑫旭博客所述方法进行了归纳)

    本文主要是对主流居中方法进行了归纳,有些地方甚至就是把别人的代码直接复制过来的,没有什么自己的东西,除了大漠以及张鑫旭的方法外,还有来自司徒正美.怿飞博客的几个方法 以下方法,由于测试环境的原因,IE ...

  9. css元素水平垂直居中的十种方法

    四月底在杭州金诚的前端面试过程中,问到了父元素中子元素水平和垂直居中的方式,因为平时疏于整理,只说上来两种.后来面试过了,所以现在回想到这个问题,所以针对各种情况集中整理一下. 首先看页面结构和元素的 ...

随机推荐

  1. 《梳理业务的三个难点》---创业学习---训练营第二课---HHR---

    一,<开始学习> 1,融资的第一步:把业务一块一块的梳理清楚. 2,预热思考题: (1)投资人会问能做多大,天花板怎么算?你的答案可以得到大家的认同吗?(四种方法,直接引用,自顶向下,自底 ...

  2. 201771010135杨蓉庆 《面对对象程序设计(java)》第九周学习总结

    第7章 异常.日志.断言和调试 1.实验目的与要求 (1) 掌握java异常处理技术: (2) 了解断言的用法: (3) 了解日志的用途: (4) 掌握程序基础调试技巧: 一.理论知识 1.异常:在程 ...

  3. Spring Boot 集成 Swagger2 教程

    上篇讲过 Spring Boot RESTful api ,这篇简单介绍下 SwaggerUI 在 Spring Boot 中的应用. Swagger 是一个规范和完整的框架,用于生成.描述.调用和可 ...

  4. MSE-初始化MSE

    MSE(Mobility Services Engine) Cisco MSE可以配合无线实现很多功能,MSE的功能简单概括有: 1.基本位置服务捕获并聚合关键网络信息,例如设备位置,RF频谱详细信息 ...

  5. java怎么调用子类中父类被覆盖的方法

    public class b { { void show() { System.out.println("b"); } } public class c extends b { v ...

  6. subprocess.run()用法python3.7

    def run(*popenargs, input=None, capture_output=False, timeout=None, check=False, **kwargs): "&q ...

  7. 基于Struts2+Hibernate开发小区物业管理系统 附源码

    开发环境: Windows操作系统开发工具: MyEclipse+Jdk+Tomcat+MySql数据库 运行效果图: 源码及原文链接:https://javadao.xyz/forum.php?mo ...

  8. 在javaweb中对于session的使用

    1.初次调用session时: String username="student"; HttpSession session=request.getSession(true);// ...

  9. 5G时代,行业市场用户的公网与专网如何选择

    导读 今年,5G开启了真刀真枪的商用元年,尤其中国5G正式启动商用服务,5G规模商用进程再次大提速.除了面向消费者领域,5G更大的商业价值还是寄望于进入各个垂直行业,赋能千行百业数字化转型. 5G进入 ...

  10. c数据结构线性表的总结

    1:连表的特点   1.链表是一种存储结构,用于存放线性表   2.连表的结点是根据需要调用动态分配内存函数进行分配的,因此链表可随需要伸长缩短      在腰存储的数据个数未知的情况下节省内存.   ...