CSS(Cascading Style Sheets)层叠样式表,是在1996年左右,W3C(万维网联盟)做HTML标准化的同时在HTML4.0之外开发的,拯救了当时越来越臃肿杂乱的HTML。

本文将按照由简单至复杂的顺序,展示在固定宽高的父容器中,实现单个子元素垂直水平居中的9种方式。

首先的HTML<body>部分都是<div>包含一个<p>:

<div class="box"><p>I'm Centered</p>
</div>

为了方便观察,CSS部分默认给<div>加了固定宽高和边框,给<p>加了底色:

.box {width: 300px;height: 200px;border: 1px solid;
}
p {background: lightblue;
}

此时<p>是默认的块级盒子,撑满了内容所在的一整行:

默认效果,未居中,p标签没到顶是因为自带了外边距
要达到的效果

途径一:使用grid布局

  1. 父容器设置 align-items justify-itemscenter ,这个很好理解
.box {width: 300px;height: 200px;border: 1px solid;display: grid;align-items: center;justify-items: center;
}
p {background: lightblue;
}

2. 同样的,也可以把 justify-items 属性换成 justify-content ,效果是一样的

.box {width: 300px;height: 200px;border: 1px solid;display: grid;align-items: center;justify-content: center;
}
p {background: lightblue;
}

但它和上一条方法的实现方式略有差别,justify-content 会把子元素所在网格收缩到内容所撑开的宽度,而 justify-items 会把网格撑满父容器:

justify-content下的网格仅到达内容的宽度
justify-items下的网格撑满父容器

3. 直接在子元素上加 margin: auto; 应该是最简便的方法了,利用子元素的外边距撑满父容器

.box {width: 300px;height: 200px;border: 1px solid;display: grid;
}
p {background: lightblue;margin: auto;
}

途径二:使用flex布局

4. flex布局的方法和grid很像,但是flex布局中没有 justify-items ,所以只能用 justify-content

.box {width: 300px;height: 200px;border: 1px solid;display: flex;align-items: center;justify-content: center;
}
p {background: lightblue;
}

5. 同样的,也可以在子元素上加 margin: auto;

.box {width: 300px;height: 200px;border: 1px solid;display: flex;
}
p {background: lightblue;margin: auto;
}

途径三:使用table-cell布局

6. table-cell布局表现像一个表格的单元格,父容器中加上 vertical-align 垂直居中和文字 text-align 水平居中就是垂直水平居中啦

.box {width: 300px;height: 200px;border: 1px solid;display: table-cell;vertical-align: middle;text-align: center;
}
p {background: lightblue;
}

但是这时候会发现一个问题,我们设置的底色却还是达到了父容器的左右两端:

底色未居中

如果对底色水平居中也有要求,可以把子元素转换为内联盒子 inline-block

.box {width: 300px;height: 200px;border: 1px solid;display: table-cell;vertical-align: middle;text-align: center;
}
p {background: lightblue;display: inline-block;
}

途径四:使用绝对定位

7. 子元素设置绝对定位,参考点是父容器,通过 left top 定位到靠中间的位置

.box {width: 300px;height: 200px;border: 1px solid;position: relative;
}
p {background: lightblue;position: absolute;left: 50%;top: 50%;
}

定位后的位置,明显不在中心

接着移动子元素,向上向左各一半自己的高度和宽度

.box {width: 300px;height: 200px;border: 1px solid;position: relative;
}
p {background: lightblue;position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);
}

移动后,看起来水平居中了,但是垂直还差一点

还记得默认效果中<p>为什么没到顶吗?是的它的外边距又来捣乱了,我们把它取消掉就可以完全居中啦

.box {width: 300px;height: 200px;border: 1px solid;position: relative;
}
p {background: lightblue;position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);margin: 0;
}

途(sǐ)径(lù)五:不推荐

8. 父容器设置文字水平居中,然后通过伪元素追加一个父容器高度的行高,最后子元素还要转换为内联盒子。或者行高加在父容器或子元素中,此时子元素要转为行内元素或取消外边距才行。由于过于复杂不推荐,故只展示一种情况的代码

.box {width: 300px;height: 200px;border: 1px solid;text-align: center;
}
.box::after {content: '';line-height: 200px;
}
p {background: lightblue;display: inline-block;
}

