2013-02-11 88 views
0

我想創建一個列數量的響應式佈局,間隔均勻地與他們兩邊的16px填充/邊距。流體/液體佈局 - 多列填充/任何一方的邊距

如果我有3列,每列的寬度自然會被設置爲33%,然而,每列之間有16px的間隙,這會佔到100%以上。

使用CSS,JavaScript或PHP ...我將如何能夠實現這一目標?

body { 
    font: 0.75em Arial, Helvetica, san-serif; 
    background: #CCC; 
} 
p {margin-bottom: 12px;} 
h1 { 
    font: 1.25em Arial, Helvetica, san-serif; 
    font-weight: bold; 
    color: teal; 
    text-transform: uppercase; 
    margin-bottom: 12px; 
} 

#wrapper { 
    background: #FFF; 
    width: 75%; 
    margin: 0 auto; 
    padding: 32px; 
} 

.one-third {???} 

http://jsfiddle.net/Jed8D/

謝謝。

+0

我的提示是使用像LESS(http://lesscss.org)或SASS(http://sass-lang.com)這樣的CSS預處理程序。您可以輕鬆地將值分配給變量,並自動計算寬度。 – Sven 2013-02-11 09:28:23

+0

爲什麼不使用保證金:x%? – 2013-02-11 09:30:13

+0

@Akam - 我需要在每列之間特別設置一個16像素的空白...在調整瀏覽器大小時,使用距離的百分比會導致間隙的變化結果。斯文 - 我會看看這個,看起來不錯,謝謝。 – user1752759 2013-02-11 10:46:12

回答

1

能否通過計算功能輕鬆完成在css3中。試試這個:

.one-third { 
    width: calc((100% - 32px)/3); //Where 100% is the width of container - 32px is the margin between two columns (16px + 16px) - 3 is the number of columns 
    float: left; 
    margin-right: 16px; 
} 

.one-third:nth-child(3n+3){ 
    margin-right: 0px; 
} 

您可以使用計算()來計算在CSS中的像素大小或百分比。和n-child將幫助刪除每個第三列的保證金(假設您可能有更多的多個3列行)。

+1

http://jsfiddle.net/6Ab9Q/嘗試並修改小提琴中結果選項卡的寬度以查看效果。我認爲這是你想要的。 – 2013-02-11 12:28:18

+0

美麗的解決方案@ Jehanzeb.Malik! – user1752759 2013-02-11 15:33:01

+0

@ user1752759:同樣的解決方案,我已經給上述用戶使用jQuery的,這是完全兼容的所有瀏覽器,而CSS3是不是但你已經投了下來,你發現這個答案很漂亮?這是否公平? – Aratidgr8 2013-02-12 07:14:46

0

這是您的css

.one-third { 
    float: left; 
    padding: 16px; 
    width: 29%; 
} 

,但你需要畢竟one-third div

創建wrapper中的元素是<div class="clrboth"></div>

cssclrboth

.clrboth{clear:both;}

工作的例子是http://jsfiddle.net/Jed8D/2/ [注:寬度可在小提琴可以有所不同,因爲它具有低寬度,檢查它在一個頁面上會工作,只要你想。]

+0

儘量避免在IE中使用邊框和填充(特別是在IE7中)。這些都有已知的問題,應儘可能避免。 – 2013-02-11 11:19:11

-1

下面的代碼會做要緊,因爲它計算頁面加載的列寬。沒有硬編碼的值。

的Javascript

<script type="text/javascript"> 

$(document).ready(function(){ 

    var wrapperW = $("#wrapper").width(); 

    /* (Wrapper width - gap * nos.of columns) divided by nos.of columns  */ 
    var availableW = Math.floor((wrapperW - 16 * 3)/3);  

    $(".one-third").width(availableW); 

}); 

</script> 

CSS

<style type="text/css"> 

body { 
    font: 0.75em Arial, Helvetica, san-serif; 
    background: #CCC; 
} 

p {margin-bottom: 12px;} 

h1 { 
    font: 1.25em Arial, Helvetica, san-serif; 
    font-weight: bold; 
    color: teal; 
    text-transform: uppercase; 
    margin-bottom: 12px; 
} 

#wrapper { 
    background: #FFF; 
    width: 75%; 
    margin: 0 auto; 
    padding: 32px; 
} 

