Margin установлен в значении 0. Но есть отступ над div. Как исправить?
Писать * {
  margin: 0;
  padding: 0;
}
- плохая практика.
Рано или поздно Вы столкнетесь с другими проблемами, связанными с разным отображением тегов.
В наше время есть более адекватная и полная замена сему: гуглите reset css
Например: habrahabr.ru/post/45296
В статье заодно прочитайте для чего это нужно, чтобы просто втупую не копипастить, так как судя по Вашей активности Вы все же хотите учиться.Однако, и это уже считается плохой практикой, и вместо сбрасывания стилей рекомендуют нормализовать стили, гуглите normalize css
Например: www.kobzarev.com/makeup/normalization-of-css-with-...
Там же написано чем это лучше, чем сбрасывание стилей.
Несмотря на то, что тут много текста, для Вас все это значит, что в начале страницы Вы подключаете или reset.css, или normalize.css - то есть для Вас это даже меньше работы.
* {
  margin: 0;
  padding: 0;
}
или body {
  margin: 0;
  padding: 0;
}