2016-03-04 150 views
0

我正在尝试仅使用HTML和CSS构建一个非常简单的时间轴。具有百分比宽度的多个HTML元素

这是我的代码:

.timebox { 
 
    float: left; 
 
    height: 2px; 
 
    background: #7D80E6; 
 
    position:absolute; 
 
} 
 

 
.timeboxhour { 
 
    width: 4.16%; 
 
    float: left; 
 
    height: 2px; 
 
    background: #eee; 
 
    color: #666; 
 
    font-size: 0.8em; 
 
    text-align: left; 
 
}
<div id="timeline" style="background: #fff;width: 100%;height: 2px;margin: 0 auto;"> 
 
<div class="timebox" style="margin-left:0%;width:1.04%;"></div> 
 
<div class="timebox" style="margin-left:4.16%;width:1.04%;"></div> 
 
<div class="timebox" style="margin-left:8.32%;width:1.04%;"></div> 
 
<div class="timebox" style="margin-left:12.48%;width:1.04%;"></div> 
 
<div class="timebox" style="margin-left:16.64%;width:1.04%;"></div> 
 
<div class="timebox" style="margin-left:20.8%;width:1.04%;"></div> 
 
<div class="timebox" style="margin-left:24.96%;width:1.04%;"></div> 
 
<div class="timebox" style="margin-left:29.12%;width:1.04%;"></div> 
 
<div class="timebox" style="margin-left:33.28%;width:1.04%;"></div> 
 
<div class="timebox" style="margin-left:37.44%;width:1.04%;"></div> 
 
<div class="timebox" style="margin-left:41.6%;width:1.04%;"></div> 
 
<div class="timebox" style="margin-left:45.76%;width:1.04%;"></div> 
 
<div class="timebox" style="margin-left:49.92%;width:1.04%;"></div> 
 
<div class="timebox" style="margin-left:54.08%;width:1.04%;"></div> 
 
<div class="timebox" style="margin-left:58.24%;width:1.04%;"></div> 
 
<div class="timebox" style="margin-left:62.4%;width:1.04%;"></div> 
 
<div class="timebox" style="margin-left:66.56%;width:1.04%;"></div> 
 
<div class="timebox" style="margin-left:70.72%;width:1.04%;"></div> 
 
<div class="timebox" style="margin-left:74.88%;width:1.04%;"></div> 
 
<div class="timebox" style="margin-left:79.04%;width:1.04%;"></div> 
 
<div class="timebox" style="margin-left:83.2%;width:1.04%;"></div> 
 
<div class="timebox" style="margin-left:87.36%;width:1.04%;"></div> 
 
<div class="timebox" style="margin-left:91.52%;width:1.04%;"></div> 
 
<div class="timebox" style="margin-left:95.68%;width:1.04%;"></div> 
 
</div> 
 

 

 
<div id="timelinehours" style="background: #fff;width: 100%;height: 2px;margin: 0 auto;"> 
 
<div class="timeboxhour" >0</div> 
 
<div class="timeboxhour" >1</div> 
 
<div class="timeboxhour" >2</div> 
 
<div class="timeboxhour" >3</div> 
 
<div class="timeboxhour" >4</div>  
 
<div class="timeboxhour" >5</div>  
 
<div class="timeboxhour" >6</div> 
 
<div class="timeboxhour" >7</div> 
 
<div class="timeboxhour" >8</div> 
 
<div class="timeboxhour" >9</div>  
 
<div class="timeboxhour" >10</div> 
 
<div class="timeboxhour" >11</div>  
 
<div class="timeboxhour" >12</div> 
 
<div class="timeboxhour" >13</div> 
 
<div class="timeboxhour" >14</div>  
 
<div class="timeboxhour" >15</div> 
 
<div class="timeboxhour" >16</div> 
 
<div class="timeboxhour" >17</div> 
 
<div class="timeboxhour" >18</div>  
 
<div class="timeboxhour" >19</div> 
 
<div class="timeboxhour" >20</div>  
 
<div class="timeboxhour" >21</div> 
 
