2012-07-25 198 views
0

所以,我试图让一些内容很好地适合另一个容器。让我的CSS框看起来正确的百分比宽度和边距。

我的CSS:(也称“测试”收件箱的ID =“resultBox”)

#resultBox{ 
    display: block; 
    position:absolute; 
    width:20%; 
    margin:0px; 
    padding:0px; 
} 

但是这看起来不错,这一切都局促,但是,我希望这是每行5盒,有没有一种方法可以给出一个边距,并使其自动调整宽度%?

图片相关:顶部是我想要的边距,但底部是我想要的行为。 enter image description here

+0

所以你想要5个盒子,每个盒子有1px的余量? – ohiock 2012-07-25 22:44:34

+0

我知道这可能听起来像亵渎一些,但你有没有考虑过使用表?毕竟,表格是为了呈现表格数据而设计的。你也应该使用一个类来应用你的样式,而不是一个ID。 Id的设计是独特的,而不是多个元素的相同ID。 – 2012-07-25 22:45:00

+0

那么你是否有多个具有相同ID的元素,或者我读错了。如果你这样做,那么你应该改变它,因为ID是一个唯一的标识符,并且应该只用于每页一个元素。改为使用班级。您还可以将边距设置为1%等百分比,并将这些元素本身的宽度设置为19%。 – 2012-07-25 22:45:26

回答

1

那这台无表的实现?

http://jsfiddle.net/Wexcode/xKj8n/

<div id="table"> 
    <div class="row"> 
     <div><span>Test</span></div> 
     <div><span>Test</span></div> 
     <div><span>Test</span></div> 
     <div><span>Test</span></div> 
     <div><span>Test</span></div> 
    </div> 
</table> 

编辑:

你也可以做到这一点没有行,如果你愿意sacrifice compatibility with IE8和使用nth-child()选择(你总是可以申请使用JavaScript类):

http://jsfiddle.net/Wexcode/xKj8n/2/

<div id="table"> 
    <div><span>Test</span></div> 
    <div><span>Test</span></div> 
    <div><span>Test</span></div> 
    <div><span>Test</span></div> 
    <div><span>Test</span></div> 
</div>​ 
+0

这也堆叠了一点使用'.row {clear:both;}清除'.row'级别的浮动时更好。 }':http://jsfiddle.net/Wexcode/xKj8n/1/ – Wex 2012-07-25 23:30:11

1

像你想通过使用outline你可以模拟保证金:

#resultBox { 
    ... 
    outline: 1px solid white; 
    ... 
} 

这种方式,您将有每个块的视觉清晰度,不会撞上最右边的一个下到下一行。

+0

这种方法仍然会看起来有点奇怪.. – Adola 2012-07-25 22:49:44

2

如果你只支持新的浏览器,然后使用box-sizing: border-box

这将包括宽度内的边距和边框。不要使用边距,使用边框来提供间距的外观。

参见:https://developer.mozilla.org/en/CSS/box-sizing

+0

[没有兼容性IE7或之前](http://caniuse.com/#feat=css3-boxsizing),但这很漂亮[跨浏览器友好](http://www.w3schools.com/browsers/browsers_explorer.asp)。 – Wex 2012-07-25 23:37:18

0

您可以尝试在正确的使用box-sizing: border-box与1px的边框和底部,但您还需要使用:nth-child从最右边的框中删除多余的1px。

.box 
{ 
    width: 20%; 
    float: left; 
    border-radius: 3px; 
    padding: 5px; 
    border-right: solid 1px #fff; 
    border-bottom: solid 1px #fff; 
    -webkit-box-sizing: border-box; 
    -moz-box-sizing: border-box; 
    -ms-box-sizing: border-box; 
    box-sizing: border-box; 
    background-color: #ccc; 
} 

.box:nth-child(5n) 
{ 
    border-right: 0; 
} 

http://jsfiddle.net/Pf2LZ/

这应该在合理的浏览器和IE8 +工作。只有IE8(我认为)由于缺少对:nth-child的支持而在右侧会有一个额外的像素。如果这是一个问题,你总是可以每隔五分钟增加一个班级。

+0

尽管我可以在jsfiddle中看到这个工作,但这不适用于我的代码。我现在有点亏了... – Adola 2012-07-25 22:57:14

0

如果您尝试显示表格数据,您应该真的在使用表格。

td { 
    width: 20%; 
    text-transform:uppercase; } 

HTML:

<table> 
    <tr> 
     <td>Test</td> 
     <td>Test</td> 
     <td>Test</td> 
     <td>Test</td> 
     <td>Test</td> 
    </tr> 
    <tr> 
     <td>Test</td> 
     <td>Test</td> 
     <td>Test</td> 
     <td>Test</td> 
     <td>Test</td> 
    </tr> 
</table> 
+0

这会增加一些复杂性,因为这些框是使用jQuery的砌体插件生成的。 – Adola 2012-07-25 22:59:15

+0

将这项工作 - 这个工作 - 也可以堆叠一点点 - http://stackoverflow.com/questions/11659744/get-my-css-boxes-to-look-correct-with-percentage-width-and-margin/11660008#11660008 – Wex 2012-07-25 23:09:46