水平居中

行内或者具有行内元素性质的元素(比如文字或者链接)?

让一个父元素为块级元素的行内元素水平居中,可以:
CSS:

1
2
3
.center-children {
text-align: center;
}

单个块级元素?

你可以设置块级元素的 margin-left 和 margin-right 为 auto 来使它水平居中(这个块级元素是被设置了一个 width 属性了,否则它会占满宽度,这时候已经不需要居中了),有一种速记的写法:
CSS:

1
2
3
.center-me {
margin: 0 auto;
}

多个块级元素?

如果有两个或者更多的块级元素需要在被一行里水平居中,那么你最好设置他们不同的 display 属性来达到效果了。这里有两个例子:一个是设置为 inline-block, 一个是设置为 flexbox 。
HTML:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<main class="inline-block-center">
<div>
I'm an element that is block-like with my siblings and we're centered in a row.
</div>
<div>
I'm an element that is block-like with my siblings and we're centered in a row. I have more content in me than my siblings do.
</div>
<div>
I'm an element that is block-like with my siblings and we're centered in a row.
</div>
</main>
 
<main class="flex-center">
<div>
I'm an element that is block-like with my siblings and we're centered in a row.
</div>
<div>
I'm an element that is block-like with my siblings and we're centered in a row. I have more content in me than my siblings do.
</div>
<div>
I'm an element that is block-like with my siblings and we're centered in a row.
</div>
</main>

CSS:

1
2
3
4
5
6
7
8
9
10
11
.inline-block-center {
text-align: center;
}
.inline-block-center div {
display: inline-block;
text-align: left;
}
.flex-center {
display: flex;
justify-content: center;
}

除非你是想让多个块级元素堆积在彼此的顶部(一列堆积啦),那么 margin: auto 还是依然适用的:
CSS:

1
2
3
4
5
6
7
main div {
background: black;
margin: 0 auto;
color: white;
padding: 15px;
margin: 5px auto;
}

垂直居中

在CSS里,垂直居中是有那么一点点麻烦了。

行内或者具有行内元素性质的元素(比如文字或者链接)?

单行?

有时候行内元素或者文字显示为垂直居中,仅仅是因为它们的上下内边距相等:
CSS:

1
2
3
4
.link {
padding-top: 30px;
padding-bottom: 30px;
}

如果 padding 出于某些原因不能用,并且你要使一些不换行的文字居中,这里有一个技巧,就是设置文字的 line-height 和 height 的值相等。
CSS:

1
2
3
4
5
.center-text-trick {
height: 100px;
line-height: 100px;
white-space: nowrap;
}

多行?

上边距和下边距相等也能让多行文字达到垂直居中的效果,但是如果这种方法不奏效的话,可能需要设置文字所在的元素为一个 table cell,不管它直接是 table 还是你用CSS使这个元素表现的像一个 table cellvertical-align 属性可以处理这种情况,它与我们通常所做的在行上处理元素对齐的方式不同:
CSS:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
table {
background: white;
width: 240px;
border-collapse: separate;
margin: 20px;
height: 250px;
}
 
table td {
background: black;
color: white;
padding: 20px;
border: 10px solid white;
/* default is vertical-align: middle; */
}
 
.center-table {
display: table;
height: 250px;
background: white;
width: 240px;
margin: 20px;
}
.center-table p {
display: table-cell;
margin: 0;
background: black;
color: white;
padding: 20px;
border: 10px solid white;
vertical-align: middle;
}
.flex-center-vertically {
display: flex;
justify-content: center;
flex-direction: column;
height: 400px;
}

如果没法用类table方式,可能你需要用 flexbox ?单个的 flex 子元素可以非常简单的被一个 flex 父元素垂直居中:
CSS:

1
2
3
4
5
6
.flex-center-vertically {
display: flex;
justify-content: center;
flex-direction: column;
height: 400px;
}

请记住这个方法仅仅适用于父容器具有一个固定的额高度(px,%,等等),这也是为什么容器有一个高度。

如果上面的方法都不能用,你可以试试 ”虚元素“ 技术:其中一个完整高度的伪元素放置在容器内,并与文本垂直对齐。
CSS:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.ghost-center {
position: relative;
}
.ghost-center::before {
content: " ";
display: inline-block;
height: 100%;
width: 1%;
vertical-align: middle;
}
.ghost-center p {
display: inline-block;
vertical-align: middle;
}

块级元素?

知道元素的高度?

不知道元素的高度是比较常见的,有很多原因:如果宽度改变,文本回流会改变高度;文字样式改变会改变高度;文字数量改变会改变高度;一个固定比例的元素,比如图片,当重置尺寸的时候也会改变高度,等等。

但如果你知道高度,你可以这样垂直居中元素:
CSS:

1
2
3
4
5
6
7
8
9
.parent {
position: relative;
}
.child {
position: absolute;
top: 50%;
height: 100px;
margin-top: -50px; /* account for padding and border if not using box-sizing: border-box; */
}

元素高度未知?

可以通过 transform 来达到目的:
CSS:

1
2
3
4
5
6
7
8
9
 
.parent {
position: relative;
}
.child {
position: absolute;
top: 50%;
transform: translateY(-50%);
}

能用 flexbox 吗?

毫无疑问,用 flexbox 简单太多了:
CSS:

1
2
3
4
5
.parent {
display: flex;
flex-direction: column;
justify-content: center;
}

垂直水平居中

