当面试官问你使内容水平垂直居中的方式有哪些时,你可以回答出几种?如何说出加分项的答案?

前言

内容水平垂直居中是我们在页面布局中经常会遇到的问题,同时这也是css面试中最经典的问题,包括使用CSS属性positionflexgridtablemargin 去实现。

1. 使用 position: absolute + translatemargin 负值(已知宽高)

这是一种最常见的水平垂直居中方法。通过将容器的position属性设置为absolute,再利用lefttop属性与transform: translate(-50%, -50%)或负值的margin实现水平垂直居中。注意,第二种方法需要明确指定容器的宽度和高度,适用于已知宽高的元素。

html 复制代码
<div class="container">
  <div class="centered">Hello, World!</div>
</div>
css 复制代码
<style>
/* 不知宽高 */
.centered {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
} 

/* 已知宽高 */
.centered {
    position: absolute;
    top: 50%;
    left: 50%;
    margin: -50px 0 0 -75px;  /* 移动左宽度和上高度的一半 */
    width: 150px;
    height: 100px;
    background-color: yellow;
}     
</style>

在将一个元素水平垂直居中时,我们通将它的lefttop属性设置为50%,transform: translate(-50%, -50%)是CSS3中的一个变换函数,用于移动元素的位置。其中-50%表示元素自身宽度或高度的50%,即让元素向左和向上移动自身宽度和高度的一半,从而实现水平垂直居中的效果。该方法的好处在于不需要知道元素的宽度和高度,可以适用于不确定宽高的情况,也是最常用的方法。

不知宽高效果图:
已知宽高效果图:

2. 使用 flex 布局

使用CSS3中的flex布局可以非常方便地实现水平垂直居中。使用display: flex将父容器设置为弹性盒子容器,再使用justify-content: center;align-items: center;让子元素分别在x轴和y轴居中,即实现水平垂直居中。

html 复制代码
<div class="container">
  <div class="centered">Hello, World!</div>
</div>
css 复制代码
<style>
.container {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 200px;
  border: 1px solid #ccc;
}
.centered {
  width: 150px;
  height: 100px;
  background-color: yellow;
}
</style>
效果图:

3. 使用 grid 布局

使用CSS3中的grid布局也可以非常方便地实现水平垂直居中。使用display: grid将父容器设置为网格容器,再使用place-items: center;让子元素水平垂直居中。注意,place-items: center;只适用于网格布局容器。它是align-itemsjustify-items属性的简写形式,可以同时设置水平和垂直方向上的对齐方式为居中。

html 复制代码
<div class="container">
  <div class="centered">Hello, World!</div>
</div>
css 复制代码
<style>
.container {
    display: grid;
    place-items: center;
    /* justify-content: center; */
    /* align-items: center; */
    height: 200px;
    border: 1px solid #ccc;
}
.centered {
  width: 150px;
  height: 100px;
}
</style>
效果图:

4. 使用 table 属性

使用table属性也可以实现水平垂直居中。使用display: table将父容器设置为表格容器,再将子元素设置为表单元格display: table-cell。注意,在表格布局中,vertical-align: middle;属性只对表格单元格元素(display: table-cell)生效。它用于控制表格单元格内部内容的垂直对齐方式。而text-align: center;属性则用于控制容器内部内容的水平对齐方式。

html 复制代码
<div class="container">
    <div>
        Hello, World!
    </div>
    <div>
        Hello, World!
    </div>
</div>
css 复制代码
<style>
.container {
    display: table;
    /* 将父容器为表格 */
    width: 100%;
    height: 300px;
    border: 1px solid #ccc;
}

.container div {
    display: table-cell;
    /* 将子容器设置为表格单元格 */
    vertical-align: middle;
    /* 垂直居中 */
    text-align: center;
    /* 水平居中 */
}
</style>
效果图:

5. 使用 margin (已知宽高)

使用CSS的margin属性也可以实现水平垂直居中。通过计算父容器与子容器的宽高得出可将子元素水平垂直居中的margin的值,水平和垂直方向同时为宽度和高度的一半,就可以让子元素水平垂直居中。

html 复制代码
<div class="container">
  <div class="centered">Hello, World!</div>
</div>
css 复制代码
<style>
.container {
    width: 300px;
    height: 200px;
    border: 1px solid #ccc;
}
.centered {
    width: 150px;
    height: 100px;
    background-color: yellow;
    margin-left: 75px;
    /* 左右宽度:(300 - 150 )/ 2 = 75 */
    margin-top: 50px;
    /* 上下宽度:(200 - 100 )/ 2 = 50 */
}
</style>
效果图:

总结

对于position: absolute + translateflex 这俩种水平垂直居中的方法,相信大家是非常的熟悉,也是大家最常用的方法,而使用 margin (已知宽高)这种方法也是最基础但却最捞的方法。grid 栅格布局也是可以实现的方法之一,但是对于使用 table 属性这点是非常少见的,也是面试中最难回答到的一点,少而显优,这便是加分项的答案。最后,即将面临春招,祝愿大家都能够旗开得胜,马到成功!

最后,如果这篇文章对您有所帮助,还希望大家多多点赞支持,如有错误也欢迎大家指正。

相关推荐
Redstone Monstrosity4 分钟前
字节二面
前端·面试
东方翱翔11 分钟前
CSS的三种基本选择器
前端·css
Fan_web34 分钟前
JavaScript高级——闭包应用-自定义js模块
开发语言·前端·javascript·css·html
yanglamei196242 分钟前
基于GIKT深度知识追踪模型的习题推荐系统源代码+数据库+使用说明,后端采用flask,前端采用vue
前端·数据库·flask
千穹凌帝42 分钟前
SpinalHDL之结构(二)
开发语言·前端·fpga开发
dot.Net安全矩阵1 小时前
.NET内网实战:通过命令行解密Web.config
前端·学习·安全·web安全·矩阵·.net
Hellc0071 小时前
MacOS升级ruby版本
前端·macos·ruby
UestcXiye1 小时前
面试算法题精讲:求数组两组数差值和的最大值
面试·数据结构与算法·前后缀分解
严格格1 小时前
三范式,面试重点
数据库·面试·职场和发展
前端西瓜哥1 小时前
贝塞尔曲线算法:求贝塞尔曲线和直线的交点
前端·算法