一、前言

居中效果在CSS中很是普通的效果,平时大家所看到的居中效果主要分为三大类:水平居中、垂直居中和水平垂直居中。而其中水平居中相对于后两者来说要简单得多。使用了css3的flexbox的属性轻松实现多行文本水平垂直居中的方法。当然大家有可能认为这些方法对于浏览嘎嘎的兼容性处理太麻烦了。

二、六种方法

常见的居中是固定宽度,加上margin: 0 auto。但是如果宽度不明确,我们也要尝试一下。

我们来实现一个分页容器

html

<div class="pagination">
<ul>
<li><a href="#">Prev</a></li>
<li><a href="#">1</a></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li><a href="#">Next</a></li>
</ul>
</div>

css

.pagination li{
line-height: 25px;
list-style: none;
display: inline;
float: left;
}
.pagination a{
text-decoration: none;
display: block;
color: #000;
padding: 0 10px;
border-radius: 2px;
border: 1px solid #F2F2F2;
background: #333;
}
.pagination a:hover{
background: orange;
}

展示:

 

1、方法一:margin和width实现

这个是最常见的方案:在容器上定义一个固定的宽度,然后配合margin左右的值为auto。

css

.pagination{
width: 340px;
margin: 0 auto;

}
.pagination li{
line-height: 25px;
list-style: none;
display: inline;
float: left;
}
.pagination a{
text-decoration: none;
display: block;
color: #000;
padding: 0 10px;
border-radius: 2px;
border: 1px solid #F2F2F2;
background: #333;
}
.pagination a:hover{
background: orange;
}

展示

效果实现了,扩展性不强,因为宽度无法确定,也就无法确定容器宽度。

优点:实现简单,浏览器兼容性强

缺点:扩展性差,无法自适应未知情况。

2、方法二:inline-block和父元素text-align

仅inline-block属性是无法让元素水平居中,他的关键之处要在元素的父容器中设置text-align的属性为“center”,这样才能达到效果:

body{
background: #000;
text-align: center;
}
.pagination{
margin-top: 50px;
display: inline-block;
}
.pagination li{
line-height: 25px;
list-style: none;
display: inline;
float: left;
}
.pagination a{
text-decoration: none;
display: block;
color: #000;
padding: 0 10px;
border-radius: 2px;
border: 1px solid #F2F2F2;
background: #333;
}
.pagination a:hover{
background: orange;
}

显示

这个方法也是比较简单易懂,inline-block解决了水平居中的问题,但是又有一个新的问题--空白间距,所以需要解决inline-block带来的间距。

优点:简单易懂,扩展性强

缺点:需要额外处理inline-block的浏览器兼容性问题

3、方法三:浮动实现水平居中

感到很意外,元素都浮动了,他还能水平居中?大家都知道,浮动要么靠左、要么靠右,还真少见有居中的。其实略加处理就有了。

body{
background: #000;
}
.pagination{
margin-top: 50px;
float: left;
width: 100%;

}
.pagination ul{
position: relative;
float: left;
left: 50%;

}
.pagination li{
line-height: 25px;
list-style: none;
display: inline;float: left;
position: relative;
right: 50%;

}
.pagination a{
text-decoration: none;
display: block;
color: #000;
padding: 0 10px;
border-radius: 2px;
border: 1px solid #F2F2F2;
background: #333;
}
.pagination a:hover{
background: orange;
}

展示:

没有浮动的div:大家都知道div是一个块元素,其默认的宽度就是100%,如图所示:

如果div设置了浮动之后,他的内容有多宽度就会撑开有多大的容器(除显式设置元素宽度值之外),这也是我们实现让分页导航居中的关键所在:

接下来使用传统的制作方法,我们会让导航浮动到左边,而且每个分页项也进行浮动,就如下图所示一样:

现在要想的办法是让分页导航居中的效果了,在这里是通过“position:relative”属性实现,首先在列表项“ul”上向右移动50%(left:50%;),看到如下图所示:

整个分页向右移动了50%的距离,紧接着我们在“li”上也定义“position:relative”属性,但其移动的方向和列表“ul”移动的方向刚好是反方向,而其移动的值保持一致:

这样一来就实现了float浮动居中的效果。

优点:兼容性强,扩展性强。

缺点:实现原理比较复杂

4、方法四:绝对定位实现

绝对定位实现水平居中,我想大家也非常的熟悉了,并且用得一定不少。

.ele {
position: absolute;
width: 宽度值;
left: 50%;
margin-left: -(宽度值/2);
}

但这种实现我们有一个难题,我并不知道元素的宽度是多少,这样也就存在如方法一所说的难题,但我们可以借助方法三做一点变通:

body{
background: #000;
margin-top: 50px;
}
.pagination ul{
position: absolute;
left: 50%;

}
.pagination li{
line-height: 25px;
list-style: none;
display: inline;
float: left;
position: relative;
right: 50%;

}
.pagination a{
text-decoration: none;
display: block;
color: #000;
padding: 0 10px;
border-radius: 2px;
border: 1px solid #F2F2F2;
background: #333;
}
.pagination a:hover{
background: orange;
}

展示:

优点:扩展性强,兼容性强;

缺点:理解性难。

5、方法五:css3的flex实现

能让我们的布局变得更加灵活与方便,唯一的就是目前浏览器的兼容性较差。那么第五种方法,我们就使用flex来实现。

body{
background: #000;
margin-top: 50px;
}
.pagination{
display: flex;
justify-content: center;

}
.pagination li{
line-height: 25px;
list-style: none;
display: inline;
float: left;
}
.pagination a{
text-decoration: none;
display: block;
color: #000;
padding: 0 10px;
border-radius: 2px;
border: 1px solid #F2F2F2;
background: #333;
}
.pagination a:hover{
background: orange;
}

