水平居中和垂直居中方法总结,总有一款姿势适合你

  • 本文将总结容器内文字以及容器本身在不同场景下要如何水平垂直居中
  • 本文以span标签为例,总结所有场景的居中布局方式,父容器为body
  • 根据视频课程纯手敲和实验,亲测有效,感谢老师

1 容器宽高自适应 没有指定宽高 内容撑开

1-1 内联元素,不能设置宽高,内容撑开
1-1-1 文字水平(容器内容)垂直居中 多行文本
  • 默认的内联元素是没有宽高的,根据内容自适应,所以不存在水平垂直居中问题
  • 内联元素的padding-top/padding-bottom属性不生效
  • 但是为什么input元素和textare类似内联元素可以生效呢?是因为内联元素还具体分为可替换元素和不可替换元素,具体的属性说明可以参考:点击跳转链接
	// span为内联元素,默认设置display: inline
    display: inline;
    padding: 30px 20px;// 可以发现30px不生效,即内联元素padding-top不生效

    // 针对padding-top/bottom失效问题,可以考虑使用内联块属性
    display: inline-block;// 对外表现为inline,队内表现为block
1-1-2 容器水平(容器本身,相对于父元素)垂直居中 多行文本
  • 没有宽度和高度
	// 方法一(推荐)
	position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);

    // 方法二(父容器设置flex,不兼容flex时候用方法一	)
    display: flex;
    justify-content: center;
    align-items: center;

1-2 内联块元素 不能设置宽高 内容撑开
1-2-1 文字水平(容器内容)垂直居中 多行文字
  • 内联块可以设置宽高、内外top/bottom边距
  • 对外表现为内联元素(行内元素),对外表现为块元素
	// 设置padding-top / bottom
	display: inline-block;
    padding: 30px 20px;
1-2-2 容器水平(容器本身,相对于父元素)垂直居中 内联块元素
	// 方法一(推荐)
	position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);

    // 方法二(父容器设置flex,不兼容flex时候用方法一	)
    display: flex;
    justify-content: center;
    align-items: center;

1-3 块元素 不设置宽高
1-3-1 文字水平(容器内容)垂直居中 多行文字
  • 默认宽度是100%
  • 需要计算padding的值,比较麻烦
	display: block;
    text-align: center;// 水平居中
    padding: 30px 0;// 撑开
1-3-2 容器水平(容器本身,相对于父元素)垂直居中 块元素
  • 可以还是使用万能的方法一absolute,但是这个时候就会把元素默认设置为inline-block,width默认为文字宽度,需要手动指定width:100%
  • absolute和float会默认改变display类型,不论之前什么类型的元素(除display: none),只要设置了position:absolute/float,都会让元素默认设置为display: inline-block,可以设置宽高,但是默认宽度并不占据父元素整个宽度,而是内容宽度,高度也是内容高度。
	// 方法一(推荐)
	position: absolute;
    display: inline-block;// absolute默认把元素设置为了inline-block
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);

    // 方法二(父容器设置flex,不兼容flex时候用方法一	)
    display: flex;
    justify-content: center;
    align-items: center;

2 指定容器宽高

2-1 内联元素 不能设置宽高 内容撑开
  • 内联元素不可以设置宽高,所以就不用再考虑此场景
2-2 内联块元素 设置宽高
2-2-1 文字水平(容器内容)垂直居中 多行文字和多行文字
  • 指定了宽高,指定了display为inline-block,该如何让内容文字居中?

单行文本处理方式:

	// 指定了宽高,指定了display为inline-block
    display: inline-block;
    width: 300px;
    height: 100px;
    
    // 方法一
    text-align: center;// 水平居中
    line-height: 100px;// 垂直居中,单行文本可以这样处理,多行的话会溢出显示在容器下方,可以使用overflow:hidden隐藏,但是完全不退见
    
    // 方法二
    flex布局,比较流氓的做法,就不再写了

多行文本处理方式,当然使用flex流氓做法:

	display: flex;
    justify-content: center;
    align-items: center;
2-2-2 容器水平(容器本身,相对于父元素)垂直居中 内联块元素
  • 使用margin:0 auto;为啥不行?因为auto必须要和display: block配合使用
    // 方法一(推荐)
	position: absolute;
    display: inline-block;// absolute默认把元素设置为了inline-block
    left: 50%;
    top: 50%;
    transform: translate(-宽度一半, -高度一半);

    // 方法二(父容器设置flex,不兼容flex时候用方法一	)
    display: flex;
    justify-content: center;
    align-items: center;
2-3 块元素 设置宽高
2-3-1 文字水平(容器内容)垂直居中 多行文字
  • 通过line-height设置
    // 指定了宽高,指定了display为inline-block
    display: inline-block;
    width: 300px;
    height: 100px;
    
    // 方法一
    text-align: center;// 水平居中
    line-height: 100px;// 垂直居中,单行文本可以这样处理,多行的话会溢出显示在容器下方,可以使用overflow:hidden隐藏,但是完全不退见
    
    // 方法二还是flex布局
2-3-2 容器水平(容器本身,相对于父元素)垂直居中 块元素

    // 方法一(推荐)
	position: absolute;
    display: inline-block;// absolute默认把元素设置为了inline-block
    left: 50%;
    top: 50%;
    transform: translate(-宽度一半, -高度一半);

    // 方法二,利用absolute和align进行拔河效应
    position: absolute;
    top: 0;
    bottom: 0;
    margin: auto;

    // 方法三,利用flex,代码略

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值