本文首发于我的公众号:前端新世界

欢迎关注

本文将讨论可用于居中对齐元素的6种CSS技术(按照最佳实践排序),以及每一种技术最适合应用的场景。这里,居中对齐指的是将元素放置在其父元素的水平和垂直中心。

.center类代表要居中对齐的元素

.parent类代表其父元素。

1. 使用变换(Transform)

什么时候用:

  • 当元素的宽度和高度未知时;
  • 卡片式弹出框中有多个子元素,其中一个焦点元素位于中心。

这个思路是使用绝对定位——topleft 50%,然后应用负变换。topleft中使用的值根据父元素的尺寸解析,而translate方法中的值根据元素本身的尺寸解析。

.center {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}

2. 使用Flex

什么时候用:

  • 当有一个或多个元素要居中时;
  • 当子元素是动态的并且大小未知时;
  • 当有一行项目需要像页脚一样居中时。

这个思路是使父容器成为flexbox并使用flex属性将元素沿水平和垂直方向居中,如下所示。

.parent {
display: flex;
justify-content: center;
align-items: center;
}

当有多个元素需要一个在另一个元素上方堆叠,并使该元素堆叠在其中心时,我们只需添加以下代码行:

flex-direction: column;

3. 使用负边距

什么时候用:

  • 当元素的高度和宽度已知时。

这个思路是再次使用类似于变换技术的绝对定位,但应用的是元素宽度和高度一半的负边距而不是平移。

$w: 200px; /* SCSS 变量 */
$h: 100px; /* SCSS 变量 */
.center {
position: absolute;
top: 50%;
left: 50%;
margin: -50px -100px; /* Negative margin of half the
width and heigh */t }

为了使这段代码更通用,我们使用calc()属性,如下所示:

(#{$h} / 2) - 一半高度

(#{$h} / 2) * -1) - 一半高度的负值

这样就可以:

margin: calc((#{$h} / 2) * -1) calc((#{$w} / 2) * -1);

4. 使用网格(Grid)

什么时候用:

  • 当只有一个子元素需要居中时。

这个思路是创建一个网格容器并将边距设置为auto。在非网格容器中,当margin设置为auto时,margin-topbottom取值为0。

但是,在网格容器中,margin-topbottom平均分配可用空间,从而使元素居中。

.parent {
display: grid;
}
.center {
margin: auto;
}

另一种使用网格来实现居中的方法是:

.parent {
display: grid;
place-items: center;
}

5. 使用填充(Padding)

不建议将此技术用于中心对齐,但它也是可行的。

什么时候用:

  • 当父元素的高度已知或者固定时;
  • 当中心元素的高度为弹性可变时。

这个思路是为已知固定高度的容器设置固定的垂直填充,并允许子元素占据最大高度和自动边距。

.parent {
height: 600px; //Fixed height
padding: 200px 0; //Fixed vertical padding
}
.center{
margin: 0 auto;
height: 100%; // Child takes max height
}

6. 使用表格单元格

这个技术现在用得比较少,但是也值得借鉴。并且,它确实也是可行的。

这个思路是使用display强制父级表现得像一个表格单元格。然后使用vertical align属性进行垂直居中,使用margin auto进行水平居中。

.parent {
display: table-cell;
vertical-align: middle;
}
.center{
margin: auto;
}

以上总结了居中对齐元素的6种方法。

另外我们再讲一讲——水平居中

水平居中通常用于标题样式和页脚,并结合均匀的填充或边距。

使用文本对齐

什么时候用:

  • 当中心元素为文本内容或者inline-*类型元素时;
  • linline-*包括inlineinline-blockinline-flexinline-table等。
.parent {
text-align: center;
}

它还可以居中块类型子元素,但我们不推荐这么做。

使用边距

什么时候用:

  • 当中心元素是块元素时
.center {
margin: 0 auto;
}

感谢阅读!

每日分享前端插件和前端开发教程,欢迎扫码关注我的公众号:前端新世界

CSS居中对齐终极指南的更多相关文章

  1. CSS居中对齐

    CSS实现居中对齐的几种方式 页面布局中,居中对齐是我们经常遇到的场景,现在总结几个常用的方式供大家参考. 场景一:按钮文字居中对齐,line-height + text-align html代码: ...

  2. CSS 居中效果完整指南

    本文翻译自:<Centering in CSS: A Complete Guide> 使用 CSS 实现效果困难吗?显然不是.实际上有许多方法可以实现居中效果,但在具体情况中,我们往往无法 ...

  3. 利用CSS实现居中对齐

    1. 文本居中 首先编写一个简单的html代码,设置一个类名为parentDiv的div对象.html代码如下: <div class="parentDiv"> 这里随 ...

  4. CSS 图像居中对齐

    CSS  图像居中对齐 我们在<CSS 内外边距>学过内容居中,它的原理是将外边左右设置为auto.图像居中也是这个原理. 示例 <!DOCTYPE html> <htm ...

  5. CSS居中完全指南——构建CSS居中决策树

    CSS居中完全指南--构建CSS居中决策树 本文总结CSS居中,包括水平居中和垂直居中.本文相当于CSS决策树,下次再遇到CSS居中问题时有章可循. 参考Centering in CSS: A Com ...

  6. 【css对齐】块内或者行内图片与文字居中对齐最靠谱的方式!

    块内或者行内图片与文字居中对齐最靠谱的方式! 做图片与文字在一行的按钮时候最常用到,总结了一个靠谱的方法,终于可以完美的对齐下面给个代码 首先是html: <p class="btnU ...

  7. CSS上下左右居中对齐

    上下左右居中对齐 display:  inline/inline-block 将父元素(容器)设定 text-align: center: 即可左右置中. display: block 将元素本身的 ...

  8. vue—你必须知道的 js数据类型 前端学习 CSS 居中 事件委托和this 让js调试更简单—console AMD && CMD 模式识别课程笔记(一) web攻击 web安全之XSS JSONP && CORS css 定位 react小结

    vue—你必须知道的   目录 更多总结 猛戳这里 属性与方法 语法 计算属性 特殊属性 vue 样式绑定 vue事件处理器 表单控件绑定 父子组件通信 过渡效果 vue经验总结 javascript ...

  9. line-height,vertical-align及图片居中对齐问题根源解析

    关于图片居中对齐的问题,进入前端行业虽然有一段时间了,以为自己懂了,可是实际上还是一知半解,找了一些博客来看了一下,但是感觉讲的有点碎,看完还是一知半解. 查阅了一下<css权威指南>,结 ...

随机推荐

  1. 基于ARMv8的固件系统体系结构

    基于ARMv8的固件系统体系结构 The architecture of ARMv8-based firmware systems 自2011年发布以来,ARMv8处理器架构在移动设备市场上已经相当普 ...

  2. 基于Android平台的图书管理系统的制作(2)

    上一篇讲解了制作图书管理系统的初衷与要求,和app首页的代码. 下面来介绍图书管理系统的服务对象:学生 学生类的设计: 个人信息:账号.密码.姓名.学号.邮箱.年龄. 借阅信息:借阅总数(不超过十本) ...

  3. css基本内容笔记(学习整理)

    一.css简介 1.什么是css 层叠样式表. 层叠:层层叠加,若果有冲突应用优先级高,不冲突的部分共同作用 样式表:就是css属性样式的集合: 2.作用 a.修饰html,使得html样式更好看 b ...

  4. 11张流程图搞定 Spring Bean 生命周期

    在网上已经有跟多Bean的生命周期的博客,但是很多都是基于比较老的版本了,最近把整个流程化成了一个流程图.待会儿使用流程图,说明以及代码的形式来说明整个声明周期的流程.注意因为代码比较多,这里的流程图 ...

  5. JavaScript 实现:输出斐波那契数列

    问渠那得清如许,为有源头活水来. 想要保持自己的技术活力,最有效的手段就是通过不断地输入来提供足够的养分.我们也不必刻意追求高深的或者新鲜的知识点,通过对一个基础问题的全方位多维度解析,同样也会收获不 ...

  6. JavaScript的核心语法

    1.JavaScript同其他程序设计语言一样,有着独特的语法结构,主要包含:变量.数据类型.运算符号.控制语句和注释等. 2.变量是存储数据的基本单位,JavaScript通常利用变量来参与j各种运 ...

  7. C++中指针与引用详解

    在计算机存储数据时必须要知道三个基本要素:信息存储在何处?存储的值为多少?存储的值是什么类型?因此指针是表示信息在内存中存储地址的一类特殊变量,指针和其所指向的变量就像是一个硬币的两面.指针一直都是学 ...

  8. 你的电脑适合升级 Win11 吗?「GitHub 热点速览 v.21.26」

    作者:HelloGitHub-小鱼干 WhyNotWin11 是个有意思的项目,本以为是从 360 度"抨击" Windows 11 的不好用之处,但它是一个实实在在地从硬件角度告 ...

  9. count、counta函数巧妙运用于合并单元格填充序号

    函数运用: 1.COUNT(value1,value2, ...)      value1 是必需参数. 要计算其中数字的个数的第一项.单元格引用或区域.      value2, ... 为可选参数 ...

  10. 低代码开发LCDP,Power Apps系列 - 搭建入职选购电脑设备案例

    低代码简介 上世纪八十年代,美国就有一些公司和实验室开始了可视化编程的研究,做出了4GL"第四代编程语言",到后来衍生成VPL"Visual Programming La ...