展示:

优点:实现简单,扩展性强

缺点:兼容性差

6、方法六:css3的fit-content

“fit-content”是CSS中给“width”属性新加的一个属性值,他配合margin可以让我轻松的实现水平居中的效果:

body{
background: #000;
margin-top: 50px;
}
.pagination{
width: fit-content;
margin: 0 auto;

}
.pagination li{
line-height: 25px;
list-style: none;
display: inline;
float: left;
}
.pagination a{
text-decoration: none;
display: block;
color: #000;
padding: 0 10px;
border-radius: 2px;
border: 1px solid #F2F2F2;
background: #333;
}
.pagination a:hover{
background: orange;
}

展示:

优点:简单易懂,扩展性强

缺点:浏览器兼容性差

三、参考

1、http://www.w3cplus.com/css/elements-horizontally-center-with-css.html

【css系列】六种实现元素水平居中方法的更多相关文章

  1. <转载>使CSS文字图片div元素居中方法之水平居中的几个方法

    文字居中,文字垂直居中水平居中,图片居中,图片水平居中垂直居中,块元素垂直居中?当我们在做前端开发是时候关于css居中的问题是很常见的.情 况有很多种,不同的情况又有不同的解决方式.水平居中的方式解决 ...

  2. CSS/CSS3 如何实现元素水平居中

    更新:可直接访问 [CSS/CSS3 如何实现元素水平居中] 查看效果,右键查看源代码 -------------------------------------------------分割线---- ...

  3. css点滴2—六种方式实现元素水平居中

    本文参考文章<六种方式实现元素水平居中> 元素水平居中的方法,最常见的莫过于给元素一个显式的宽度,然后加上margin的左右值为auto.这种方式给固定宽度的元素设置居中是最方便不过的.但 ...

  4. 深入理解脚本化CSS系列第六篇——脚本化伪元素的6种方法

    × 目录 [1]动态样式 [2]CSS类[3]setAttribute()[4]CSSRule对象添加[5]空样式覆盖[6]CSSRule对象删除 前面的话 我们可以通过计算样式来读取伪元素的样式信息 ...

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

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

  6. 顽石系列:CSS实现垂直居中的五种方法

    顽石系列:CSS实现垂直居中的五种方法 在开发过程中,我们可能沿用或者试探性地去使用某种方法实现元素居中,但是对各种居中方法的以及使用场景很不清晰.参考的内容链接大概如下: 行内元素:https:// ...

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

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

  8. CSS元素垂直居中方法总结

    坚持,坚持,坚持... 以上为自我鼓励,哈哈... ------------------------------------------------- 相信没有真正是尝试过的人应该都和我一样,觉得居中 ...

  9. CSS布局:元素水平居中

    CSS布局之元素水平居中 本文将依次介绍在不同条件下实现水平居中多种方法 一.使用 text-align: center : 适用于块级元素内部的行内元素水平居中(也适用于图片的水平居中) 此方法对i ...

随机推荐

  1. 亿方云(用电话或者qq沟通是远远不够的,容易忘还不能反复催,最好的方式就是指定一个平台,团队内的人定期查看最新记录)

    作者:城年链接:http://www.zhihu.com/question/20579359/answer/106319200来源:知乎著作权归作者所有,转载请联系作者获得授权. 更新,文字发完后,好 ...

  2. Ural_1169_Pairs

    此题略坑... 思路:把N个点分成m若干个联通子图,然后用m-1个桥把这m个联通子图连接起来即可. 若每个联通子图内部都是完全图也符合题意,但答案却是Wrong Answer,只有把每个联通子图内部当 ...

  3. C语言实现常用数据结构——链表

    #include<stdio.h> #include<stdlib.h> typedef struct Node { int data; struct Node *next; ...

  4. top命令的使用

    原地址:https://mp.weixin.qq.com/s/DVX86UgZDiTspVe497KKWw

  5. 从理论到实践,全方位认识HTTP/2

    前言   为了降低加载时间,相信大多数人都做过如下尝试   - Keep-alive: TCP持久连接,增加了TCP连接的复用性,但只有当上一个请求/响应完全 完成后,client才能发送下一个请求 ...

  6. 曹工说Tomcat4:利用 Digester 手撸一个轻量的 Spring IOC容器

    一.前言 一共8个类,撸一个IOC容器.当然,我们是很轻量级的,但能够满足基本需求.想想典型的 Spring 项目,是不是就是各种Service/DAO/Controller,大家互相注入,就组装成了 ...

  7. MySQL 全文索引实现简单版搜索引擎

    目录 前言 使用 三种类型的全文搜索方式 相关参数 测试innodb引擎使用全文索引 准备 使用默认方式创建全文索引 使用ngram分词解析器创建全文索引 结论 前言 只有Innodb和myisam存 ...

  8. 微信小程序在ios下Echarts图表不能滑动的解决方案

    问题现象 这个问题的现象说起来很简单. 小程序页面中有一篇很长的文章,内部有一个Echarts图表,手指上下滑动观看内容. 但是手指滑动区域在Echarts图表上时,页面却不能滑动了. 如下图: 追踪 ...

  9. 微服务-springcloud学习资料链接

    API文档:https://springcloud.cc/spring-cloud-dalston.html#_spring_cloud_netflix 中文社区:http://springcloud ...

  10. Codeforces Gym100502A:Amanda Lounges(DFS染色)

    http://codeforces.com/gym/100502/attachments 题意:有n个地点,m条边,每条边有一个边权,0代表两个顶点都染成白色,2代表两个顶点都染成黑色,1代表两个顶点 ...