From Everything You Know About CSS Is Wrong :
Anonymous Table Elements
CSS tables happily abide by the normal rules of table layout, which
enables an extremely powerful feature of CSS table layouts: missing
table elements are created anonymously by the browser. The CSS2.1
specification states:
Document languages other than HTML may not contain all the elements
in the CSS 2.1 table model. In these cases, the “missing” elements
must be assumed in order for the table model to work. Any table
element will automatically generate necessary anonymous table objects
around itself, consisting of at least three nested objects
corresponding to a “table”/“inline-table” element, a “table-row”
element, and a “table-cell” element.
What this means is that if we use display: table-cell;
without first
containing the cell in a block set to display: table-row;
, the row
will be implied—the browser will act as though the declared row is
actually there.
So no, there's nothing wrong with using display:table-cell
without containing display:table-row
. The CSS it produces is perfectly valid and has some very interesting use cases. For more info on using anonymous table Elements, see the article I'm quoting from.
Note :
The fact that it produces valid CSS doesn't mean that the behavior of display:table-cell
without display:table-row
or display:table-row
is stable. Even today (February 2016), the behavior of anoymous table elements remain inconsistent across browsers. See Inconsistent behavior of display: table and display: table-cell for more details.