css 实现水平居中的方法总结

原博客链接: www.jianshu.com/p/f4b9d1e2c…

css 实现水平居中,垂直居中,水平垂直居中,是css 入门的必修课题,也是代码实践,笔试面试中经常遇到的场景。这次的内容主要围绕着几种场景下的,多种水平居中方法的实现

实现场景:蓝色方块需要在父元素内部水平居中

1. 居中元素为块级元素

基础代码

<div class="container">
    <div class="box">牛</div>
</div>
复制代码
.container{
  width: 100px;
  border:1px solid red;
  height: 100px;
}
.container .box{
  font-size: 20px;
  line-height: 50px;
  background-color: blue;
  color: white;
}
复制代码

块级元素的特点:可设置元素的宽度,在不设置宽度时, 元素的宽度会自动填满其父元素宽度,并独占一行

1.1 margin: auto

居中元素设置宽度,并且设置 margin: auto 可实现水平居中

.container .box{
  height: 50px;
  width: 50px; /* 设置宽度 */
  margin: 0 auto; /* 设置宽度 */
}
复制代码

问题: margin: auto 实现水平居中的前提是, 元素的宽度已知,当宽度值未知时,见2.2

2. 居中元素为行内元素

基础代码

<div class="container">
    <span class="box">牛</span>
</div>
复制代码
.container{
  width: 100px;
  border:1px solid red;
  height: 100px;
}
.container .box{
  font-size: 20px;
  background-color: blue;
  color: white;
}
复制代码

行内元素的特点: 行内元素的宽度为元素自身撑起的宽度,和其他元素在同一行,高度,宽度,内边距等都是不可控的,即设置padding-left, padding-right, margin-left, margin-right, height, width 都无法生效

2.1 text-align: center

利用行内元素的特点,设置 text-align:center 使元素居中

.container{
  text-align: center;
}
复制代码
2.2 display:inline-block 改变模型

利用 行内元素设置 text-align 实现水平居中的方法,可以针对居中元素为块级元素,但宽度不确定时 (即1.1 问题)的场景

<div class="container">
    <div class="box">牛</div>
  </div>
复制代码
.container{
  text-align: center;
}
.container .box{
  display: inline-block;
  *display: inline; /*兼容性代码*/
  *zoom: 1; /*兼容代码*/
}
复制代码

问题: 需要解决 display: inline-block 在IE 下的兼容性问题

3. 利用定位实现水平居中(已知宽度)

相对定位: 相对定位就是将元素偏离元素的默认位置,但是并没有脱离文档流,只是视觉上发生的偏移,不会改变元素的display 属性

绝对定位: 相对于设置了 相对定位的上层元素或者顶级元素的相对位置,无论设置的元素为块级元素还是行内元素,position 设置成absolute 之后 , 元素display 表现为 block, 元素脱离文档流,父元素无法知道该元素的高度

因此,从以上的定义我们可以得到一种新的水平居中的方式,父级元素设为相对定位,居中元素设置为绝对定位,设置居中元素的宽度,并相对于父元素设置位置

.container{
  position: relative;
}
.container .box{
  position: absolute;
  width: 50px; /*设置宽度*/
  left: 50%; /*左移50%*/
  margin-left: -25px; /*修正位置*/
}
复制代码

缺点: 缺点是需要知道元素的宽度

4 利用定位,translate 实现水平居中(未知宽度)

对于已知元素的宽度,我们可以使用3中的 margin-left: -25px; /*修正位置*/ 进行精确的定位,而对于不知道宽度的元素,我们可以使用 translate 来精准定位,只需要将 margin-left: -25px; /*修正位置*/ 替换成 transform: translate(-50%, 0) 即可

.container .box{
  font-size: 20px;
  background-color: blue;
  color: white;
  position: absolute;
  left: 50%;
  transform: translate(-50%, 0);
  width: 50px;
}
复制代码

5. flex 布局实现

Flex是Flexible Box的缩写,意为”弹性布局”,父元素设置成flex 布局,可以将子元素设置为水平居中, (但是flex布局部分浏览器无法使用)

.container{
  display: flex;
  justify-content: center
}
复制代码

6. tabel-cell布局

实际项目中并不常见,故暂不提及。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: CSS水平垂直居中有以下几种方式:1.使用绝对定位和负边距;2.使用Flexbox布局;3.使用Grid布局;4.使用表格布局;5.使用绝对定位和transform;6.使用相对定位和margin;7.使用text-align属性。 ### 回答2: CSS中有多种方式可以实现水平垂直居中,以下是其中几种常见的方法: 1. 使用flexbox布局:将父元素的display属性设置为flex,同时使用align-items和justify-content属性将子元素垂直和水平居中。 2. 使用绝对定位和transform属性:将父元素的position属性设置为relative,子元素的position属性设置为absolute,并使用transform属性将子元素向中心偏移。 3. 使用绝对定位和负margin:将父元素的position属性设置为relative,子元素的position属性设置为absolute,并使用负margin将子元素向中心偏移。 4. 使用table和table-cell属性:将父元素的display属性设置为table,子元素的display属性设置为table-cell,并使用vertical-align和text-align属性将子元素垂直和水平居中。 这些方法中,flexbox布局是目前最常用和最方便的方式,它提供了更大的灵活性和更简洁的代码。但是其他方法在一些特殊场景下可能更适用。需要根据具体情况选择最合适的方式来实现水平垂直居中。 ### 回答3: CSS水平垂直居中有以下几种方式: 1. 使用flexbox布局:使用父容器设置display为flex,并使用align-items: center和justify-content: center属性来实现水平和垂直居中。 2. 使用绝对定位:使用绝对定位和transform属性实现水平垂直居中。需要将居中元素的left和top属性设置为50%,然后使用transform: translate(-50%, -50%)将元素向左上角偏移自身宽高的一半。 3. 使用表格布局:将居中元素放在一个表格中,并将表格的display属性设置为table,居中元素的display设为table-cell。然后使用vertical-align: middle属性实现垂直居中。 4. 使用文本对齐:通过设置居中元素的父容器display为table-cell,并使用text-align: center和vertical-align: middle属性实现水平和垂直居中。 5. 使用grid布局:使用grid布局的父容器设置为display为grid,并使用justify-items: center和align-items: center属性实现水平和垂直居中。 总结:以上是一些常见的CSS水平垂直居中的方法,每种方法适用于不同的场景和要求。可以根据具体的设计需求选择合适的方法实现居中效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值