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

  • 相关阅读:
    [py]str list切片-去除字符串首尾空格-递归思想
    [py]python面向对象的str getattr特殊方法
    [py]python多态-动态语言的鸭子类型
    [py]py2自带Queue模块实现了3类队列
    【Unity技巧】制作一个简单的NPC
    java7 新特性 总结版
    【游戏周边】Unity,UDK,Unreal Engine4或者CryENGINE——我应该选择哪一个游戏引擎
    【Unity Shaders】Transparency —— 使用alpha通道创建透明效果
    记录最近的几个bug
    理解WebKit和Chromium: 调试Android系统上的Chromium
  • 原文地址:https://www.cnblogs.com/can-i-do/p/12727849.html
Copyright © 2011-2022 走看看