2 min read

使用 YUI3 网格的注意事项

letter-spacing 取值

YUI3 网格 使用 display:inline-block; 布局网页。

inline-block 元素间存在间隙,这间隙由空白符引起,而空白符的宽度又由字体集决定,YUI3 使用 letter-spacingword-spacing 消除间隙:

.yui3-g {
    letter-spacing: -0.31em; /* Webkit: collapse white-space between units */
    *letter-spacing: normal; /* reset IE < 8 */
    *word-spacing: -0.43em; /* IE < 8: collapse white-space between units */
    text-rendering: optimizespeed; /* Webkit: fixes text-rendering: optimizeLegibility */
}

/* Opera as of 12 on Windows needs word-spacing.
   The ".opera-only" selector is used to prevent actual prefocus styling
   and is not required in markup.
*/
.opera-only :-o-prefocus,
.yui3-g {
    word-spacing: -0.43em;
}

.yui3-u {
    display: inline-block;
    zoom: 1; *display: inline; /* IE < 8: fake inline-block */
    letter-spacing: normal;
    word-spacing: normal;
    vertical-align: top;
    text-rendering: auto;
}

但 YUI3 中,letter-spacingword-spaceing 取值基于字体集 Arial,这就有一种可能:一旦类定义的字体集被覆写,有可能破坏布局。

比如:

<div class="yui3-g main">
    <div class="yui3-u-1-2 bgc-r">red background</div>
    <div class="yui3-u-1-2 bgc-g">green background</div>
</div>
<div class="yui3-g main-mirror">
    <div class="yui3-u-1-2 bgc-r">red background</div>
    <div class="yui3-u-1-2 bgc-g">green background</div>
</div>
<style>
    .bgc-r {
        background:red;
    }
    .bgc-g {
        background:green;
    }
    .main-mirror {
        font-family:Courier;
    }
</style>

因为 .yui3-gfont-family.main-mirror 覆写,本该并列的第二列却脱落到下一行:

我们显然无法保证自己或他人不会覆写 .yui3-g 的字体集,这种不可预测性,会造成麻烦。

目前,在这个问题上,还没有银子弹存在。

一个妥协办法,是强制声明 .yui3-g 字体集为默认。

.yui3-g{font-family: Arial;}

然后在 yui3-uyui3-u-*-* 中声明我们要使用的字体:

.yui3-u,
.yui3-u-1,
.yui3-u-1-2,
.yui3-u-1-3,
.yui3-u-2-3,
.yui3-u-1-4,
.yui3-u-3-4,
.yui3-u-1-5,
.yui3-u-2-5,
.yui3-u-3-5,
.yui3-u-4-5,
.yui3-u-1-6,
.yui3-u-5-6,
.yui3-u-1-8,
.yui3-u-3-8,
.yui3-u-5-8,
.yui3-u-7-8,
.yui3-u-1-12,
.yui3-u-5-12,
.yui3-u-7-12,
.yui3-u-11-12,
.yui3-u-1-24,
.yui3-u-5-24,
.yui3-u-7-24,
.yui3-u-11-24,
.yui3-u-13-24,
.yui3-u-17-24,
.yui3-u-19-24,
.yui3-u-23-24 {
  font-family: 宋体,Arial;
}

IE6、7次像素问题

IE6、7浏览器下,0.5~1的像素会四舍五入成1像素,破坏流式布局。

举个例子,301宽度的块,定义两个子块,类名为 .yui3-u-1-2,在 IE6、7下,右侧子块会掉落,而不是并排:

解决办法见这个链接

参考

  1. grids spacing wrong without Arial on pure-g, pure-g-r
  2. CSS Grid 2 column layout, columns not appearing side by side.
  3. Inline-block and white space in the grid
  4. YUI 支持的浏览器
报告问题 修订