We can actually generate a multiplication table using CSS generated content. We start with a basic table with ten rows and ten cells on each row:
<table summary="Multiplication table"> <caption>Multiplication table</caption> <tr id="one"> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr id="two"> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr id="three"> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr id="four"> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr id="five"> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr id="six"> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr id="seven"> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr id="eight"> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr id="nine"> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> <tr id="ten"> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr> </table>
We have ten different IDs on ten rows. Now we can add a progressive numeration using CSS counters:
tr#one {
counter-reset: one;
}
tr#one>td:before {
counter-increment: one;
content: counter(one);
}
tr#two {
counter-reset: two;
}
tr#two>td:before {
counter-increment: two 2;
content: counter(two);
}
tr#three {counter-reset: three;}
tr#three>td:before {
counter-increment: three 3;
content: counter(three);
}
tr#four {counter-reset: four;}
tr#four>td:before {
counter-increment: four 4;
content: counter(four);
}
tr#five {counter-reset: five;}
tr#five>td:before {
counter-increment: five 5;
content: counter(five);
}
tr#six {counter-reset: six;}
tr#six>td:before {
counter-increment: six 6;
content: counter(six);
}
tr#seven {counter-reset: seven;}
tr#seven>td:before {
counter-increment: seven 7;
content: counter(seven);
}
tr#eight {counter-reset: eight;}
tr#eight>td:before {
counter-increment: eight 8;
content: counter(eight);
}
tr#nine {counter-reset: nine;}
tr#nine>td:before {
counter-increment: nine 9;
content: counter(nine);
}
tr#ten {counter-reset: ten;}
tr#ten>td:before {
counter-increment: ten 10;
content: counter(ten);
}
As you can see, each row has its own counter (one, two, three and so on). Each counter is first reset and then incremented by a progressive factor (2, 3, 4, 5 etc.) so that each cell show the desired numerical progression. We use the :before pseudo-element to insert each number inside its own cell. You can see the final result
here.