I have a page with multiple items, which have a 33.33% width to fill up the complete width of the page. However, I want to add a 20px margin between the items (both vertically and horizontally, but vertically is the problem here), but just adding a 20px margin on the right of each 1st and 2nd item in a row, destroys the complete page. (remove the commented-out CSS from the fiddle to see what I mean).
JSfiddle
Now, the question: How do I add a 20px margin and make sure all .item
divs keep the same size? I could play with the percentage of the width and adding the removed width of an .item
as a margin, but this would never be a steady 20px, since, well, it's percentages.
HTML
<div id="main">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
<div class="item">7</div>
<div class="item">8</div>
<div class="item">9</div>
<div class="item">10</div>
<div class="item">11</div>
<div class="item">12</div>
</div>
CSS
#main .item {
height: 100px;
width:33.33%;
float:left;
text-align: center;
}
#main .item:nth-child(3n+1) {
background: red;
}
#main .item:nth-child(3n+3) {
background: yellow;
}
#main .item:nth-child(3n+2) {
background:lightblue;
}
/*.item:nth-child(3n+1), .item:nth-child(3n+2) {
margin-right: 20px !important;
}*/
You can combine fixed value and percentage values in the CSS margin property. Negative values are allowed in the CSS margin property. When the value is provided as a percentage, it is relative to the width of the containing block. See also margin-top, margin-bottom, margin-left, and margin-right.
Using inline-block property: Use display: inline-block property to set a div size according to its content.
The width and height properties include the content, padding, and border, but do not include the margin.
Pixel is a static measurement, while percent and EM are relative measurements. Percent depends on its parent font size. EM is relative to the current font size of the element (2em means 2 times the size of the current font).
You could use calc()
to subtract the 20px
from 33.33%
.
In this case, you would use width: calc(33.33% - 20px)
to displace the margins.
Updated Example
#main .item:nth-child(3n+1),
#main .item:nth-child(3n+2) {
width: calc(33.33% - 20px);
margin-right: 20px;
}
Unfortunately, this will result in elements of differing widths (since the 20px
isn't being subtracted from all the elements). A better solution would be to subtract 13.33px
from all the elements (40px
/3px
):
Updated Example
#main .item {
height: 100px;
width: calc(33.33% - 13.33px);
float:left;
text-align: center;
}
Change the width of each .item
class and calculate it using the calc()
#main .item {
height: 100px;
width:calc(33.33% - 20px);
float:left;
text-align: center;
}
Fiddle
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With