:empty will match all given elements because the node element, which contains nothing but comment nodes, essentially matches the node element without any CSS related children. That is why you do not see the difference between the matches.
The difference is that :blank corresponds to elements that consist solely of whitespace characters that are not otherwise considered :empty . This is because node nodes are just text nodes that contain only white space, and an element with node child text is not an empty element.
It is important to note that CSSWG is considering changing :empty so that it matches elements that contain only spaces, eliminating the need for a separate class alias :blank . This was decided just a few weeks ago . Therefore :blank , as shown in the current WD, may or may not exist in the next WD, which they plan to publish shortly after seeing that the WD was last updated more than two years ago.
If this happens, the answer to this question will be:
:blank was the original suggestion for choosing level 4 to match elements that either have no content or contain only spaces. It has since been removed, and its functionality has been included in level 4 :empty , eliminating the need for a separate class alias with an alias.
source share