一 仅水平居中

1 行内元素

1)给父元素添加 text-align:center 即可
  1. <div class="parent">
  2. <span class="child">我是子元素</span>
  3. </div>
  4. .parent {
  5. width: 200px;
  6. background-color: red;
  7. text-align: center;
  8. }
  9. .child {
  10. background-color: green;
  11. }

效果:

2)父元素添加 width:fit-content; 和 margin:auto 。
  1. DOM结构不变。
  2. .parent {
  3. width: fit-content;
  4. margin: auto;
  5. background-color: red;
  6. }
  7. .child {
  8. background-color: green;
  9. }

效果:

2 块级元素

1)子元素加 margin:0 auto
  1. <div class="parent">
  2. <div class="child">我是子元素</div>
  3. </div>
  4. .parent {
  5. background-color: red;
  6. }
  7. .child {
  8. margin: 0 auto;
  9. background-color: green;
  10. width: 100px;
  11. text-align: center;
  12. }

效果:

二 仅垂直居中

1 行内元素

1)line-height与height值保持一致即可【仅对单行文本生效】。
  1. .parent {
  2. background-color: red;
  3. height: 200px;
  4. line-height: 200px;
  5. }
  6. .child {
  7. background-color: green;
  8. }

效果:

三 水平、垂直均居中

1 块级元素

1)"子绝【绝对absolute】父相【相对relative】"。

条件:必须知道 子元素的宽、高。

  1. <div class="parent">
  2. <div class="child">我是子元素</div>
  3. </div>
  4. 【Tip:以下均是这个DOM结构】
  5. .parent {
  6. background-color: red;
  7. width: 200px;
  8. height: 300px;
  9. position: relative;
  10. }
  11. .child {
  12. background-color: green;
  13. width: 100px;
  14. height: 200px;
  15. position: absolute;
  16. /* 50%是基于父元素的 高度,100px是 子元素高度 的一半 */
  17. top: calc(50% - 100px);
  18. /* 50%是基于父元素的 宽度,50px是 子元素宽度 的一半 */
  19. left: calc(50% - 50px);
  20. }

效果:

2)定位 + transform 。
  1. .parent {
  2. background-color: red;
  3. width: 200px;
  4. height: 300px;
  5. position: relative;
  6. }
  7. .child {
  8. background-color: green;
  9. position: absolute;
  10. /* 下面2个50%,使得子元素的左上角点在父元素的正中心了 */
  11. top: 50%;
  12. left: 50%;
  13. /* 下面2个-50%【分别以子元素的宽、高为基准】,平移后便在父元素的正中间了 */
  14. transform: translate(-50%, -50%);
  15. }

效果:

3)定位 + margin 。
  1. .parent {
  2. background-color: red;
  3. width: 200px;
  4. height: 300px;
  5. position: relative;
  6. }
  7. .child {
  8. background-color: green;
  9. /* 这里的 width、height 要设值,不然子元素可能会填满父元素 */
  10. width: 100px;
  11. height: 200px;
  12. /* 原理:子元素就会填充父元素的所有可用空间,所以,在水平垂直方向上,就有了可分配的空间 */
  13. position: absolute;
  14. top: 0;
  15. bottom: 0;
  16. left: 0;
  17. right: 0;
  18. margin: auto;
  19. }

效果:

若子元素的宽、高都注释掉,效果就不明显了,子元素会充满父元素:

4)父元素设置 padding 值。
  1. .parent {
  2. background-color: red;
  3. padding: 10px 20px;
  4. }
  5. .child {
  6. background-color: green;
  7. }

效果:

5)父元素 display:flex 。
  1. .parent {
  2. background-color: red;
  3. width: 200px;
  4. height: 300px;
  5. display: flex;
  6. /* 水平居中 */
  7. justify-content: center;
  8. /* 垂直居中 */
  9. align-items: center;
  10. }
  11. .child {
  12. background-color: green;
  13. }

效果:

6)父元素为 table-cell 布局。
  1. <div class="parent">
  2. <!-- span比div效果明显 -->
  3. <span class="child">我是子元素</span>
  4. </div>
  5. .parent {
  6. background-color: red;
  7. width: 200px;
  8. height: 300px;
  9. /* display: table-cell 将parent模拟成一个表格单元格【td标签】 */
  10. display: table-cell;
  11. /* 水平居中 */
  12. text-align: center;
  13. /* 垂直居中 */
  14. vertical-align: middle;
  15. }
  16. .child {
  17. background-color: green;
  18. }
7)其他的也可以实现,但是可能适用性、理解难度较大,所以暂时不列出~

四 总结

1 思维导图【方便记忆~】:

2 本文章只是简单说了实操部分,它们更深入的原理没有讲解,大家感兴趣的话可以自己私底下去搜索相关资料 或 底下评论与交流~

五 更多

