I think the problem has to do with the transform property on the ribbon and the fact that it is positioned relatively... but the behavior is too strange for me to make sense of. It may be related to, or be similar to the fixed position bug that has been reported many times.
I have come up with the following work-around using borders instead of an overflow-clipped div:
First move the transforms to the div with overflow: hidden;
and remove position: relative;
from the ribbon. You should then see all the ribbons.
Second remove the background and padding from the ribbon and add borders like so:
border-bottom: 6px solid red;
border-top: 6px solid transparent;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
Finally all you have to do is position and size the wrapper. You could also remove overflow: hidden;
, but because you have a shadow on the ribbon I would leave it in.
Here is your adjusted jsfiddle that seems to be working (at least for me). :-)
And a Snippet for good measure:
.columns {
-webkit-column-width: 250px;
column-width: 250px;
width: 95%;
height: 440px;
}
body {
background: #ccc;
}
.box {
background: white;
position: relative;
width: 70px;
height: 100px;
margin: 10px 0;
}
.ribbon-wrapper {
width: 32px;
height: 12px;
overflow: hidden; /* remove this and the ribbons appear */
position: absolute;
right: -10px;
top: 0px;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
-o-transform: rotate(45deg);
}
.ribbon {
font: bold 15px Sans-Serif;
font-size: 8px;
text-align: center;
width: 20px;
-webkit-box-shadow: 0px 0px 3px rgba(0,0,0,0.3);
-moz-box-shadow: 0px 0px 3px rgba(0,0,0,0.3);
box-shadow: 0px 0px 3px rgba(0,0,0,0.3);
border-bottom: 6px solid red;
border-top: 6px solid transparent;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
}
<div class="columns">
<div class="box">
<div class="ribbon-wrapper">
<div class="ribbon">
</div>
</div>
</div>
<div class="box">
<div class="ribbon-wrapper">
<div class="ribbon">
</div>
</div>
</div>
<div class="box">
<div class="ribbon-wrapper">
<div class="ribbon">
</div>
</div>
</div>
<div class="box">
<div class="ribbon-wrapper">
<div class="ribbon">
</div>
</div>
</div>
<div class="box">
<div class="ribbon-wrapper">
<div class="ribbon">
</div>
</div>
</div>
<div class="box">
<div class="ribbon-wrapper">
<div class="ribbon">
</div>
</div>
</div>
</div>