Odpowiedź na pytanie pierwsze:
Na :hover dorzuć element :before (lub :after) o takich samych wymiarach, jak obrazek, a następnie nadaj mu tło w kolorze rgba() - w tym trybie możesz nadać kolor przezroczysty. Czyli: element:hover:before {}
Zawsze możesz zrobić coś w stylu (lepsze rozwiązanie, jeśli masz też tekst jakiś na tym)
<div>
<img>
<p>Tekst</p>
</div>
I domyślnie <p> jest ukryte (display: none), ale po zrobieniu :hover na div pokazuje się (display: block). Np. div:hover p { display: block; }. I ponownie - kolor rgba. Szczegóły użycia doczytasz w Google.
Co do drugiego pytania: poszukaj w Google czegoś pod hasłem "sticky menu" lub "js sticky menu"
I na przyszłość: możesz przecież zajrzeć w kod strony, którą podałeś :) Nie wiem, którego rozwiązania użył autor, ale moje propozycje na pewno się sprawdzą.