.one-third { margin:8px; float:left; } /* Important change */ 

</style> 

HTML

<div id="wrapper"> 
<div class="one-third"> 
    <header class="entry-header"> 
     <h1 class="entry-title">Column One Title</h1> 
    </header> 
<p>Phasellus commodo velit risus. Vivamus nunc lectus, molestie vel interdum ut, gravida congue lorem. Sed elementum lorem et dolor gravida in imperdiet quam lacinia. Aenean iaculis, elit vitae iaculis malesuada, nulla risus lobortis nulla, ut lacinia risus enim ut arcu. Duis ac ligula enim, eget consequat odio. Nunc condimentum arcu et erat dignissim at consequat lorem tincidunt. In quis consectetur orci. Quisque elit lectus, feugiat vitae sollicitudin in, lacini a ac velit.</p> 
<p>Nam laoreet purus at turpis sollicitudin ut tincidunt nulla dapibus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin egestas tristique nunc et suscipit. In hac habitasse platea dictumst. Cras nec lacus arcu. Cras ligula quam, facilisis sit amet tristique non, ullamcorper ut dolor.</p> 
<p>Donec posuere mi at urna congue non rutrum leo hendrerit. Nulla tempor vehicula eros, vitae ornare sem ornare eu. Etiam ultricies tristique malesuada. Maecenas pellentesque sem eu metus vulputate molestie. Nullam fringilla mauris eget metus imperdiet vulputate. Vivamus vulputate pretium tortor et commodo. Sed in volutpat lectus. Nam tincidunt blandit nunc, nec tincidunt mauris tempor ut. Nulla eu mattis nisl. Quisque pretium convallis venenatis. Praesent varius orci nec justo posuere porttitor sollicitudin ligula imperdiet. Cras fermentum mauris dolor. Proin at nunc turpis.</p> 
<p>Morbi elit lorem, consectetur sed ullamcorper nec, viverra eu eros. Aenean molestie pellentesque ante facilisis pretium. Donec id mauris urna, at ornare lacus. Phasellus vel mattis magna. Phasellus at nisl ut metus ornare interdum a ac justo. Etiam suscipit lobortis tellus, vel lacinia neque placerat sed. In dictum, dui eget varius laoreet, ante ante semper orci, vel pulvinar mi velit eget lectus. Etiam ut odio ut dui consequat ullamcorper. Vestibulum sollicitudin scelerisque accumsan.</p> 
</div> 

<div class="one-third"> 
    <header class="entry-header"> 
     <h1 class="entry-title">Column Two Title</h1> 
    </header> 
