It is better from a clean code point of view but slower to parse than having a classname directly on the element.
When checking from right to left .className is matched immediately whereas div p em will take three passes to find the correct style to apply (e.g. em is found but does it have a parent that is a p element? If yes then does it have a parent that is a div? and so on.
Also is the p necessary here? Why not div em? And if you are saying div em then you may as well say just em because div em will hit more or less everything on the page anyway.
As a general rule its better to avoid using em.classname but just to use .classname (although I will occasionally use the selector to aid readability from the stylesheet). However there is rarely ever a need to say div.classname unless you are trying to be too clever and re-use the same class with different styles on different elements. Just use a different classname.
Keep your rules and paths as short as possible and avoid things like div.classname ul li ul li a{styles} when in fact .classname li li a{} will reach the same element.
Everything is a trade off between what is sensible and what is fastest. In most pages neatly written css doesn’t have to be messed with to gain speed improvements as other areas will gain more results.