• HTML--元素居中各种处理方法2


    紧接上一篇。

    如果要居中的是一个块元素呢。

    1)如果你知道这个块元素的高度:

     1 <main>
     2   
     3   <div>
     4      I'm a block-level element with a fixed height, centered vertically within my parent.
     5   </div>
     6   
     7 </main>
     8 
     9 
    10 body {
    11   background: #f06d06;
    12   font-size: 80%;
    13 }
    14 
    15 main {
    16   background: white;
    17   height: 300px;
    18   margin: 20px;
    19   width: 300px;
    20   position: relative;
    21   resize: vertical;
    22   overflow: auto;
    23 }
    24 
    25 main div {
    26   position: absolute;
    27   top: 50%;
    28   left: 20px;
    29   right: 20px;
    30   height: 100px;
    31   margin-top: -70px;
    32   background: black;
    33   color: white;
    34   padding: 20px;
    35 }
    View Code

    resize 属性规定是否可由用户调整元素的尺寸。resize: none|both|horizontal|vertical;

    总结起来就是

    1 .parent {
    2   position: relative;
    3 }
    4 .child {
    5   position: absolute;
    6   top: 50%;
    7   height: 100px;
    8   margin-top: -50px; /* account for padding and border if not using box-sizing: border-box; */
    9 }
    View Code

    2)如果你不知道这个块元素的高度,因为他会变化的,比如图片变了,宽度变了,样式变了等等都会改变元素的高度。

     1 body {
     2   background: #f06d06;
     3   font-size: 80%;
     4 }
     5 
     6 main {
     7   background: white;
     8   height: 300px;
     9   margin: 20px;
    10   width: 300px;
    11   position: relative;
    12   resize: vertical;
    13   overflow: auto;
    14 }
    15 
    16 main div {
    17   position: absolute;
    18   top: 50%;
    19   left: 20px;
    20   right: 20px;
    21   background: black;
    22   color: white;
    23   padding: 20px;
    24   transform: translateY(-50%);
    25   resize: vertical;
    26   overflow: auto;
    27 }
    View Code

    总结起来就是要这样子:

    1 .parent {
    2   position: relative;
    3 }
    4 .child {
    5   position: absolute;
    6   top: 50%;
    7   transform: translateY(-50%);
    8 }
    View Code

    3)当然,如果你可以使用flex

    main {
      background: white;
      height: 300px;
      width: 200px;
      padding: 20px;
      margin: 20px;
      display: flex;
      flex-direction: column;
      justify-content: center;
      resize: vertical;
      overflow: auto;
    }
    
    main div {
      background: black;
      color: white;
      padding: 20px;
      resize: vertical;
      overflow: auto;
    }
    View Code

    总结起来就是

    1 .parent {
    2   display: flex;
    3   flex-direction: column;
    4   justify-content: center;
    5 }
    View Code

    下面我们就要进入我们的难点了,就是如何水平垂直方向都达到居中。

    一般情况下,我们可以结合上面的方法来达到目标。但是总有一些意外发生。

    1)元素是固定的大小。首先你得设置外边距为负值,上边距为高度的一般,左边距为宽度的一般,其次在采用固定在50%/50%(上左或者下右)就可以了。

    main {
      position: relative;
      background: white;
      height: 200px;
      width: 60%;
      margin: 0 auto;
      padding: 20px;
      resize: both;
      overflow: auto;
    }
    
    main div {
      background: black;
      color: white;
      width: 200px;
      height: 100px;
      margin: -70px 0 0 -120px;
      position: absolute;
      top: 50%;
      left: 50%;
      padding: 20px;
    }
    View Code

    HTML代码和原来的一样,就不多说了。

    总结起来就是:

    .parent {
      position: relative;
    }
    
    .child {
      width: 300px;
      height: 100px;
      padding: 20px;
    
      position: absolute;
      top: 50%;
      left: 50%;
    
      margin: -70px 0 0 -170px;
    }
    View Code

    2)不知道元素的大小。这是你可以利用transform的属性。使其在两个方向上都进行翻转-50%。这是基于当前元素的大小来进行剧中的。

    main {
      position: relative;
      background: white;
      height: 200px;
      width: 60%;
      margin: 0 auto;
      padding: 20px;
      resize: both;
      overflow: auto;
    }
    
    main div {
      background: black;
      color: white;
      width: 50%;
      transform: translate(-50%, -50%);
      position: absolute;
      top: 50%;
      left: 50%;
      padding: 20px;
      resize: both;
      overflow: auto;
    }
    View Code

    总结:

    .parent {
      position: relative;
    }
    .child {
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
    }
    View Code

    3)如果你可以使用flexbox;

    main {
      background: white;
      height: 200px;
      width: 60%;
      margin: 0 auto;
      padding: 20px;
      display: flex;
      justify-content: center;
      align-items: center;
      resize: both;
      overflow: auto;
    }
    
    main div {
      background: black;
      color: white;
      width: 50%;
      padding: 20px;
      resize: both;
      overflow: auto;
    }
    View Code

    总结起来就是:

    .parent {
      display: flex;
      justify-content: center;
      align-items: center;
    }
    View Code

    总结

    如果以上方法你都掌握了,居中对你而言就是一个小问题。

  • 相关阅读:
    dotnet core 获取 MacAddress 地址方法
    dotnet core 获取 MacAddress 地址方法
    dotnet core 发布只带必要的依赖文件
    dotnet core 发布只带必要的依赖文件
    Developing Universal Windows Apps 开发UWA应用 问答
    Developing Universal Windows Apps 开发UWA应用 问答
    cmd 如何跨驱动器移动文件夹
    cmd 如何跨驱动器移动文件夹
    C++ 驱动开发 error LNK2019
    C++ 驱动开发 error LNK2019
  • 原文地址:https://www.cnblogs.com/huansky/p/5291297.html
Copyright © 2020-2023  润新知