《图解CSS》水平垂直居中
发布日期:2021-05-08 07:21:08 浏览次数:24 分类:精选文章

本文共 2571 字,大约阅读时间需要 8 分钟。

在面试的过程中,经常会被问到有关CSS的一个问题,那便是居中问题。

该图由以下分析得出,建议最后再看

首先是如何进行水平居中,然后如何进行垂直居中,最后如何进行水平垂直居中。

接下来,一个问题一个问题研究~

水平居中,是基于两个或多个元素之间的位置关系。可能一个父元素和一个子元素,可能一个父元素或多个子元素。

那么父元素和子元素可能存在哪些情况呢?

  1. 父元素为行内元素,子元素为行内元素
  2. 父元素为行内元素,子元素为块级元素
  3. 父元素为块级元素,子元素为行内元素
  4. 父元素为块级元素,子元素为块级元素

在设置水平居中的过程中,父元素或者子元素的宽度、高度,子元素单行/多行有时也需要考虑其中。

在研究水平居中/垂直居中之前,先把一些不需要考虑的特殊情况挑出来:

父元素为行内元素,子元素为行内元素(不存在居中问题)

由于父元素,子元素都是行内元素。且行内元素基本都是不可设置宽高的(除去替换元素),所以没有居中的概念。

父元素为行内元素,子元素为块级元素

由于行内元素包含块级元素,导致行内元素也独占一行,可以使用在父元素内添加text-align: center,但是不符合开发规范。

注意:不建议在行内元素中嵌套块元素,这样不仅不符合开发规范,还会导致行内元素也独占一行。

水平居中

父元素为块级元素,子元素为行内元素

解决方案一:在父元素内添加text-align: center

		
1class ClassName {}
2class ClassName {}

解决方案二: 在父元素添加display: flex; justify-content: center,子元素如果不希望高度扩展,在子元素上设置子元素的高度。

		
1class ClassName {}
2class ClassName {}

父元素为块级元素,子元素为块级元素

解决方案一: 在父元素添加display: flex; justify-content: center,子元素如果不希望高度扩展,在子元素上设置子元素的高度。

		
1class ClassName {}
2class ClassName {}

解决方案二: 如果子元素宽度固定,在子元素添加margin: 0 auto

		
1class ClassName {}
2class ClassName {}

方案三: 利用position进行定位

父元素添加position: relative, 子元素添加position: absolute;transform: translateX(-50%);。如果不不适用transform: translateX(-50%);就不是真正意义上的居中显示,而是从居中位置开始向后显示,如下实例:

		
1class ClassName {}
2class ClassName {}

垂直居中

父元素为块级元素,子元素为行内元素

子元素为单行时,可以使用: line-height 为父元素的height,然后设置vertical-align:middel或者父元素设置: dispaly:table-cell;vertical-align: midde;

子元素为多行时: 父元素设置: dispaly:table-cell;vertical-align: midde;

		
单行
单行
多行多行多行多行多行多行多行多行多行多行多行多行多行多行多行多行多行多行多行多行多行多行多行多行多行多行多行多行多行多行多行多行

父元素为块级元素,子元素为块级元素

方案一: position定位
方案二:table-cell
方案三: flex
		
内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
内容内容内容内容内容内
内容内容内容内容内容内容内容内容内容内内容内容内容内容内容内容内容内容内容内内容内容内容内容内容内容内容内容内容内

水平垂直居中

垂直水平居中就可以利用上面的方法进行组合就好啦,下面推荐使用一些常见的方式:

方案一 flex

align-items:center;

方案二 position定位

方案三 grid

align-items: center;

justify-items:center;

place-items: center;

		
内容内容内容内容内容内容内容内容
内容内容内容内容内容内
内容内内容内容内容内容内容内容内容内容内容内

参考网址:

https://zhuanlan.zhihu.com/p/83553320
https://blog.csdn.net/weixin_37580235/article/details/82317240

如果文章能够对您有所帮助,我便感到十分荣幸。如若文章能被您点赞,那便是万分荣幸。

个人微信:iotzzh

公众号:前端微说
个人网站:www.iotzzh.com
github地址:https://github.com/956159241/TuJieQianDuan

上一篇:《图解Vue3.0》- 第1节 Vue初识
下一篇:《前端面试题》- JS基础 - 伪数组

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年03月21日 04时13分30秒