I would use the grid system to keep your actual structure which is not yet implemented in boostrap.
see for more information : https://css-tricks.com/snippets/css/complete-guide-grid/ http://gridbyexample.com/
mind the support too https://caniuse.com/#search=grid
The idea is to set a grid of 4 columns and make some of your elements spanning through 2 colums and 2 rows.
CSS to use for a grid child:
grid-row:auto /span 2;
grid-column:auto / span 2;
demo, second or third & fith
section {
float: left;
border:solid;
width: 40%;
margin: 0.5em;
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-template-rows:repeat(4, 1fr);
grid-auto-flow: dense;
grid-gap: 0.5em;
padding: 0.5em;
counter-reset: divs
}
div {
background: teal;
counter-increment: divs;
min-height: 10vw;
display: flex;
align-items: center;
justify-content: center;
font-size: 5vw;
color: white;
}
div:before {
content: counter(divs)
}
section:first-of-type div:nth-child(2) {
grid-row: auto /span 2;
grid-column: auto / span 2;
}
section+section div:nth-child(3),
section+section div:nth-child(5){
grid-row: auto /span 2;
grid-column: auto / span 2;
}
<section>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</section>
<section>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</section>
or span through the grid on hover only on hover :
section {
width:40%;
margin:auto;
display:grid;
grid-template-columns:repeat(4, 1fr);
grid-gap:0.5em;
padding:0.5em;
counter-reset:divs
}
div {
background:teal;
counter-increment:divs;
min-height:10vw;
display:flex;
align-items:center;
justify-content:center;
font-size:5vw;
color:white;
}
div:before {
content:counter(divs)
}
div:hover{
grid-row:auto /span 2;
grid-column:auto / span 2;
}
<section>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</section>