At the moment, you are not hovering the ul because you have a space between the ul and :hover so it is adding background:red to all children elements of ul( which are li) when hovered. That's why you think you it is working with ul,

This is the real output of your code

.menu ul *:hover {background:red}

The :hover it will affect the paddingif that element has padding if not, it won't add padding, so if you want to have padding you have to :hover the li