W HTML semantyka znacznika ma znaczenie: element nie tylko zmienia wygląd, ale też opisuje sens treści. Do zapisania tekstu "nieprawidłowego" lub "nieodpowiedniego" w formie przekreślonej służy <s>. Standard HTML opisuje go jako treść, która nie jest już dokładna albo nie jest już odpowiednia, ale pozostaje widoczna dla kontekstu (np. stara cena, dawny termin).
Odpowiedź "<s> </s>" jest poprawna, bo dokładnie odpowiada temu przeznaczeniu: wizualnie daje efekt przekreślenia i jednocześnie niesie informację semantyczną o nieaktualności/nieadekwatności treści.
Pozostałe propozycje są błędne, bo dotyczą innych znaczeń:
- "<b> </b>" oznacza tekst stylistycznie wyróżniony (najczęściej pogrubiony), ale bez semantyki "nieaktualne/niepoprawne". To nie jest znacznik przekreślenia.
- "<em> </em>" służy do zaakcentowania (emfazy). Zwykle renderuje się jako kursywa, ale sens to nacisk w wypowiedzi, nie skreślenie.
- "<sub> </sub>" tworzy indeks dolny (np. H2O). Nie jest związany z oceną poprawności treści ani z przekreśleniem.
W praktyce warto też rozróżniać <s> od <del>: <del> opisuje treść usuniętą w ramach zmiany/redakcji dokumentu, natomiast <s> wskazuje, że informacja jest nieaktualna lub nieodpowiednia (bez implikacji "usunięto ją z dokumentu"). Jeśli potrzebujesz tylko efektu wizualnego, można użyć CSS (np. text-decoration), ale wtedy tracisz semantykę.