zoukankan      html  css  js  c++  java
  • 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

    总结

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

  • 相关阅读:
    flash/flex builder在IE中stage.stageWidth始终为0的解决办法
    “AS3.0高级动画编程”学习:第一章高级碰撞检测
    Flash/Flex学习笔记(57):实用技巧
    Flash/Flex学习笔记(56):矩阵变换
    flash开发中如何实现界面代码分离
    [转]Flash开发技能树
    flash builder代码格式化以及其它快捷键
    中小型商城系统中的分类/产品属性/扩展属性的数据库设计
    “AS3.0高级动画编程”学习:第四章 寻路(AStar/A星/A*)算法 (下)
    晒晒这两天做的播放器
  • 原文地址:https://www.cnblogs.com/huansky/p/5291297.html
Copyright © 2011-2022 走看看