I believe this is a misunderstanding of how the :nth-of-type selector works. The .box selector doesn't restrict the :nth-of-type selector. It acts as an additional sub filter. In this case all odd divs are selected and then of those odd divs, ones with the box class are styled.
In your example, the odd divs in this case are:
<div>
<div class="box">1</div> <!-- Odd -->
<div class="box">2</div>
<div class="box">3</div> <!-- Odd -->
<div class="box">4</div>
<div class="splitter">splitter</div> <!-- Odd -->
<div class="box">1</div>
<div class="box">2</div> <!-- Odd -->
<div class="box">3</div>
<div class="splitter">splitter</div> <!-- Odd -->
<div class="box">1</div>
<div class="box">2</div> <!-- Odd -->
<div class="box">3</div>
<div class="box">4</div> <!-- Odd -->
<div class="box">5</div>
<div class="box">6</div> <!-- Odd -->
<div class="box">7</div>
<div class="box">8</div> <!-- Odd -->
</div>
However, of those odd divs listed above, only these:
<div>
<div class="box">1</div> <!-- Odd w/ class box -->
<div class="box">2</div>
<div class="box">3</div> <!-- Odd w/ class box -->
<div class="box">4</div>
<div class="splitter">splitter</div>
<div class="box">1</div>
<div class="box">2</div> <!-- Odd w/ class box -->
<div class="box">3</div>
<div class="splitter">splitter</div>
<div class="box">1</div>
<div class="box">2</div> <!-- Odd w/ class box-->
<div class="box">3</div>
<div class="box">4</div> <!-- Odd w/ class box -->
<div class="box">5</div>
<div class="box">6</div> <!-- Odd w/ class box -->
<div class="box">7</div>
<div class="box">8</div> <!-- Odd w/ class box-->
</div>
Match the additional filter requirements being that they must also contain the class box.
Example:
Below is an example of how you can accomplish this using several :nth-child selectors to create css ranges. This is helpful if you're not able to alter your HTML structure as some of the other answers suggest:
.box {
width: 48%;
float: left;
height: 30px;
background: #ccc;
}
.box:nth-child(n+1):nth-child(odd):nth-child(-n+4),
.box:nth-child(n+6):nth-child(even):nth-child(-n+8),
.box:nth-child(n+10):nth-child(even):nth-child(-n+17),
.box:nth-child(n+19):nth-child(odd):nth-child(-n+21){
margin-right: 4%;
background-color: red;
}
.splitter {
width: 100%;
float: left;
}
<div>
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
<div class="box">4</div>
<div class="splitter">splitter</div>
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
<div class="splitter">splitter</div>
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
<div class="box">4</div>
<div class="box">5</div>
<div class="box">6</div>
<div class="box">7</div>
<div class="box">8</div>
<div class="splitter">splitter</div>
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
</div>
Note: The above markup is slightly more extensive than that provided in your question. It's based off of your full jsfiddle markup instead of the shortened version contained in your question.
Here is your fiddle updated to contain the changes shown above.