html 怎么使用css居中,用CSS实现元素居中的N种方法

网页布局中,元素水平居中比垂直居中简单不少,同时实现水平垂直居中也不难,难的是想出多种实现水平垂直居中的方法并从中挑选最合适最容易理解的那一个完成我们的项目。

现在是响应式设计的时代,大多数情况下我们并不知道用户浏览器尺寸,也没有办法计算元素准确的宽高等,所以将宽高等属性值固定为某个具体的px不可行。

以下是实现元素居中的几种实用方法:

1 . line-height大法好

单行文本垂直居中

如果一个标签没有定义height属性,那么其最终表现的告诉一定是由line-height起作用。网上大多说把line-height值设置为height一样的可实现单行文字的垂直居中。这句话确实是正确的,但这个height是多余的。

示例代码:为了方便大家看,我给body加了一个边框。

body{

border: 10px solid black;

}

p {

line-height: 50px;

background: red;

}

单行文本垂直居中

4c4974ea096e

效果图1-1

多行文本垂直居中

(1)对于高度不固定的文本,设置文本垂直居中直接使用padding就行。

4c4974ea096e

效果图1-2-1

(2)对于高度固定的文本,里面的文字单行或多行显示,字体有大有小,要怎么实现垂直居中呢?

p {

line-height: 400px;

border: 10px solid black;

}

span {

background: red;

display: inline-block;

line-height: 1.4em;

vertical-align: middle;

}

i{

width: 0;

display: inline-block;

vertical-align: middle;

font-size: 0;

}

多行文本垂直居中,多行文本垂直居中,多行文本垂直居中,

多行文本垂直居中,多行文本垂直居中,多行文本垂直居中,
多行文本垂直居中,多行文本垂直居中,多行文本垂直居中,

多行文本垂直居中,多行文本垂直居中,多行文本垂直居中,多行文本垂直居中,多行文本垂直居中,多行文本垂直居中,&nbsp

4c4974ea096e

效果图1-2-2

去掉i元素,得到的效果也是相同的,所以这里有一点疑惑,先mark一下,待日后弄懂了回来补充。

一张图片水平垂直居中

p {

border: 10px solid black;

line-height: 400px;

text-align: center;

}

img {

vertical-align: middle;

}

![](http://upload-images.jianshu.io/upload_images/6851923-1d0bad137381a9be.jpg!qt290?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

4c4974ea096e

效果图1-3-1

a {

border: 10px solid black;

display: inline-block;

text-align: center;

vertical-align: middle;

}

img {

vertical-align: middle;

padding: 10px;

margin: 10px;

}

![](http://upload-images.jianshu.io/upload_images/6851923-71abf5d916e8379c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

4c4974ea096e

效果图3-1-2

多图水平垂直居中(题外话,与line-height无关)

html代码:

![](http://upload-images.jianshu.io/upload_images/6851923-71abf5d916e8379c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![](http://upload-images.jianshu.io/upload_images/6851923-ffe49441b8fbdde9.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![](http://upload-images.jianshu.io/upload_images/6851923-26782d6438e7bd4e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![](http://upload-images.jianshu.io/upload_images/6851923-1d0bad137381a9be.jpg!qt290?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![](http://upload-images.jianshu.io/upload_images/6851923-474e68348e2a0572.gif?imageMogr2/auto-orient/strip)

CSS代码:

p {

background: yellow;

width: 1em;

height: 1em;

padding: 0.1em;

margin: 0.1em;

font-size: 280px;

float: left;

}

img {

display: block;

width: 100%;

height: 100%;

background-repeat: no-repeat;

background-position: center;

}

4c4974ea096e

效果图

2 . text-align: center; ——给行内元素的父元素设置此样式使得行内元素水平垂直居中

p {

border: 10px solid black;

text-align: center;

}

这是一段文本

4c4974ea096e

效果图2

3 . 块级元素水平居中margin: 0 auto;

p {

border: 10px solid black;

}

img {

display: block;

width: 33%;

margin: 0 auto;

}

![](http://upload-images.jianshu.io/upload_images/6851923-1d0bad137381a9be.jpg!qt290?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

4c4974ea096e

效果图3

4 . position & translate——绝对定位 & 偏移 实现水平垂直居中。

绝对定位元素的水平垂直居中

关键点:上下左右皆为0,margin为auto。

div{

border: 10px solid black;

width: 600px;

height: 400px;

position: absolute;

top: 0;

right: 0;

bottom: 0;

left: 0;

margin: auto;

}

4c4974ea096e

效果图4-1

绝对定位元素的水平垂直居中-偏移法:

关键点:left和top相对父元素,translate相对于自身。

p{

position: absolute;

background: red;

width: 200px;

height: 200px;

left: 50%;

top: 50%;

transform: translate(-50%,-50%);

}

4c4974ea096e

效果图4-2

5 . display: table-cell;

关键点:需要添加额外元素作为外部容器,需要实现垂直居中的元素与其父元素都要设置vertical-align: middle;不然不能实现垂直居中。

* {

padding: 0;

margin: 0;

}

.center-aligned{

display: table;

background: #00a0ea;

width: 100%;

height: 300px;

}

.center-core{

display: table-cell;

text-align: center;

vertical-align: middle;

}

.center-core img{

width: 40%;

vertical-align: middle;

height: auto;

}

![](http://upload-images.jianshu.io/upload_images/6851923-1d0bad137381a9be.jpg!qt290?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

4c4974ea096e

效果图6

6 . display: flex;模型实现水平垂直居中

关键点:容器获得display:flex;属性,其他所有特性定义也都在容器元素內进行。

html代码如下:

设置基础样式:

* {

padding: 0;

margin: 0;

}

#item-container {

display: flex;

background: yellow;

}

.circle {

background: black;

width: 100px;

height: 100px;

border-radius: 50%;

}

.square {

background: #cdcdcd;

width: 150px;

height: 150px;

}

4c4974ea096e

效果图6-1

水平居中:

#item-container {

justify-content: center;

}

4c4974ea096e

效果图6-2

两端对齐:(玩一下)

#item-container {

justify-content: space-between;

}

4c4974ea096e

效果图6-3

垂直居中:

#item-container {

align-items: center;

heigh: 200px;

}

4c4974ea096e

效果图6-4

7 . calc()——适合内容宽高为固定尺寸的场景

关键点:top: 50%;left: 50%只是将p的左上角移到了div的中心点,要实现两个中心点重合,需要得到p自身宽高的一半。

* {

padding: 0;

margin: 0;

}

div {

background: green;

position: relative;

min-height: 400px;

}

p {

background: red;

position: absolute;

width: 200px;

height: 200px;

top: calc(50% - 200px/2);

left: calc(50% - 200px/2);

}

4c4974ea096e

效果图7

参考资料:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值