1)本人是20届本科生,大厂、创业公司都待过,现在是BAT的1名前端工程师(目前正往“全栈”方向发展,已开始写公司里的部分后端代码~)。
2)以下是个人整理的一些笔记和书籍(永久有效链接: https://pan.baidu.com/s/1SPc3umO6cZlBtoPylSaHzw 密码: eqee ,若失效的话可以到vx公众号 “码农三少” 回复 pdf 以进行最新资料的获取):

(前端)面试300问之(2)CSS元素居中【水平、垂直、2者同时居中】的更多相关文章

  1. 前端读者 | 前端面试基础手册(HTML+CSS)

    本文来自@羯瑞:希望前端面试基础手册能帮助要找工作的前端小伙伴~~ HTML 前端需要注意哪些SEO? 合理的title.description.keywords:搜索对着三项的权重逐个减小,titl ...

  2. 解读CSS布局之-水平垂直居

    对一个元素水平垂直居中,在我们的工作中是会经常遇到的,也是CSS布局中很重要的一部分,本文就来讲讲CSS水平垂直居中的一些方法.由于我们大搜车的日常工作中已经不再需要理会低版本IE,所以本文所贴出的方 ...

  3. Web前端面试指导(十九):CSS样式-如何清除元素浮动?

    题目点评 本题属于比较常问的题目,也是在网页设计中经常遇到的问题,面试官希望通过这样的面试题来了解你对网页设计的基本功底,如果这样的题目答不出来,必会让面试官大失所望,面试成功的概率是非常小的. 答题 ...

  4. (前端)面试300问之(3)this的指向判断

    一.this的相关理解与解读 1.各角度看this. 1)ECMAScript规范: this 关键字执行为当前执行环境的 ThisBinding. 2)MDN: In most cases, the ...

  5. 前端面试经典题目(HTML+CSS)二

    1.浏览器页面由哪三层构成,分别是什么,作用是什么? 构成:结构层.表示层.行为层 分别是:HTML.CSS.JavaScript 作用:HTML实现页面结构,CSS完成页面的表现与风格,JavaSc ...

  6. Web前端面试指导(十五):CSS样式-display有哪些作用?

    题目点评 其实就是要你说清楚该属性有哪些值,每个值都有什么作用,这个题目可以答得很简单,但要答全也并非是一件容易的事情. 元素默认的display值的情况如下(这个一般很少人注意这一点) block( ...

  7. 前端面试:问到GET和POST两种区别

    最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. "标准答案"(本标准答案参考自w3schools): GET在浏览器回退时是无害的,而P ...

  8. 确保安全的HTTPS(对HTTP加密的几种技术,前端面试常问)第一篇

    HTTP固然足够好,但是在安全方面有着很大隐患: 1.与服务器进行通信使用的是明文,内容可能会被窃听(HTTP协议本身并不具备加密功能,所以无法对请求和响应的内容进行加密) 2.使用HTTP协议的服务 ...

  9. 确保安全的HTTPS(使用混合加密的HTTPS,前端面试常问)第二篇

    苹果已经确定,在iOS9中通信机制采用HTTPS了. 第一篇:http://www.cnblogs.com/ziyi--caolu/p/4742577.html 上一篇详细介绍了为什么要对HTTP进行 ...

随机推荐

  1. Python内置高阶函数map()

    map()函数map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回. 例如,对于lis ...

  2. C#开发BIMFACE系列50 Web网页中使用jQuery加载模型与图纸

    BIMFACE二次开发系列目录     [已更新最新开发文章,点击查看详细] 在前一篇博客<C#开发BIMFACE系列49 Web网页集成BIMFACE应用的技术方案>中介绍了目前市场主流 ...

  3. PTA数据结构 习题2.1 简单计算器 (20分)

    习题2.1 简单计算器 (20分) 模拟简单运算器的工作.假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算. 输入格式: 输入在一行中给出一个四则运算 ...

  4. 更好的 java 重试框架 sisyphus 背后的故事

    sisyphus 综合了 spring-retry 和 gauva-retrying 的优势,使用起来也非常灵活. 今天,让我们一起看一下西西弗斯背后的故事. 情景导入 简单的需求 产品经理:实现一个 ...

  5. C++ 与 Visual Studio 2019 和 WSL

    Visual Studio 使用 C++ 的 Linux 开发(WSL) https://devblogs.microsoft.com/cppblog/c-with-visual-studio-201 ...

  6. python socket zmq

    本篇博客将介绍zmq应答模式,所谓应答模式,就是一问一答,规则有这么几条 1. 必须先提问,后回答 2. 对于一个提问,只能回答一次 3. 在没有收到回答前不能再次提问 上代码,服务端: #codin ...

  7. 【原创】浅谈指针(五)const和指针

    前言 过了几个月再次更新.最近时间也不多了,快要期中考试了,暂且先少写一点吧. 本文仅在博客园发布,如在其他平台发现均为盗取,请自觉支持正版. 练习题 我们先来看几道题目.如果这几道题都不会的话,就先 ...

  8. k8s replicaset controller分析(2)-核心处理逻辑分析

    replicaset controller分析 replicaset controller简介 replicaset controller是kube-controller-manager组件中众多控制 ...

  9. 974.和可被K整除的子数组

    题目 给定一个整数数组 A,返回其中元素之和可被 K 整除的(连续.非空)子数组的数目. 示例: 输入:A = [4,5,0,-2,-3,1], K = 5 输出:7 解释: 有 7 个子数组满足其元 ...

  10. [no code][scrum meeting] Alpha 15

    项目 内容 会议时间 2020-04-23 会议主题 OCR紧急会议 会议时长 45min 参会人员 PM + OCR组(赵涛,黎正宇) 项目 内容 会议时间 2020-04-24 会议主题 全体测试 ...