Poprawnie wskazany znacznik to <fieldset>, bo właśnie jego w HTML5 używa się do logicznego grupowania powiązanych ze sobą elementów formularza. Z punktu widzenia semantyki HTML oznacza to, że informujesz zarówno przeglądarkę, jak i technologie asystujące (np. czytniki ekranu), że dane pola stanowią jedną spójną sekcję. To jest bardzo ważne przy większych formularzach, gdzie użytkownik łatwo może się zgubić. Typowy przykład to podział formularza na części typu „Dane osobowe”, „Adres dostawy”, „Dane do faktury” – każdą z tych sekcji dobrze jest otoczyć <fieldset>, a nagłówek sekcji umieścić w <legend>. Dzięki temu czytnik ekranu odczyta np. „Dane osobowe, grupa pól formularza”, a dopiero potem poszczególne etykiety. Moim zdaniem używanie <fieldset> to jedna z takich drobnych rzeczy, które bardzo poprawiają użyteczność i dostępność, a są często olewane w amatorskich projektach. W dokumentacji W3C i w wytycznych WCAG zaleca się semantyczne oznaczanie struktury formularza, właśnie między innymi z wykorzystaniem <fieldset> i <legend>. Dodatkowo przeglądarki domyślnie stylują <fieldset> ramką, więc od razu wizualnie widać grupę pól – oczywiście w CSS możesz to dowolnie przerobić, ale bazowy efekt jest całkiem sensowny. W praktyce możesz mieć np. taki kod: <form> <fieldset> <legend>Dane logowania</legend> <label>Login: <input type="text"></label> <label>Hasło: <input type="password"></label> </fieldset> </form> Takie podejście jest zgodne z dobrymi praktykami front-endu: kod jest czytelniejszy, łatwiej go utrzymać, a przy testach automatycznych czy walidacji HTML od razu widać strukturę formularza. W dużych aplikacjach webowych, np. panelach administracyjnych, sensowne grupowanie pól za pomocą <fieldset> naprawdę robi różnicę, szczególnie gdy formularz ma kilkanaście lub kilkadziesiąt kontrolek.
W tym pytaniu chodzi o semantykę HTML5 związaną z formularzami, więc warto spokojnie rozłożyć na czynniki wszystkie podane znaczniki. Częsty błąd polega na tym, że widząc kilka tagów kojarzonych luźno z formularzami, wybieramy któryś „na czuja”, zamiast zastanowić się, do czego dokładnie został zaprojektowany w specyfikacji HTML. Znacznik <summary> w ogóle nie służy do obsługi formularzy. Jest on elementem używanym wewnątrz <details> i odpowiada za nagłówek rozwijanego bloku. To bardziej narzędzie do tworzenia prostych elementów typu „pokaż/ukryj treść”, a nie do grupowania pól formularza. W formularzu można go użyć tylko jako zwykły element HTML, ale nie nadaje on żadnej specjalnej semantyki powiązanej z inputami czy etykietami. Znacznik <option> jest ściśle związany z kontrolką <select>. Reprezentuje pojedynczą opcję do wyboru w liście rozwijanej. On nie grupuje niczego, raczej sam jest elementem składowym większej struktury. Mylenie <option> z elementami grupującymi wynika często z tego, że w formularzach pojawia się dużo nawiasów ostrych i człowiek podświadomie kojarzy wszystkie z „formularzem”, ale rola <option> jest bardzo wąska: pojedyncza wartość w <select>. Z kolei <optgroup> faktycznie coś grupuje, ale tylko wewnątrz listy <select>. Umożliwia pogrupowanie opcji w logiczne sekcje, np. „Polska”, „Niemcy”, „Czechy” jako grupy krajów w jednym polu wyboru. To jednak nie jest ogólny mechanizm do grupowania różnych elementów formularza, tylko specjalistyczny element przeznaczony wyłącznie do porządkowania <option>. Dlatego nie zastąpi <fieldset>, który może otaczać wiele różnych kontrolek: inputy, selecty, textarea, przyciski itd. Podstawą dobrej odpowiedzi jest zrozumienie, że tylko <fieldset> ma w specyfikacji HTML5 jasno zdefiniowaną rolę „grouping form controls”. Pozostałe znaczniki pełnią inne, wyspecjalizowane funkcje i nie nadają całej grupie pól formularza właściwej semantyki ani nie współpracują tak dobrze z technologiami asystującymi. W praktyce, jeśli chcesz logicznie podzielić formularz na sekcje, zawsze myśl w pierwszej kolejności o <fieldset> + <legend>, a dopiero potem o innych elementach, które pełnią bardziej szczegółowe role.