ref: 494dcd504bd6ebb68b59e8a04057b0a087570d38 uglyduck.srht.site/_posts/2019-07-17-styling-empty-table-cells.md -rw-r--r-- 4.1 KiB
494dcd50 — Bradley Taunt tweaking overall design - still very much a WIP 8 months ago

Often when designing tables on the web you're bound to come across empty pockets of data. These will be rendered as "blank" table cells, which isn't always the intended outcome. Let's take a quick look at how to target and style empty table cells.

#The easy :empty way

The most popular way to target any empty element is by using - you guessed it - the empty pseudo-class. This pseudo-class is incredibly simple. You target an element's empty state that same way you would target hover or active:

table tr td:empty {
    opacity: 0;

Check out the CodePen examples below for more advanced styling options:

See the Pen Styling Empty Tables Cells with :empty by Bradley Taunt (@bradleytaunt) on CodePen.

You can also include additional pseudo elements to give the user more context about what the empty cells represent:

See the Pen Styling Empty Tables Cells with :empty & pseudo elements by Bradley Taunt (@bradleytaunt) on CodePen.

#More specific empty-cells property

Although using the :empty pseudo-class can be helpful, it isn't used just for tables. It can be used for any HTML elements that have a lack of content. So, is there a CSS specific property that can target just table cells?

Let's take a look at the empty-cells property:

table {
    empty-cells: hide;

See the Pen Styling Empty Tables Cells with empty-cells property by Bradley Taunt (@bradleytaunt) on CodePen.

Pros of using empty-cells:

  • Only one CSS property
  • Targets the table elements specifically
  • No need for custom styles since it simply hides empty cell borders

Some downsides to using this property:

  • No styling customization
  • Trickier to use pseudo-element helpers without invoking the :empty state

#Pick your preference

It doesn't matter semantically which option you decide to take when styling / hiding empty table cells. Using the :empty state gives you a lot more flexibility in terms of what you can target (full rows, columns etc), but using the empty-cells property let's you simply hide the cells and focus on more important items.