在写布局的时候我们常常会遇到要实现水平垂直居中,以下我简要的总结以下:

水平方向居中

先来个总结的思维导图


1.)是不是行级元素(像text link 等)
可以通过在父元素设置text-align:center来弄成水平居中。

这种办法对inline,inline-block,inline-table等元素都有效果.

2.)是不是块级元素
可以通过margin-left:auto和margin-right:auto来实现居中效果,这要求必须有宽度(要不然变成占整个行的宽度了).
代码和效果如下:


3.)是否是多余1个的块级元素
如果想要使2个或多个的块级元素变成水平居中有一下两个方法

  • 变成inline-block元素,然后通过text-align的方式去实现
  • 通过flex布局的justify-content来实现
  • 如果是垂直排列可以通过margin:0 auto 来实现
<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>
body {background: #f06d06;font-size: 80%;
}main {background: white;margin: 20px 0;padding: 10px;
}main div {background: black;color: white;padding: 15px;max-width: 125px;margin: 5px;
}.inline-block-center {text-align: center;
}
.inline-block-center div {display: inline-block;text-align: left;
}.flex-center {display: flex;justify-content: center;
}

效果如下:

如果块级元素是垂直摆放的,也可以通过margin:0 auto来实现.

<main><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>
body {background: #f06d06;font-size: 80%;
}main {background: white;margin: 20px 0;padding: 10px;
}main div {background: black;margin: 0 auto;color: white;padding: 15px;margin: 5px auto;
}main div:nth-child(1) {width: 200px;
}
main div:nth-child(2) {width: 400px;
}
main div:nth-child(3) {width: 125px;
}

效果如下:

垂直方向上居中

1.)是行内元素吗?
1.1)是单行元素吗?
有时候可以通过调整padding来实现垂直居中,我们可以设置padding-top,padding-bottom一样来实现垂直方向的居中

<main><a href="#0">We're</a><a href="#0">Centered</a><a href="#0">Bits of</a><a href="#0">Text</a>
</main>
body {background: #f06d06;font-size: 80%;
}main {background: white;margin: 20px 0;padding: 50px;
}main a {background: black;color: white;padding: 40px 30px;text-decoration: none;
}

效果如下:

如果padding不是一个选项的话,并且你知道不是换行的话,可以通过line-height来实现,当line-height 和 height一样高的时候,显得垂直居中。

<main><div>I'm a centered line.</div>
</main>
body {background: #f06d06;font-size: 80%;
}main {background: white;margin: 20px 0;padding: 40px;
}main div {background: black;color: white;height: 100px;line-height: 100px;padding: 20px;width: 50%;white-space: nowrap;
}

效果如下:

1.2)是不是多行?

<div class="flex-center"><p>I'm vertically centered multiple lines of text in a flexbox container.</p>
</div>
body {background: #f06d06;font-size: 80%;
}div {background: white;width: 240px;margin: 20px;
}.flex-center {background: black;color: white;border: 10px solid white;display: flex;flex-direction: column;justify-content: center;height: 200px;resize: vertical;overflow: auto;
}
.flex-center p {margin: 0;padding: 20px;
}

效果如下;

2.)是不是块级元素
2.1)是否知道高度
如果知道高度,可以首先通过top:50%来实现子元素上边距相对于父元素的50%,然后再通过margin-top:-50px(也就是子元素高度的一半)来实现子元素的垂直居中。

2.2)是否不知道高度
不知道具体高度的情况下,可以通过transform:translatey(-50%)来实现垂直方向的移动自己本身元素的一半高度.

2.3)能否可以使用flexbox

水平垂直居中


1.)不知道水平垂直居中的元素的宽度,高度
看以下一个例子:

<body><div id="container"><div id="box">和我哦好烦阿里发货咖啡阿卡交话费哈佛好可怜发</div></div></body>
/* 通过transform来实现,当不知道宽度的时候 */#container{width: 400px;height: 400px;border: 1px solid red;position: relative;}#box{width: 100px;border: 1px solid red;position: absolute;top:50%;left: 50%;transform: translate(-50%,-50%);}

上面方法的关键是transform,因为我们不知道我们所要水平垂直居中的元素的大小,因此只能通过百分比来.

2.知道水平垂直居中元素的具体宽度和高度

<div id="container"><div id="box"></div>
</div>
/* 通过margin来实现 *//* #container{width: 400px;height: 400px;border: 1px solid red;position: relative;}#box{width: 100px;height: 100px;border: 1px solid red;position: absolute;top:50%;left: 50%;margin: -50px 0 0 -50px;} */

因为知道所要设置的元素的宽度和高度,因此可以通过使margin移动所宽度和高度的一半大小来实现.

3.可不可以使用flex-box

<div id="container"><div id="box"></div>
</div>
#container{width: 400px;height: 400px;border: 1px solid red;display: flex;justify-content: center;align-items: center;}#box{width: 100px;height: 100px;border: 1px solid red;}

可以通过设置justify-content,align-items来实现我们的目标.

参考:点击链接

