zoukankan      html  css  js  c++  java
  • CSS的居中问题

    我觉得有必要总结一下CSS中的一些问题,写博客也是锻炼自己能力的一种形式吧。 这一篇是在CSS-TRICKS 看到的一篇关于CSS垂直和水平方向居中的完整指导···

    完整链接:https://css-tricks.com/centering-css-complete-guide/

    为什么大家很多时候都抱怨CSS居中很困难? 其实并不是它有多困难,而是它有太多方法可以实现,在特定的情形下选择合适的居中方法并不容易。

    一、水平居中

    1.1 如果是行内元素 (文本或者links)

    可以直接使用

    text-align: center
    注意的是 这个只能用在该行内元素的父块元素上,  对于 inline , inline-block  , inline-table, inline-flex.
    
    
    1.2 如果是块元素
    
    
    如果该块元素已经有了width, 对margin-left 和 margin-right 设置 auto 即可
    最常见的应该就是
    
    
    margin:0 auto;

    值得注意的是 如果一个块元素是浮动的,你无法直接设置他为居中。

    
    
    1.3 多个块元素
    
    
    多个块元素排成一列 可以设置它们  display: inline-block;
    如果它们的父元素为 .main     
    直接设置
    .main { text-align: center }
    此时的三个元素的height 为因为内容不同 而不同。
    
    
    如果设置为
    
    
    .main {
      display: flex;
      justify-content: center;
    }
    
    
    三个块元素的 height 会设为等高···  这也是CSS3 新增的属性吧。


    二、垂直居中
    2.1 行内元素
    
    
    2.1.1 单行
          可以设置padding-top 和 padding-bottom 相同 则可达到目标, 如果你不想用padding, 可以使用 line-height
    让 line-height 和 height 相同即可,在《CSS权威指南》中发现还有行间距和行内框这个东西,line-height - font-size 
    再除以2 即为两端行间距····
    
    
    2.1.2 多行
        padding 仍然适用, 不过如果不想用这个的话 还有其他办法。  第一个办法 可以把它放在一个 table  中,设置为在一行一列中。 
    
    
    vertical-lign 也可以   让父元素 display: table;   再让p元素 display: table-cell.   
    
    
    vertical-align:middle;
    
    
    如果这个仍然不行,则可以适用FlexBox 

    父元素
     display: flex;
     justify-content: center;
     flex-direction:column;
    
    
    这个只适用于有固定高度的元素。 如果还不行,可以使用鬼元素···  这个主要是应用伪类元素替换容器的内侧
    
    
    .ghost-center {
      position: relative;
    }
    .ghost-center::before {
      content: " ";
      display: inline-block;
      height: 100%;
      width: 1%;
      vertical-align: middle;
    }
    .ghost-center p {
      display: inline-block;
      vertical-align: middle;
    }
    2.2 块元素

    2.2.1 如果已知道元素高度
    .parent {
      position: relative;
    }
    .child {
      position: absolute;
      top: 50%;
      height: 100px;
      margin-top: -50px; /* account for padding and border if not using box-sizing: border-box; */
    }

    父元素使用相对定位,子块元素用绝对定位时以父元素为基准, top:50%   此时字块元素左上顶点已到 父元素的中心, 再margin:(-height/2)  ,则会让子元素中心和父元素中心对齐。不过要注意考虑padding 和 border 的值,这会影响元素的总高度。

    2.2.2 如果不知元素高度

    .parent {
      position: relative;
    }
    .child {
      position: absolute;
      top: 50%;
      transform: translateY(-50%);
    }

    transform   是CSS的新属性,原理和上面一样····

    2.2.3 如果可以适用flexbox

    .parent {
      display: flex;
      flex-direction: column;
      justify-content: center;
    }
    嗯, 又是CSS3中的, 所有还是得好好学一下CSS3啊··


    三、垂直和水平一起居中

    3.1 如果元素有固定的宽度和高度
    .parent {
      position: relative;
    }
    
    .child {
      width: 300px;
      height: 100px;
      padding: 20px;
    
      position: absolute;
      top: 50%;
      left: 50%;
    
      margin: -70px 0 0 -170px;
    }

    原理同上一样,只是多加了一个水平方向的···

    3.2 如果不知道元素的具体宽度和高度值

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

    同上,使用了CSS3的 translate属性

    3.3 如果可以适用Flexbox 

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

    四: 总结

    你现在可以完全让元素居中了!



    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
  • 相关阅读:
    (转)视频编码标准汇总及比较
    (转)live555从RTSP服务器读取数据到使用接收到的数据流程分析
    (转)MPEG4码流简单分析
    H264裸流分析中,能获取哪些信息?
    (转)基于live555的流媒体代理转发服务器
    测试x264编码器的低延时编码和非延时编码
    ELK 日志分析系统
    Dubbox:来自当当网的SOA服务框架
    CHMOD命令怎么用?
    linux显示文件列表命令ls,使用ls --help列出所有命令参数
  • 原文地址:https://www.cnblogs.com/wanonder/p/6622086.html
Copyright © 2011-2022 走看看