Fair generally refers to the skin tone, and blond, to the color of the hair. Of course, we do say "fair-haired," which means having "light or blond hair."
If you simply say "she is fair," people will almost invariably think you are talking about her skin color. On the other hand, saying that "she is blond" will cause no ambiguity. To make sure it is understood that you are referring to the color of the hair, it is best to use expressions that include the word "hair" - such as "he is fair-haired," or "his hair is fair."
In the US, "fair-haired" also has a secondary meaning "to be well-liked or admired."
E.g., "an athlete who was once the fans' fair-haired boy" means that the athlete was once the fans' favorite, and not that he was once blond.