9. 体现CSS魅力的时候到了(雾

.box {width: 300px;height: 200px;border: 1px solid;position: relative;
}
p {background: lightblue;width: 100px;height: 40px;position: absolute;top: 0;bottom: 0;left: 0;right: 0;margin: auto;
}

这种情况必须要给子元素设置宽高,仿佛所有的属性都是给底色围起来的框框设置的……肉眼可见效果并不好,而且代码繁琐。它存在的意义就是,当你考古时偶然遇到了,让你知道前辈费劲巴力写下的代码,其实就是想实现一个居中的效果……

你看出它偏了吗?

总结

前面的方法肯定是现在在用的大部分,眼熟后几种也不至于遇到就一脸萌逼:P


参考文献
1. 饥人谷 - 居中的多种实现
2. w3school - CSS 简介

h5文字垂直居中_CSS实现居中的几种方式你都了解吗?相关推荐

  1. h5文字垂直居中_CSS居中的常用方式以及优缺点

    前言 居中是页面开发中经常遇到的问题. 使用合适的.简单的.兼容性好的居中方式是我们页面仔在整个工作生涯中都要面对的问题. text-align:center 来看这个例子,一张图片和文字进行居中.如 ...

  2. h5文字垂直居中_CSS中垂直居中和水平垂直居中的方法

    flex垂直居中: 第一种:使用flex布局,让居中元素的父元素为flex属性,让它在交叉轴上center就可以达到居中效果了: html代码: <div class="father& ...

  3. 图文对齐居中的几种方式

    总结图文居中的几种方式 1.方法一 css #target{ width: 150px; border:1px purple solid; line-height: 40px; text-indent ...

  4. CSS元素上下左右居中的几种方式

    CSS元素上下左右居中的几种方式 假设以以下父子元素实现上下左右居中为例: <div class='father'><div class='son'></div> ...

  5. input文字垂直居中_CSS的带文字居中分析

    CSS居中的方法有特别多,这里只介绍最基本的方法. CSS中分块级元素和内联元素,但是块级元素或者内联元素都可以设置display,最常用的三种display--inline.block.inline ...

  6. text文字垂直居中_CSS垂直居中,你会多少种写法?

    来源 | https://wintc.top/article/4 CSS控制居中是前端开发中非常常用的布局技能,本文列出几种CSS控制元素居中的几种方法.谈及HTML元素居中展示,涉及到水平居中和垂直 ...

  7. h5文字垂直居中_基于两款开源 h5 媒体编辑器定制一套海报系统

    收到一份需求,是要制作一套在线海报系统,系统的参考样例如下图所示 分为资源展示站 海报的设计工具 这种平台现在市场上成功的有好多家,功能都较为完备并且模板十分丰富.这种需求往大了做可以称之为 DaaS ...

  8. h5文字垂直居中_PS教程:巧用自由变换,制作折纸文字效果

    本期教学视频链接附在文末.(每期的图文教程都有相关视频教程,图文结合视频,学习效果更好哦) 文字的PS世界也是很丰富的,之前出了多期特殊字效设计的教程,大家还是很感兴趣的,本期教程我们来学习制作另一种 ...

  9. latex 表格单元格上下左右居中_Excel文字对齐技巧:学会这6种方式,快速整理规范表格...

    [温馨提示]亲爱的朋友,阅读之前请您点击[关注],您的支持将是我最大的动力! Excel制作表格中,文字在单元格内对齐的方式,我们经常用到的有居中对齐.居右对齐.居左对齐,对过这些对齐方式,可以编辑出 ...

最新文章

  1. 报错解决:InvalidArgumentError: Can not squeeze dim[1], expected a dimension of 1, got
  2. 添加时间数据时 出现多一天或者少一天的问题 解决方案
  3. 世界级数学大牛来了!2002年菲尔兹奖得主加盟华为
  4. 岳阳机器人餐厅在哪_从机器人咖啡看未来餐饮行业大方向,如何才能活下去?...
  5. Android之 AndroidManifest xml 文件解析
  6. 【废弃】【WIP】JavaScript 函数
  7. pythone 打开文件 一行_【精品资料】用了这么多年单片机的Hex文件不懂?看这篇就够了...
  8. SQL server 2016 安装步骤
  9. Python教程:自定义排序全套方案
  10. UVA-714 二分
  11. 访问List的itemRenderer的组件中定义的方法
  12. WordPress疑难问题以及解决方案汇总
  13. Lucene 的索引文件锁原理
  14. 《应用时间序列分析:R软件陪同》——2.11 习题
  15. JavaScript下载文件到本地的方法总结
  16. 显卡属于计算机主机还是外设,计算机硬件组成及作用有哪些
  17. 舞魔金星[读书笔记]
  18. [Linux]关于SIGCHLD
  19. 【情报工具】分享15款保护隐私的搜索引擎
  20. 华为自带邮箱下载_超级好看的微信气泡主题设置方法介绍教程!仅华为用户拥有!...

热门文章

  1. MySQL入门之事件
  2. HTML作业-潮流服装网页
  3. android旋转屏幕 简册,[Android][旋转屏幕]
  4. QScrollArea 详解
  5. c语言圆周率计算_C语言入门这一篇就够了
  6. 年龄到底怎么算才对_如意甘霖vs嘉和保,到底谁才是最佳男性重疾险
  7. (王道408考研操作系统)第二章进程管理-第三节10:经典同步问题之哲学家进餐问题
  8. Linux系统编程33:进程信号之详解信号的捕捉过程,用户态和内核态及其切换,sigaction和signal
  9. 谈谈地址转换协议ARP的概念及特点
  10. 冯诺依曼计算机的组成