css揭秘--笔记--垂直居中

本文介绍了三种CSS垂直居中方法:基于绝对定位、视口单位和FlexBox的解决方案。每种方法都有其特点和局限性,其中FlexBox被认为是最优方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

css揭秘第40个小技巧

整篇文章所使用的的结构代码如下:

<main>
  <h1>an i center yet </h1>
  <p>center me !please</p>
<main>

1 基于绝对定位的解决方案

main{
position:absolete;
top:50%;
left:50%;
height:6em;
width:18em;
margin-top:-3em;
margin-left:-9em;
}

这段代码所做的事情相信有css基础的同学都了解,这里不做过多的解释。在网上就能找到这种解决方案。用calc()函数还能再优化一下

main{
position:absolete;
top:calc(50%-3em);
left:calc(50%-9em);
height:6em;
width:18em;
}

现在我们实现了垂直居中的效果,但是这种实现方式有一个很明显的缺点事宽度和高度是固定的,有时候和我们的需求冲突,所以我们需要再优化一下,要能适配不同内容。

main{
position:absolete;
top:50%;
left:50%;
height:6em;
width:18em;
transform:translate(50%,50%);
}

原理: margin的百分比是以其父元素的尺寸为基准进行解析的,
translate变形函数是以其自身的宽度和高度进行转换的。

现在我们完美的实现了垂直居中

上面这个方法有一些地方需要注意的
1. 我们有时不能使用绝对定义,因为它对整个布局的影响太强烈
2. 如果需要居中的元素在高度上超过了视口,那么他的顶部会被视口剪切掉
3. 3在某些浏览器上,这个方法可能会导致元素的显示有一些模糊,因为元素可能会放置在半个像素上面,这个问题可以用transform-style:preserve-3d来修复。

2基于视口单位的解决方案

main{
width:18em;
height:6em;
margin:50vh auto 0;
transform:translate(50%);
}

vh是css3定义的一套新的单位,称为视口相关的长度单位。有兴趣的同学可以自行上网搜索学习。
这个技巧的实用性相当有限,因为他只适用于视口相关的情况下。

3基于FlexBox的解决方案

这无疑是最好的解决办法了,因为flexbox是专门为这类需求设计的,我们只需为父元素设置display:flex;再给这个元素自身设置margin:auto;

body{
display:flex;
}
main{
margin:auto;
}

当我们适用flexbox时,margin:auto;不仅在水平方向居中,垂直方向也是一样,还有一点,我们甚至不需要制定任何的宽度,这个居中元素非配的宽度等于max-content。
有不知道max-content的同学可以看 张鑫旭写的文章,里面详细的介绍了max-content,min-content等属性

http://www.zhangxinxu.com/wordpress/2016/05/css3-width-max-contnet-min-content-fit-content/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值