:not(:empty) - da war was. Ich hatte mich auf "es gibt kein :has()" fokussiert und diesen Ausnahmeselektor vergessen.
Es geht aber auch ganz ohne explizite Border, wenn man mit Buttons arbeitet und sie so gestyled lässt wie sie vom Browser geschaffen wurden. Nur die Größe muss man etwas tweaken.
table {
border-collapse: collapse;
}
td {
width: 2em; height: 2em; padding: 0;
background-color: white;
}
button {
padding: 0;
width: calc(100% + 1px); height:calc(100% + 1px);
}
Rolf