You might need to change the order of your cell displays
but the following appears to be close to what you want.
Note, it uses a combination of flexbox and grid displays
and it is responsive to the size of the screen.
<!DOCTYPE html><html lang="en"><head><title> Test Page </title>
<meta charset="UTF-8">
<meta name="viewport" content="width-device-width,initial-scale=1.0, user-scalable=yes"/>
<!-- From: https://stackoverflow.com/questions/62799173/highlight-column-on-css-grid
see also: https://codeburst.io/css-grid-layout-simple-guide-e0296cf14fe8
-->
<!-- link rel="stylesheet" href="common.css" media="screen" -->
<style>
.wrapper {
display: flex;
flex-wrap: wrap;
width: 80%;
margin: 0 auto;
}
.container {
display: grid;
grid-template-columns: 200px;
grid-template-rows: 200px 200px 200px;
}
.container > div {
border: 1px solid #000;
text-align: center;
}
.bdr { border: 3px solid red; }
</style>
</head><body>
<div class="wrapper">
<div class="container">
<div class="cell1">1</div>
<div class="cell2">2</div>
<div class="cell3">3</div>
</div>
<div class="container">
<div class="cell4">4</div>
<div class="cell5">5</div>
<div class="cell6">6</div>
</div>
<div class="container bdr">
<div class="cell7">7</div>
<div class="cell8">8</div>
<div class="cell9">9</div>
</div>
</div>
<script>
</script>
</body></html>
If you add the following you can change the border of the selected column.
<script>
console.clear();
function highlite(evnt, picks) {
for(var i=0; i<picks.length; i++) { picks[i].classList.remove('bdr'); }
evnt.target.parentElement.classList.add('bdr');
// console.log(evnt.target.tagName+' : '+evnt.target.classList+' : '+evnt.target.parentElement.classList);
}
function init() {
const sel = document.getElementsByClassName('container');
for (var i=0; i<sel.length; i++) {
sel[i].addEventListener('click', (e) => highlite(e,sel));
}
} init();
</script>