如何实现水平,垂直,水平垂直居中相关推荐

  1. div+css实现水平/垂直/水平垂直居中超详解

    目录 一.水平居中 1.块级元素水平居中 方法一:设置margin:0 auto 方法二:设置flex布局 方法三:设置css3的transform 2.行内元素水平居中 行内元素在块级元素中水平居中 ...

  2. Python-OpenCV图像水平/垂直/水平垂直翻转

    import cv2img = cv2.imread('cv2.flip().jpg') h_flip = cv2.flip(img, 1) # 水平翻转 v_flip = cv2.flip(img, ...

  3. css水平垂直居几种方式总结

    1.水平对齐+行高 [方式1]text-align + line-height实现单行文本水平垂直居中 <style>.f1 .test {text-align: center;line- ...

  4. 水平+垂直 居中的方法

    水平+垂直 居中的方法 1.flex布局 2.定位+marge:auto 3.定位(已知元素的宽高) 4.定位+calc(已知元素的宽高) 5.定位+translate(元素宽高未知) .div1{w ...

  5. 【CSS】绝对定位元素设置 水平 / 垂直 居中 ( 绝对定位元素居中设置 - 先偏移 50% 再回退子元素一半尺寸 | 绝对定位居中设置 )

    文章目录 一.问题提出 二.绝对定位 居中设置 1.设置固定尺寸 2.先偏移50%再回退固定值 三.绝对定位元素 水平 / 垂直 居中 一.问题提出 绝对定位 不能通过 设置 margin: auto ...

  6. CSS实现水平垂直的几种方法

    title: CSS实现水平垂直的几种方法 categories: CSS tags: - CSS - HTML - 面试题 date: 2021-09-11   在HTMl中分为块级元素和内联元素, ...

  7. 小div在大div里面水平垂直都居中的实现方法

    关于如何设置小盒子在大盒子里面水平垂直方向同时居中的实现方法有很多种,下面仅列举了常用的几种. 首先看一下要实现的效果图及对应的html代码: <div class="parent&q ...

  8. 【CSS】水平垂直布局

    [CSS]水平垂直布局 文章目录 [CSS]水平垂直布局 一.水平布局 (1)行内元素 (2)块级元素 给要居中的块级元素设置 margin: 0 auto; 要居中的块级元素:left + marg ...

  9. iOS - 支持水平 / 垂直显示自动滚动的跑马灯控件 --- SKAutoScrollLabel 的使用和实现

    原文链接:http://www.jianshu.com/p/7221bc08f26a SKAutoScrollLabel 是一个同时支持水平 / 垂直两种类型的 "跑马灯" 效果的 ...

  10. Oracle之垂直水平分库分表(一)

    现在开始讲另外一个知识点吧,这个知识点也是怎么说呢,就是非常有用的知识点,刚才看了一下表空间 现在咱们说一下ORACLE里面的表类型,表类型其实有这么多种表1. 正常我们的heap table,堆表, ...

最新文章

  1. nRF51800 蓝牙学习 进程记录 2:关于二维数组 执念执战
  2. 倒计时 8 天 | 完整议程大揭秘!来 20 个 AI 论坛,与百名大咖携手玩转人工智能...
  3. 解决IE8IE9 jquery ajaxj 跨域请求失败的问题。
  4. win7安装git客户端和简单配置
  5. linux实现乘法函数,linux命令行计算器
  6. nyoj--120--校园网络(scc+缩点)
  7. 【今日CV 计算机视觉论文速览 第127期】Fri, 7 Jun 2019
  8. 囚徒困境(博弈论的诡计)
  9. Linux 线程调度与优先级
  10. Visio 2003 Professional 安装序列号
  11. ISO 12233分辨率测试卡是否已经淘汰了?
  12. 关于文件、文件夹加密隐藏原理的一点想法
  13. cocos creator休闲小游戏源码《躲避高空抛物》源码H5+安卓+IOS三端源码
  14. FS4054单节锂电池充电管理芯片,IC电路图
  15. 世达03017数字万用表的使用
  16. AppleStore 原始ipa文件提取
  17. Python实现抠图换背景
  18. [Python]TempConvert.py(温度转换)解释拓展
  19. 【Docker】Docker安装
  20. Codeforces D. Omkar and Bed Wars

热门文章

  1. 浏览器不能下载response输出的excel
  2. β-环糊精衍生物接枝羟丙基壳聚糖水凝胶/羧基改性壳聚糖固载环糊精水凝胶微球的制备
  3. 拼多多稽查系统升级,现在还有3个稳定出评
  4. 轻量级网络Ghostnet(GhostConv(幻影卷积)、Ghost BottleNeck)详解
  5. 防止域名被劫持的七种方法域名被劫持怎么办
  6. 京东区块链开源项目——JD Chain介绍及区块链白皮书发布
  7. OpenCV imwrite保存图片全黑原因
  8. Windows10 电源选项中没有 唤醒时需要密码
  9. 加密机是如何工作的_什么是加密,它如何工作?
  10. OpenHarmony成长计划学生挑战赛7天打卡活动介绍