• 113.CSS怪象记录


    记录一下曾经遇见的css怪象,不如你也来看看,搜一搜我们曾经遇见的坑。

    坑位一:inline-block

    坑位1.1:inline-block和多出的空白。

    <div class="father">
      <div class="box">1</div>
      <div class="box">2</div>
    </div>
    

    我们发现这里的 1 和 2,其中会差 4px 的距离;如下:

    解决方案:
    一、父级设置 font-size 为0,子级再重新设置字体大小(该方案在 Safari 上不生效!!可惜了)

    .father {
      font-size: 0;
    }
    .box {
      display: inline-block;
      font-size: 16px;
    }
    

    效果如下,我们发现 Safari 上问题没有被解决:

    二、超级兼容的解决方案(老实说我也是现在查了才发现Safari竟然不兼容解决方案一!!!):
    a.使用父级 font-size:0 的方式兼容 Chrome 和 火狐;
    b.使用 letter-space: -Npx; 的方式来兼容 Safari;

    .father {
      font-size: 0;
      letter-spacing: -4px;
    }
    .box {
      display: inline-block;
      font-size: 16px;
      letter-spacing: normal;
    }
    

    这一次,在chrome和safari等大多数浏览器解决了

    坑位1.2:inline-block和元素上浮。

    <style>
      div {
        display: inline-block;
         100px;
        height: 100px;
        text-align: center;
        font-size: 12px;
      }
      .box-1 {background-color: #5bc2e7;}
      .box-2 {background-color: #6980c5;}
      .box-3 {background-color: #70dfdf;}
      .box-4 {background-color: #f7f6ee;}
      .box-5 {background-color: #385466;}
    </style>
    </head>
    <body>
      <div class="box-1">#5bc2e7;</div>
      <div class="box-2"></div>
      <div class="box-3"></div>
      <div class="box-4">#f7f6ee</div>
      <div class="box-5">#385466</div>
    </body>
    

    该问题出现的原因是因为 inline和inline-block元素是 是基于 baseline(vertical-align) 对齐。
    A.有文字的 inline-block 元素 baseline 为文字底部
    B.没有文字(或者 img)的 inline-block 元素是块的底部

    解决方案:
    设置大家的 vertilcal-align 为 top 即解决了

    div {
      vertical-align: top;
    }
    

    坑位1.3:inline-block和移动端的垂直居中问题:在安卓浏览器中

    原因:安卓的字体排版问题导致。
    解决方案:
    我是建议还是换一种垂直居中的方式

    display: flex;
    height: 30px;
    align-items: center;
    

    坑位1.4:css设置多行文字超出省略后部分文字被遮挡

    <style>
      #box {
        display: -webkit-box;
        -webkit-line-clamp: 2;
        overflow: hidden;
        text-overflow: ellipsis;
        -webkit-box-orient: vertical;
        background: #089e8a;
        height: 36px;
      }
    </style>
    </head>
    <body>
      <div id="box">
        1.使用纯css3 实现方法: 一个外国的网站实现的纯CSS多行超出隐藏加省略号。 $font-size: 26px; $line-height: 1.4; $lines-to-show: 3; h2 { ...
          2.使用伪元素加绝对定位 实现方法: p { position:relative; line-height:20px; max-height:40px; overflow:hidden; } p::after {...
      </div>
    </body>
    

    下图为以上代码的效果,我们发现其中有一部分文字被挡住了,这样的体验是很糟糕的。

    解决方案:
    使用多行省略的时候,要注意 height 要为每行高度的整数倍。
    height = n * line-height
    添加代码如下

    #box {
      display: -webkit-box;
      -webkit-line-clamp: 2;
      overflow: hidden;
      text-overflow: ellipsis;
      -webkit-box-orient: vertical;
      background: #089e8a;
      height: 36px;
      /* 以下为添加代码 */
      line-height: 18px;
    }
    

    正确效果


    坑位二:关于 absolute-left

    当然也有可能不是坑;不过很奇怪的是有时候在 PC端的时候是没错的,到了移动端就错了==;
    坑点:在 absolute 中,left: auto; = left: 50%; ???(也许是我才疏学浅的错误认知,我一直以为 left:auto 与 left:0是一致的)

    <ul class="ul">
      <li class="li active">1</li>
      <li class="li">2</li>
    </ul>
    <style>
      ul,
      li {
        list-style: none;
        margin: 0;
        padding: 0;
      }
      .ul {
         300px;
      }
      .li {
        position: relative;
        box-sizing: border-box;
        display: inline-block;
         100px;
        border: 1px solid #089e8a;
      }
      .li.active::after {
        position: absolute;
        content: '';
        bottom: -2px;
        height: 2px;
         100%;
        background: cornflowerblue;
      }
    </style>
    

    现象如下(不设置 left 的结果):

    所以,以后,为了实现效果,我将会显示设置 left: 0;


    continue.

  • 相关阅读:
    Mysql源代码分析系列(2): 源代码结构转载
    Python 元组、列表、字典、文件
    Mysql源代码分析系列(1): 编译和调试转载
    ETL测试参考文档
    MySql select into与set的区别
    STL container
    mysqlclient5.0.2614 RPM for ppc
    linux多线程的总结(pthread用法)
    给线程变量pthread_t *thread动态分配空间
    当SQL数据库日志文件已满,或者日志很大,怎么办
  • 原文地址:https://www.cnblogs.com/can-i-do/p/12727849.html
Copyright © 2020-2023  润新知