zoukankan      html  css  js  c++  java
  • 代码间距的由来和解决方法

    先来个简约版的,抛弃了那些老古董之后

    抛弃ie6-7,ie8(Q),safari 5.x,先用font-size:0;清除掉间距,再给子元素恢复字体大小,并且恢复默认间距vertical-align:top;不是必须的

    .yui-g {

      font-size:0;

    }
    .yui-u {

      display: inline-block;
      font-size: 12px;

          letter-spacing: normal;
      vertical-align:top;

    }

    基于yui3的改版,抛弃了ie6~7

    .yui3-g {
        letter-spacing: -0.31em; 
        word-spacing: -0.43em; 
    }
    .yui3-u {
        display: inline-block;
        letter-spacing: normal;
        word-spacing: normal;
        vertical-align: top;
    }

    YUI3 原版 兼顾了ie6~8以及safari
    YUI 3.5.1 (build 22)
    .yui3-g {
        letter-spacing: -0.31em; /* webkit: collapse white-space between units */
        *letter-spacing: normal; /* reset IE < 8 */
        word-spacing: -0.43em; /* IE < 8 && gecko: collapse white-space between units */
    }
    
    .yui3-u {
        display: inline-block;
        zoom: 1; *display: inline; /* IE < 8: fake inline-block */
        letter-spacing: normal;
        word-spacing: normal;
        vertical-align: top;
    }

    飘准解析,block和inline元素,设置样式为display:inline-block之后兄弟元素间会有一定量的代码间距,默认大约3~6px之间

    默认为inline的元素也是会有这个代码间距的,最简单粗暴的解决方法:ugly.js这样的代码压缩插件。

    由来:space,tab,form feed, return feed等等各种折行空格会产生代码间距,这个间距的大小由该元素继承到的font-size大小计算而来,一般是为父元素基础字体宽的一般,比如body { font-size: 12px;} 那么这个间距有可能就是5px或者4px等等,不同的浏览器解析会有所不同

    HTML 中的换行符、空格符、制表符等产生了空白符,而这些归根结底都是字符,那么它们的大小都是 受 font-size 来控制的,字体大小直接导致 inline 或者 inline-block 后元素之间空隙的大小,把 inline-block 元素间的空隙认为总是某个固定大小是错误的。

    方法:设置父元素font-size: 0;整个世界都清净了,然后给子元素恢复字体大小就好了,然而safari 5.0 ago 这是什么鬼,我不懂,所以还得为其加上一句 letter-space: -5px;

     

    使用 font-size:0经测试发现,.dib-wrap {
    font-size:0;/* 所有浏览器 */
    *word-spacing:-1px;/* IE6、7 */
    }
    .dib-wrap .dib{
    font-size: 12px;
    letter-spacing: normal;
    word-spacing: normal;/*for ie 6-7  1px*/
    vertical-align:top;
    }
    @media screen and (-webkit-min-device-pixel-ratio:0){
    /* firefox 中 letter-spacing 会导致脱离普通流的元素水平位移 */
    .dib-wrap{
    letter-spacing:-5px;/* Safari 等不支持字体大小为 0 的浏览器, N 根据父级字体调节*/
    }
    }
    .dib {
    display: inline-block;
    *display:inline;  /*for ie 6-7 or ie8(Q)  */
    *zoom:1; /*for ie 6-7 or ie8(Q) */
    }

    淘宝原版

    @media screen and (-webkit-min-device-pixel-ratio:0){
    /* firefox 中 letter-spacing 会导致脱离普通流的元素水平位移 */
    .dib-wrap{
    letter-spacing:-5px;/* Safari 等不支持字体大小为 0 的浏览器, N 根据父级字体调节*/
    }
    }

    可以缩写为

    [;letter-spacing:-5px;]合并么?
    .dib-wrap {
    font-size:0;/* 所有浏览器 */

    [;letter-spacing:-5px;]
    *word-spacing:-1px;/* IE6、7 */
    }

     参考来源http://ued.taobao.org/blog/2012/08/inline-block/#comment-246109

  • 相关阅读:
    mysql and与or连用时遇到的坑
    mysql : 使用不等于过滤null的问题
    Bio Nio demo
    线上服务器的cpu使用达到100%了,如何排查、定位和解决该问题?
    二叉查找树、平衡二叉树、B树、B+树、聚集索引、非聚集索引
    java实现折线图统计数据
    递归构造树
    python中获取json数组中的具体数值(调用百度AI返回的json数据)
    python中使用ajax回调函数限制
    python+flask框架——前后端数据传递
  • 原文地址:https://www.cnblogs.com/Aladingding/p/5125166.html
Copyright © 2011-2022 走看看