CSS居中对齐终极指南
本文首发于我的公众号:前端新世界
欢迎关注
本文将讨论可用于居中对齐元素的6种CSS技术(按照最佳实践排序),以及每一种技术最适合应用的场景。这里,居中对齐指的是将元素放置在其父元素的水平和垂直中心。
.center
类代表要居中对齐的元素
.parent
类代表其父元素。
1. 使用变换(Transform)
什么时候用:
- 当元素的宽度和高度未知时;
- 卡片式弹出框中有多个子元素,其中一个焦点元素位于中心。
这个思路是使用绝对定位——top
和left
50%,然后应用负变换。top
和left
中使用的值根据父元素的尺寸解析,而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-top
和bottom
取值为0。
但是,在网格容器中,margin-top
和bottom
平均分配可用空间,从而使元素居中。
.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-*
包括inline
、inline-block
、inline-flex
、inline-table
等。
.parent {
text-align: center;
}
它还可以居中块类型子元素,但我们不推荐这么做。
使用边距
什么时候用:
- 当中心元素是块元素时
.center {
margin: 0 auto;
}
感谢阅读!
每日分享前端插件和前端开发教程,欢迎扫码关注我的公众号:前端新世界
CSS居中对齐终极指南的更多相关文章
- CSS居中对齐
CSS实现居中对齐的几种方式 页面布局中,居中对齐是我们经常遇到的场景,现在总结几个常用的方式供大家参考. 场景一:按钮文字居中对齐,line-height + text-align html代码: ...
- CSS 居中效果完整指南
本文翻译自:<Centering in CSS: A Complete Guide> 使用 CSS 实现效果困难吗?显然不是.实际上有许多方法可以实现居中效果,但在具体情况中,我们往往无法 ...
- 利用CSS实现居中对齐
1. 文本居中 首先编写一个简单的html代码,设置一个类名为parentDiv的div对象.html代码如下: <div class="parentDiv"> 这里随 ...
- CSS 图像居中对齐
CSS 图像居中对齐 我们在<CSS 内外边距>学过内容居中,它的原理是将外边左右设置为auto.图像居中也是这个原理. 示例 <!DOCTYPE html> <htm ...
- CSS居中完全指南——构建CSS居中决策树
CSS居中完全指南--构建CSS居中决策树 本文总结CSS居中,包括水平居中和垂直居中.本文相当于CSS决策树,下次再遇到CSS居中问题时有章可循. 参考Centering in CSS: A Com ...
- 【css对齐】块内或者行内图片与文字居中对齐最靠谱的方式!
块内或者行内图片与文字居中对齐最靠谱的方式! 做图片与文字在一行的按钮时候最常用到,总结了一个靠谱的方法,终于可以完美的对齐下面给个代码 首先是html: <p class="btnU ...
- CSS上下左右居中对齐
上下左右居中对齐 display: inline/inline-block 将父元素(容器)设定 text-align: center: 即可左右置中. display: block 将元素本身的 ...
- vue—你必须知道的 js数据类型 前端学习 CSS 居中 事件委托和this 让js调试更简单—console AMD && CMD 模式识别课程笔记(一) web攻击 web安全之XSS JSONP && CORS css 定位 react小结
vue—你必须知道的 目录 更多总结 猛戳这里 属性与方法 语法 计算属性 特殊属性 vue 样式绑定 vue事件处理器 表单控件绑定 父子组件通信 过渡效果 vue经验总结 javascript ...
- line-height,vertical-align及图片居中对齐问题根源解析
关于图片居中对齐的问题,进入前端行业虽然有一段时间了,以为自己懂了,可是实际上还是一知半解,找了一些博客来看了一下,但是感觉讲的有点碎,看完还是一知半解. 查阅了一下<css权威指南>,结 ...
随机推荐
- Java线程池底层源码分享和相关面试题(持续更新)
线程池各个参数讲解 public ThreadPoolExecutor(int corePoolSize, //线程池核心工作线程数量,比如newFixedThreadPool中可以自定义的线程数量就 ...
- 前端 JS 之 AJAX 简介及使用
概述 AJAX 是一个缩写,它的全名是 Asynchronous JavaScript and XML,意思就是异步 JavaScript 和 XML,即用JavaScript执行异步网络请求. AJ ...
- 实验7、Django VS Flask VS Node:如何选择
实验介绍 1. 实验内容 在本教程中,我们将详细介绍Django和Flask之间的比较.Flask和Django是基于Python的Web开发框架.许多正在朝着轻型微框架发展.这些框架敏捷,灵活,小巧 ...
- linux安装配置交叉编译器arm-linux-gnueabi-gcc
要使我们在x86架构下运行的程序迁移至ARM架构的开发板中运行时,需要通过交叉编译器将x86下编写的程序进行编译后,开发版才能运行. 在安装之前我们需要了解,什么是交叉编译器. 一.下载交叉编译器 这 ...
- hackthebox TheNotebook
前言 只拿到了user,提权没成功--有wp说是CVE-2019-5736,我没打成. 打点 nmap-sV -v -A 10.10.10.230 端口扫描结果: PORT STATE SERVICE ...
- Vue(6)v-on指令的使用
v-on 监听事件 可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码.事件代码可以直接放到v-on后面,也可以写成一个函数.示例代码如下: <div id ...
- Python-对比两个目录中Excel文件
背景:我在5月20日收到了一批Excel文件数据,由于文件很多大约有将近5000个,已经通过编写python脚本处理完成.但是6月9日的时候,又收到了一批新的Excel数据.但是在处理过程中发现,本次 ...
- 简易版JDBC连接池
JDBC连接池mini版的实现 首先是工具类 DbUtil 主要参数就是Driver.User.PWD等啦,主要用于建立连接 URL需要注意的是SSL和serverTimezone参数,和mysql驱 ...
- 22、oracle子查询
22.1.什么是子查询: 1.子查询就是在一条sql语句中嵌入select语句: 2.子查询可区分为关联子查询和非关联子查询,他们和主查询之间的执行顺序和关系是不同的: 22.2.关联子查询: 1.说 ...
- 解决List遍历删除元素提示ConcurrentModificationException
JDK1.8提供新的API ===> removeIf public static void main(String[] args) { List<String> list = ...