Safari双边缘Bug - CSS浮动布局

时间:2013-05-23 11:20:39

标签: css css3 safari

我制作了一个css布局,其中有一个列表,其中包含30个项目。每个li的宽度为9%,右边和底部边缘为1%。我从左到右在每一行上交替浮动方向,除了Safari之外,它在所有浏览器中看起来都很好,这是所有版本的safari。它似乎有双倍差距

可以看到问题here

非常感谢

HTML

<ul class="clearfix">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
    <li>7</li>
    <li>8</li>
    <li>9</li>
    <li>10</li>
    <li>11</li>
    <li>12</li>
    <li>13</li>
    <li>14</li>
    <li>15</li>
    <li>16</li>
    <li>17</li>
    <li>18</li>
    <li>19</li>
    <li>20</li>
    <li>21</li>
    <li>22</li>
    <li>23</li>
    <li>24</li>
    <li>25</li>
    <li>26</li>
    <li>27</li>
    <li>28</li>
    <li>29</li>
    <li>30</li>
</ul>

CSS

body {
    margin: 0;
    padding: 0;
}
* {
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
}
.clearfix:before, .clearfix:after {
    content: " ";
    display: table;
}
.clearfix:after {
    clear: both;
}
ul {
    margin: 0;
    padding: 0;
}
li {
    border: 1px solid rgba(1, 1, 1, 0.1);
    border-radius: 3px 3px 3px 3px;
    box-shadow: 1px 1px 0 #FFFFFF inset;
    float: left;
    height: 80px;
    list-style: none outside none;
    margin: 0 1% 1% 0;
    text-align: center;
    overflow: hidden;
    white-space: normal;
    width: 9%;
}
li:nth-child(n+11) {
    background: red;
    float: right;
}
li:nth-child(n+21) {
    background: blue;
    float: left;
}
li:nth-child(n+31) {
    background: red;
    float: right;
}
li:nth-child(n+41) {
    background: blue;
    float: left;
}

1 个答案:

答案 0 :(得分:2)

我认为这种行为是由Webkit如何处理子像素引起的。子像素是指您使用的宽度百分比不会作为整个像素结束。例如,什么是95px的50%?

所有浏览器都以自己的方式处理这个问题 - John Resig已经做了一些写作 - 但这里的问题可能是webkit将子像素向下舍入。如果你在Safari中调整渲染窗口的大小,你会发现缩进并不总是那么宽,它几乎缩回到原位,但在下一个子像素断点处,缩进再次变大。

那怎么解决呢?您可以定位11日/ 21/31日等li并给它一个更大的余量。当我尝试使用jsfiddle时,1.2%似乎没问题。我担心我无法提出更清洁的解决方案。