Zgodnie z regułami walidacji HTML5, poprawnym zapisem znacznika hr jest
Znacznik <hr> jest poprawnym zapisem w HTML5, ponieważ należy do tzw. elementów pustych, czyli void elements. Taki element nie ma treści wewnątrz i nie wymaga znacznika zamykającego. W praktyce <hr> tworzy tematyczną przerwę w dokumencie, najczęściej renderowaną jako pozioma linia oddzielająca fragmenty treści. Dawniej często traktowano go czysto wizualnie, ale w HTML5 ma też znaczenie semantyczne: oznacza zmianę tematu, przejście do innej części tekstu albo rozdzielenie sekcji. Moim zdaniem to fajny przykład, że HTML nie służy tylko do „rysowania” strony, ale też do opisywania sensu treści. Poprawne użycie może wyglądać tak: akapit z opisem produktu, potem <hr>, a niżej osobna sekcja z opiniami użytkowników. Zgodnie z dobrymi praktykami nie dopisujemy do niego </hr>, bo standard HTML5 tego nie przewiduje. Jeśli chcemy zmienić wygląd linii, robimy to przez CSS, np. ustawiając kolor, marginesy albo grubość obramowania.
W tym pytaniu łatwo pomylić składnię HTML z zasadami znanymi z XML albo XHTML, gdzie dużo większy nacisk kładzie się na jawne zamykanie elementów. W HTML5 znacznik <hr> jest elementem pustym, więc nie zawiera tekstu ani innych znaczników w środku. Z tego powodu nie zapisuje się dla niego znacznika końcowego w stylu </hr>. Taki zapis sugerowałby, że wcześniej został otwarty element, który teraz trzeba zamknąć, a w przypadku hr ta logika po prostu nie działa. Przeglądarka może czasem próbować „naprawić” błędny kod, ale walidator HTML5 potraktuje takie konstrukcje jako niepoprawne albo co najmniej niezgodne z oczekiwaną składnią. Zapisy z odstępem po ukośniku, takie jak </ hr>, są dodatkowo błędne składniowo, bo nazwa znacznika musi występować bezpośrednio po znaku < albo po sekwencji </ w przypadku znacznika zamykającego. Wariant z dziwnym znakiem zapytania również nie ma sensu w HTML, bo nie tworzy poprawnego znacznika i wygląda raczej jak pomieszanie z instrukcjami przetwarzania z XML. Częsty błąd myślowy polega na założeniu, że każdy znacznik HTML trzeba zamknąć parami. Nie każdy. Elementy takie jak <br>, <img>, <input> czy właśnie <hr> są wyjątkami. Z mojego doświadczenia warto zapamiętać je jako elementy, które same w sobie wykonują jedną konkretną funkcję i nie potrzebują zawartości.