当前位置:   article > 正文

元素水平垂直居中_元素需要在垂直方向居中,应该怎么编写代码?

元素需要在垂直方向居中,应该怎么编写代码?

无论是实际开发中,还是职场的面试,水平垂直居中都是非常常见的一个需求和问题。 为了行文方便,先来说明一些公共代码:

  1. <div class='wrap'>
  2. <div class='box size'>Jonas Von</div>
  3. </div>

样式公共代码:

  1. .wrap{
  2. border: 1px solid rebeccapurple;
  3. width: 300px;
  4. height: 300px;
  5. }
  6. .box{
  7. background-color: pink;
  8. }
  9. .box.size{
  10. width: 100px;
  11. height: 100px;
  12. }

在我的认知里面,实现元素水平垂直居中大致有两类方法,一类是通过绝对定位+实现的,另外一类就是 flex 布局。

绝对定位 + 负margin

  1. //省略公共样式
  2. .wrap{
  3. position: relative;
  4. }
  5. .box{
  6. position: absolute;
  7. left: 50%;
  8. top: 50%;
  9. margin-left: -50px;
  10. margin-top: -50px;
  11. }

绝对定位让子元素的左上角定位到父容器的中心点,接着通过负外边距让子元素往回跑自身容器宽/高的一半。这种方式的缺点是需要知道子元素的宽高。

绝对定位 + 计算属性 calc

  1. .wrap{
  2. position: relative;
  3. }
  4. .box{
  5. position: absolute;
  6. top: calc(50% - 50px);
  7. left: calc(50% - 50px);
  8. }

这种方式的缺点跟上面的一致,就是需要知道子元素的宽高;然而还要考虑兼容性的问题,所以慎用。

绝对定位 + margin:auto

  1. .wrap{
  2. position: relative;
  3. }
  4. .box{
  5. position: absolute;
  6. left: 0;
  7. top: 0;
  8. bottom: 0;
  9. right: 0;
  10. margin: auto;
  11. }

要是没有 margin:auto ,子元素将充满整个父元素,这种方式的灵魂就在于 auto。

绝对定位 + transform

  1. .wrap{
  2. position: relative;
  3. }
  4. .box{
  5. position: absolute;
  6. left: 50%;
  7. top: 50%;
  8. transform: translate(-50%,-50%);
  9. }

现代网页布局解决方案 —— flex

如果用 flex 实现水平垂直居中,那实在是太简单了,三行代码:

  1. .wrap{
  2. display: flex;
  3. justify-content: center;
  4. align-items: center;
  5. }

将父容器设置为 flex 容器,接着,让主、侧轴元素居中显示即可。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/671867
推荐阅读
相关标签
  

闽ICP备14008679号