const m = document.getElementsByTagName("main")[0],
table = document.getElementById("table"),
countInput = document.getElementById("count"),
sizeRadios = document.getElementsByName("size");
const vars = {
get size() {
return this._size;
},
set size(val) {
if (this._size === val) return;
this._size = val;
Array.from(sizeRadios).forEach(r => r.removeAttribute("checked"));
let tmp = document.querySelector(`input[type="radio"][name="size"][value="${val}"]`);
tmp.setAttribute("checked", "");
m.className = this._size;
},
get count() {
return this._count;
},
set count(val) {
if (this._count === val) return;
this._count = val;
countInput.value = val;
this.updateTable();
},
updateTable() {
const trs = table.querySelectorAll("tr");
for (const tr of trs) {
const tds = Array.from(tr.querySelectorAll("th, td"));
if (tds.length < this.count) {
return;
}
tds.forEach(td => td.classList.remove("start"));
tds[this.count - 1].classList.add("start");
}
}
};
Array.from(sizeRadios).forEach(radio => radio.addEventListener("change", e => {
if (!e.target.checked) return;
vars.size = e.target.value;
}));
countInput.addEventListener("input", e => {
vars.count = parseInt(countInput.value, 10);
});
vars.size = "medium";
vars.count = 2;
table {
width: 100%;
}
table th,
table td {
border: 1px solid black;
}
main:not(.default) table th,
main:not(.default) table td {
display: none;
}
/* Simulated Media Query Rules */
main.extra-small table th.start,
main.extra-small table td.start,
main.small table th.start,
main.small table td.start,
main.medium table th.start,
main.medium table td.start,
main.large table th.start,
main.large table td.start,
main.small table th.start+th,
main.small table td.start+td,
main.medium table th.start+th,
main.medium table td.start+td,
main.large table th.start+th,
main.large table td.start+td,
main.medium table th.start+th+th,
main.medium table td.start+td+td,
main.large table th.start+th+th,
main.large table td.start+td+td,
main.large table th.start+th+th+th,
main.large table td.start+td+td+td {
display: table-cell;
}
/* Media Query Rules */
main.media-query table th.start,
main.media-query table td.start {
display: table-cell;
}
@media (min-width: 768px) {
main.media-query table th.start,
main.media-query table td.start,
main.media-query table th.start,
main.media-query table td.start,
main.media-query table th.start+th,
main.media-query table td.start+td {
display: table-cell;
}
}
@media (min-width: 992px) {
main.media-query table th.start,
main.media-query table td.start,
main.media-query table th.start,
main.media-query table td.start,
main.media-query table th.start,
main.media-query table td.start,
main.media-query table th.start+th,
main.media-query table td.start+td,
main.media-query table th.start+th,
main.media-query table td.start+td,
main.media-query table th.start+th+th,
main.media-query table td.start+td+td {
display: table-cell;
}
}
@media (min-width: 1200px) {
main.media-query table th.start,
main.media-query table td.start,
main.media-query table th.start,
main.media-query table td.start,
main.media-query table th.start,
main.media-query table td.start,
main.media-query table th.start,
main.media-query table td.start,
main.media-query table th.start+th,
main.media-query table td.start+td,
main.media-query table th.start+th,
main.media-query table td.start+td,
main.media-query table th.start+th,
main.media-query table td.start+td,
main.media-query table th.start+th+th,
main.media-query table td.start+td+td,
main.media-query table th.start+th+th,
main.media-query table td.start+td+td,
main.media-query table th.start+th+th+th,
main.media-query table td.start+td+td+td {
display: table-cell;
}
}
<main>
<table id="table">
<caption>Table that will adjust how many colums are displayed based on screen size/controlling class.</caption>
<thead>
<tr>
<th>Column 1</th>
<th>Column 2</th>
<th>Column 3</th>
<th>Column 4</th>
<th>Column 5</th>
<th>Column 6</th>
</tr>
</thead>
<tbody>
<tr>
<td>a1</td>
<td>a2</td>
<td>a3</td>
<td>a4</td>
<td>a5</td>
<td>a6</td>
</tr>
<tr>
<td>b1</td>
<td>b2</td>
<td>b3</td>
<td>b4</td>
<td>b5</td>
<td>b6</td>
</tr>
<tr>
<td>c1</td>
<td>c2</td>
<td>c3</td>
<td>c4</td>
<td>c5</td>
<td>c6</td>
</tr>
</tbody>
</table>
<hr>
<div>
<p>Mock media query setter which applies a class to the <code><main></code> tag to simulate media queries.</p>
<ul>
<li><label><input type="radio" name="size" value="default"> <span>Default (all columns)</span></label></li>
<li><label><input type="radio" name="size" value="media-query"> <span>Media Query (follow MQ rules)</span></label></li>
<li><label><input type="radio" name="size" value="extra-small"> <span>Extra Small (1 column)</span></label></li>
<li><label><input type="radio" name="size" value="small"> <span>Small (2 columns)</span></label></li>
<li><label><input type="radio" name="size" value="medium"> <span>Medium (3 columns)</span></label></li>
<li><label><input type="radio" name="size" value="large"> <span>Large (4 columns)</span></label></li>
</ul>
</div>
<hr>
<div>
<p>Sets which column you are "focused" as in which column you have scrolled to.</p>
<label><span>Starting Column</span> <input id="count" type="number" min="1" value="3" step="1"></label>
</div>
</main>