<p>Phasellus commodo velit risus. Vivamus nunc lectus, molestie vel interdum ut, gravida congue lorem. Sed elementum lorem et dolor gravida in imperdiet quam lacinia. Aenean iaculis, elit vitae iaculis malesuada, nulla risus lobortis nulla, ut lacinia risus enim ut arcu. Duis ac ligula enim, eget consequat odio. Nunc condimentum arcu et erat dignissim at consequat lorem tincidunt. In quis consectetur orci. Quisque elit lectus, feugiat vitae sollicitudin in, lacini a ac velit.</p> 
<p>Nam laoreet purus at turpis sollicitudin ut tincidunt nulla dapibus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin egestas tristique nunc et suscipit. In hac habitasse platea dictumst. Cras nec lacus arcu. Cras ligula quam, facilisis sit amet tristique non, ullamcorper ut dolor.</p> 
<p>Donec posuere mi at urna congue non rutrum leo hendrerit. Nulla tempor vehicula eros, vitae ornare sem ornare eu. Etiam ultricies tristique malesuada. Maecenas pellentesque sem eu metus vulputate molestie. Nullam fringilla mauris eget metus imperdiet vulputate. Vivamus vulputate pretium tortor et commodo. Sed in volutpat lectus. Nam tincidunt blandit nunc, nec tincidunt mauris tempor ut. Nulla eu mattis nisl. Quisque pretium convallis venenatis. Praesent varius orci nec justo posuere porttitor sollicitudin ligula imperdiet. Cras fermentum mauris dolor. Proin at nunc turpis.</p> 
<p>Morbi elit lorem, consectetur sed ullamcorper nec, viverra eu eros. Aenean molestie pellentesque ante facilisis pretium. Donec id mauris urna, at ornare lacus. Phasellus vel mattis magna. Phasellus at nisl ut metus ornare interdum a ac justo. Etiam suscipit lobortis tellus, vel lacinia neque placerat sed. In dictum, dui eget varius laoreet, ante ante semper orci, vel pulvinar mi velit eget lectus. Etiam ut odio ut dui consequat ullamcorper. Vestibulum sollicitudin scelerisque accumsan.</p> 
</div> 

<div class="one-third"> 
    <header class="entry-header"> 
     <h1 class="entry-title">Column Three Title</h1> 
    </header> 
<p>Phasellus commodo velit risus. Vivamus nunc lectus, molestie vel interdum ut, gravida congue lorem. Sed elementum lorem et dolor gravida in imperdiet quam lacinia. Aenean iaculis, elit vitae iaculis malesuada, nulla risus lobortis nulla, ut lacinia risus enim ut arcu. Duis ac ligula enim, eget consequat odio. Nunc condimentum arcu et erat dignissim at consequat lorem tincidunt. In quis consectetur orci. Quisque elit lectus, feugiat vitae sollicitudin in, lacini a ac velit.</p> 
<p>Nam laoreet purus at turpis sollicitudin ut tincidunt nulla dapibus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin egestas tristique nunc et suscipit. In hac habitasse platea dictumst. Cras nec lacus arcu. Cras ligula quam, facilisis sit amet tristique non, ullamcorper ut dolor.</p> 
<p>Donec posuere mi at urna congue non rutrum leo hendrerit. Nulla tempor vehicula eros, vitae ornare sem ornare eu. Etiam ultricies tristique malesuada. Maecenas pellentesque sem eu metus vulputate molestie. Nullam fringilla mauris eget metus imperdiet vulputate. Vivamus vulputate pretium tortor et commodo. Sed in volutpat lectus. Nam tincidunt blandit nunc, nec tincidunt mauris tempor ut. Nulla eu mattis nisl. Quisque pretium convallis venenatis. Praesent varius orci nec justo posuere porttitor sollicitudin ligula imperdiet. Cras fermentum mauris dolor. Proin at nunc turpis.</p> 
<p>Morbi elit lorem, consectetur sed ullamcorper nec, viverra eu eros. Aenean molestie pellentesque ante facilisis pretium. Donec id mauris urna, at ornare lacus. Phasellus vel mattis magna. Phasellus at nisl ut metus ornare interdum a ac justo. Etiam suscipit lobortis tellus, vel lacinia neque placerat sed. In dictum, dui eget varius laoreet, ante ante semper orci, vel pulvinar mi velit eget lectus. Etiam ut odio ut dui consequat ullamcorper. Vestibulum sollicitudin scelerisque accumsan.</p> 
</div> 

<br style="clear:both;" /> <!-- Important Addition --> 

</div> 
+0

http://jsfiddle.net/szFS8/這看起來不錯嗎?如果是這樣,則不再有流體柱。 – user1752759 2013-02-11 10:54:42

+0

這絕對是一個流體佈局,因爲它會根據CSS中以百分比形式提到的#wrapper的寬度計算.one-third div的寬度。 – Aratidgr8 2013-02-11 13:46:53