'Fair' can mean any light-colored hair - blond or light brown (sometimes called 'dirty blonde').
'Blond' refers to straw-colored (yellow or lighter) hair color.
'Fair' also refers to light-colored skin, whereas 'blond' only refers to hair.
'Fair' can also mean pleasing to look at, though it is used more in older English.
I have read in some research that long ago, 'fair' used to refer to a woman that had no smallpox scars, back when smallpox was a major disease. The usage has obviously changed over the years.