<div class="timeboxhour" >22</div>  
 
<div class="timeboxhour" >23</div> 
 
</div>

你可以看到它在行动上JS Fiddle

时间轴宽度为100%,4.16%为一小时(100/24 = 4.16)。 小蓝条宽度为1.04%,因此代表15分钟。

但正如你所看到的,因为蓝色条并不总是在正确的地方就不能很好地工作:

有人可以解释我的问题吗?

+1

提示:四舍五入。 – jcaron

回答

3

position:relative;添加到您的#timeline

1

这是一个舍入问题。由于width的值以百分比表示,因此它计算为8.81463px之类的数字,然后浏览器将其舍入到9px。对于一个元素它不应该是一个问题,但如果它是24个元素,8.81463px * 24给出211.55px,而9px * 24给出216px正如你所看到的,它差不多是5px。已经@NiZa提到

为,它可以通过添加position: relative;#timeline元素来解决,但我认为一个更好的解决办法是使用Flexbox的。

见你的时间表的示例实现:

#timeline { 
 
    display: flex; 
 
    background: #fff; 
 
    width: 100%; 
 
    height: 2px; 
 
    margin: 0 auto; 
 
} 
 
.timebox { 
 
    height: 2px; 
 
    background: #7D80E6; 
 
    width: 1.04%; 
 
    margin-right: auto; 
 
} 
 
#timelinehours { 
 
    display: flex; 
 
    background: #fff; 
 
    width: 100%; 
 
    height: 2px; 
 
    margin: 0 auto; 
 
} 
 
.timeboxhour { 
 
    height: 2px; 
 
    background: #eee; 
 
    color: #666; 
 
    font-size: 0.8em; 
 
    text-align: left; 
 
    flex: 1; 
 
}
<div id="timeline"> 
 
<div class="timebox"></div> 
 
<div class="timebox"></div> 
 
<div class="timebox"></div> 
 
<div class="timebox"></div> 
 
<div class="timebox"></div> 
 
<div class="timebox"></div> 
 
<div class="timebox"></div> 
 
<div class="timebox"></div> 
 
<div class="timebox"></div> 
 
<div class="timebox"></div> 
 
<div class="timebox"></div> 
 
<div class="timebox"></div> 
 
<div class="timebox"></div> 
 
<div class="timebox"></div> 
 
<div class="timebox"></div> 
 
<div class="timebox"></div> 
 
<div class="timebox"></div> 
 
<div class="timebox"></div> 
 
<div class="timebox"></div> 
 
<div class="timebox"></div> 
 
<div class="timebox"></div> 
 
<div class="timebox"></div> 
 
<div class="timebox"></div> 
 
<div class="timebox"></div> 
 
</div> 
 

 

 
<div id="timelinehours"> 
 
<div class="timeboxhour" >0</div> 
 
<div class="timeboxhour" >1</div> 
 
<div class="timeboxhour" >2</div> 
 
<div class="timeboxhour" >3</div> 
 
<div class="timeboxhour" >4</div>  
 
<div class="timeboxhour" >5</div>  
 
<div class="timeboxhour" >6</div> 
 
<div class="timeboxhour" >7</div> 
 
<div class="timeboxhour" >8</div> 
 
<div class="timeboxhour" >9</div>  
 
<div class="timeboxhour" >10</div> 
 
<div class="timeboxhour" >11</div>  
 
<div class="timeboxhour" >12</div> 
 
<div class="timeboxhour" >13</div> 
 
<div class="timeboxhour" >14</div>  
 
<div class="timeboxhour" >15</div> 
 
<div class="timeboxhour" >16</div> 
 
<div class="timeboxhour" >17</div> 
 
<div class="timeboxhour" >18</div>  
 
<div class="timeboxhour" >19</div> 
 
<div class="timeboxhour" >20</div>  
 
<div class="timeboxhour" >21</div> 
 
<div class="timeboxhour" >22</div>  
 
<div class="timeboxhour" >23</div> 
 
</div>

您可以了解更多关于Flexbox的从A Complete Guide to Flexbox在CSS-技巧或MDN docs