你可以通过不同的方式结合上面的技术来得到一个完美的居中水平垂直居中元素。但是我发现,这些方法通常都属于以下三种阵营:

元素有固定的宽和高?

用负的 margin 值使其等于宽度和高度的一半,当你设置了它的绝对位置为 50% 之后,就会得到一个很棒的跨浏览器支持的居中:
CSS;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.parent {
position: relative;
}
 
.child {
width: 300px;
height: 100px;
padding: 20px;
 
position: absolute;
top: 50%;
left: 50%;
 
margin: -70px 0 0 -170px;
}

元素的宽和高未知?

如果你不知道元素的高度和宽度,你可以用 transform 属性,用 translate 设置 -50%(它以元素当前的宽和高为基础)来居中:
CSS:

1
2
3
4
5
6
7
8
9
.parent {
position: relative;
}
.child {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}

能用 flexbox 吗?

为了让元素在 flexbox 两个方向都居中,你需要两个居中属性:
CSS:

1
2
3
4
5
.parent {
display: flex;
justify-content: center;
align-items: center;
}

css居中解决方案的更多相关文章

  1. 【前端】这可能是你看过最全的css居中解决方案了~

    1.水平居中:行内元素解决方案 适用元素:文字,链接,及其其它inline或者inline-*类型元素(inline-block,inline-table,inline-flex) html部分代码: ...

  2. CSS居中完全解决方案

    上次面试面试官问到了,问了个定宽局中和不定宽局中,下来我把所有有关CSS居中都总结了一下 原文摘自我的前端博客,欢迎大家来访问 http://www.hacke2.cn 水平居中 行内元素 把行内元素 ...

  3. CSS居中的实现用法实例

    转载的一篇文章,讲解css内容居中的. 网上有关css 居中的文章不胜枚举,不过大多没有做系统的总结.这里分享的这篇有关css居中的文章,个人感觉不错,值得收藏. 一.水平居中1,将元素水平居中(us ...

  4. vue—你必须知道的 js数据类型 前端学习 CSS 居中 事件委托和this 让js调试更简单—console AMD && CMD 模式识别课程笔记(一) web攻击 web安全之XSS JSONP && CORS css 定位 react小结

    vue—你必须知道的   目录 更多总结 猛戳这里 属性与方法 语法 计算属性 特殊属性 vue 样式绑定 vue事件处理器 表单控件绑定 父子组件通信 过渡效果 vue经验总结 javascript ...

  5. CSS居中demo

      <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...

  6. layer弹出层不居中解决方案

    layer弹出层不居中解决方案 代码头中加入以下代码即可 <!doctype html>

  7. css居中那点事儿

    css居中那点事儿 在css中对元素进行水平居中是非常简单的,然而使元素垂直居中就不是一件简单的事情了,多年以来,垂直居中已经成为了CSS领域的圣杯,因为它是极其常见的需求,但是在实践中却不是一件简单 ...

  8. css居中学习笔记

    css居中学习笔记 一.水平居中 以下面的代码为例: <body> <div class="parent"> <div class="chi ...

  9. 理解CSS居中

    我想很多在前端学习或者开发过程中,肯定会遇到如何让你的元素居中的问题,网上google肯定会有很多的解决方法.今天我就个人的项目与学习经验谈谈个人理解css如何让元素居中. 要理解css的居中,首先必 ...

随机推荐

  1. svn:ignore eclipse开发一般忽略文件

    target.project.classpath.settings

  2. greendao对SQLite数据库的增删改查操作

    利用greendao操作数据库时,都是以对象或者对象的list来进行增删改查的操作,操作的结果都是用一个list来接收的!!! 1.增加一条记录 Stu stu01=new Stu();stu01.s ...

  3. linux 开机自添加路由

    进入 vi /etc/sysconfig/network/routes Destination     Gateway            Genmask         Use Iface172. ...

  4. 一个div,包含两个div,调整文字位置和div平均分布

    网页中经常会用到,一个div下平均分布两个小的div,两个小的div,显示的内容为图片还比较好处理,显示文字则不好控制效果,今天写了一个如图效果的 html: <div class=" ...

  5. How to configure a static IP address on CentOS 7(CentOS7静态IP地址设置)

    Question: On CentOS 7, I want to switch from DHCP to static IP address configuration with one of my ...

  6. MySQL的简单查询语句

    查询: 一:查询所有数据 select * from Info 查所有数据 select Code,Name from Info 查特定列 二:根据条件查 select * from Info whe ...

  7. 【openresty】获取post请求数据FormInputNginxModule模块

    关于openresty的一些介绍看这里. 首先,实验背景为openresty作为后台来处理前台post传递的数据. 在openresty内,有一个FormInputNginxModule模块,作用是解 ...

  8. java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory的解决(碰到问题,转载答案)

    自己前一段时间出现了这个问题,通过在网上搜索,大概知道了原因,整理下一,以供大家参考. 将项目部署好后,启动tomcat后报错,java.lang.NoClassDefFoundError: org/ ...

  9. JVM常量池

    常量池(constant_pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据.它包括了关于类.方法.接口等中的常量,也包括字符串常量和符号引用.运行时常量池是方法区的一部分 ...

  10. Java 压缩字符串

    1.引言 最近在做项目中,平台提供一个http服务给其他系统调用,然后我接收到其他系统的json格式的报文后去解析,然后用拿到的数据去调用corba服务,我再把corba的返回值封装完成json字符串 ...