Pytanie brzmi „Jak prawidłowo zamknąć tag <img>?” co jest prawdziwym pytaniem, a odpowiedzi są przydatne. To pytanie nie powinno być zamknięte.
3
Obecnie pytanie jest w porządku. To nie niejednoznaczne, niejasne jest niekompletne, zbyt szerokie, lub rhetorial. Poniżej znajduje się również świetna odpowiedź.
David J.
Nie wiem, która z poniższych odpowiedzi jest poprawna, ale co ciekawe, Inspektor kodu Firefoksa dodaje </img> na końcu tagu, jeśli go tam nie umieścisz. IE tego nie robi. To ma znaczenie w moim wszechświecie.
Chiwda
PS Dreamweaver wstawia znacznik /> XHTML.
Chiwda
Odpowiedzi:
50
<imgsrc='stackoverflow.png'/>
Działa dobrze i prawidłowo zamyka tag. Najlepiej dodać altatrybut dla osób niedowidzących.
To prawda, że <img />jest to poprawne w [X] HTML / XML, chociaż użycie XHTML jest obecnie bardzo rzadkie i jeśli twój serwer obsługuje strony text/html, jedyne, o co musisz się martwić, to pisanie prawidłowego HTML. Szanse na migrację aplikacji HTML do XHTML są bliskie zeru.
Fabrício Matté
1
Powyższa odpowiedź nie zostanie zweryfikowana za pomocą narzędzia do sprawdzania HTML W3C, jeśli jest kierowane na 4.01 Transitional i wyższe. Zobacz także usługę W3C Markup Validation Service . Uważam, że powyższa odpowiedź wymaga HTML5 lub XHTML. Aby uniknąć niepowodzeń walidacji, musisz skorzystać z tego <img src='stackoverflow.png'>(jeśli ma to dla Ciebie znaczenie).
jww
1
@ FabrícioMatté Poważnie nie doceniasz xhtml w rzeczywistym użyciu. Im większa firma, tym większe prawdopodobieństwo, że będzie pracować z xhtml zamiast html lub html5 sformatowanym jak xhtml (w celu łatwego / szybszego analizowania) lub pracujesz z innymi rzeczami, takimi jak mikrodane lub ulepszone znaczniki, takie jak ixbrl.
Robert McKee
Istnieje duża różnica między słowami „działa dobrze” i „określone” i nigdy nie znajdziesz specyfikacji HTML obwołującej użycie zamykającego ukośnika w tym tagu. Jak wspominali inni, dozwolone jest nie niszczenie witryn internetowych, które zostały pierwotnie napisane w celu używania XHTML / XML, ale nigdzie nie znajdziesz żadnych sformułowań ani przykładów wskazujących, że ich użycie jest potrzebne. W rzeczywistości znajdziesz sformułowanie stwierdzające, że nie ma znaczenia, a przeglądarki są poinstruowane, aby je zignorować!
Rob
Rob - 6 lat temu był problem. To naprawiło. Zgadnij, teraz przeglądarki są lepsze
Ed Heal
164
Ten jest prawidłowym HTML5 i jest całkowicie w porządku bez zamykania go. Jest to tak zwany element void:
<imgsrc='stackoverflow.png'>
Poniżej znajdują się prawidłowe znaczniki XHTML. Muszą być zamknięte. Ta ostatnia jest również dobra w HTML 5:
Jest to nie tylko poprawny HTML5, ale także poprawny w HTML4. Jak powiedziałeś, HTML nie wymaga samozamykających się elementów „void”. +1 za spójną odpowiedź.
Fabrício Matté,
2
HTML5 lub XHTML nie przejdzie walidacji za pomocą kontrolera HTML W3C, jeśli jest kierowany na 4.01 Transitional lub nowszy. Zobacz także usługę W3C Markup Validation Service . Musisz użyć jednego <img src='stackoverflow.png'>(jeśli to dla ciebie ważne).
jww
Komentowanie po wielu latach ... Zmyliłem się, widząc <img src="about:logo" alt="about:logo">tag na about:logostronie Firefox 76 ! Chociaż document.body.innerHTMLpokazuje <img src=\"about:logo\" alt=\"about:logo\">... Bardzo dobra odpowiedź ...
Częściowo dzieje się tak dlatego, że przeglądarki bardzo starają się poprawić błędy. Ponadto, ponieważ istnieje wiele nieporozumień dotyczących samozamykających się tagów i tagów void. Wreszcie specyfikacja uległa zmianie lub nie zawsze była jasna, a przeglądarki starają się być kompatybilne wstecz.
Tak więc, chociaż prawdopodobnie możesz uciec z dowolną z trzech opcji,
tylko pierwsza jest zgodna ze standardem HTML5 i gwarantuje, że przejdzie walidator HTML5.
Rozsądną strategią może być:
Napisz nowy kod bez zamykającego ukośnika.
Podczas ponownego faktorowania kodu aktualizuj pobliskie tagi obrazów w miarę ich napotykania.
Nie przejmuj się zbytnio znacznikami w starszych plikach, których nie dotykasz, chyba że zajdzie taka potrzeba.
Jest to technicznie niepoprawne. Samozamykający się void element jest całkowicie poprawny w html 5. Zobacz html.spec.whatwg.org/#start-tags, które sprawdzą się <img src='stackoverflow.png' />w każdej wersji XHTML i HTML 5.
Robert McKee
1
@RobertMcKee Nie, jest technicznie poprawne. Chociaż używanie zamykającego ukośnika jest dozwolone i nie będzie oznaczane jako błąd, nigdzie w żadnej specyfikacji HTML nie zobaczysz, że jest określony jako do użycia. Dozwolone jest nie niszczenie starszych witryn internetowych, które były oparte na XHTML / XML, ale nigdzie nie znajdziesz specyfikacji HTML pokazującej, słowami lub przykładem, użycie zamykającego ukośnika w tych tagach, w których są one określone przez W3C lub WHATWG.
Rob
@Rob Zgodnie z dokumentem WHATWG, do którego utworzyłem łącze powyżej w sekcji 12.1.2.1.6 - Then, if the element is one of the void elements, or if the element is a foreign element, then there may be a single U+002F SOLIDUS character (/). This character has no effect on void elements, but on foreign elements it marks the start tag as self-closing.img jest pustym elementem w sekcji 12.1.2
Robert McKee
1
@RobertMcKee Yes. To jest (część) specyfikacji wyjaśniającej, dlaczego ukośnik jest dozwolony (z powodów, które podałem w moim poprzednim komentarzu). Powinieneś jednak przyjrzeć się rzeczywistej specyfikacji tego elementu - w tym przypadku img - która jasno pokazuje słowami i przykładami, że nie jest wymagany ani określony żaden zamykający ukośnik. W rzeczywistości, bez sprawdzania tego, dalsze czytanie w tej sekcji wskaże, że zamykający ukośnik nie ma znaczenia, nic nie robi, a przeglądarki są zobowiązane do zignorowania go. Jest to więc bezużyteczne i bezcelowe i prowadzi nas z powrotem do mojego pierwotnego komentarza: zamykający ukośnik nie jest używany.
Rob
1
@Rob Tak, jest to opcjonalne, ale całkowicie ważne. Co sprawia, że stwierdzenie jest Actually, only the first one is valid in HTML5technicznie niepoprawne. Drugi jest również poprawny w HTML5. Nie jest wymagane, ale ważne. Nikt nie twierdzi, że jest to wymagane. Tyle tylko, że zgodnie ze specyfikacją, użycie samozamykającej się formy tagu jest ważne we wszystkich obecnych formach XHTML i HTML.
Robert McKee
2
Najlepsze wykorzystanie tagów, których powinieneś używać:
<imgsrc=""alt=""/>
Możesz również użyć w HTML5:
<imgsrc=""alt="">
Te dwa są całkowicie poprawne w HTML5. Wybierz jeden z nich i trzymaj się tego.
Pierwsza nie jest najlepsza, ponieważ nie jest określona w żadnym standardzie HTML, a druga tak. Pierwsza jest dozwolona tylko ze względów historycznych! (Zgodność z użyciem XHTML / XML w starszych witrynach internetowych, która zepsuje się, jeśli przeglądarki tego zabronią.)
Rob
Nie jestem pewien, co Rob próbuje tutaj powiedzieć, ale specyfikacja HTML określa, że pierwsza jest poprawna.
Robert McKee
2
Obie prawidłowa odpowiedź. HTML5 podlega ścisłym regułom, aw HTML5 możemy zamknąć wszystkie tagi. Od Ciebie zależy więc, czy użyjesz HTML5 lub HTML i zastosujesz odpowiednią odpowiedź.
Błędny. Pierwsza jest jedyną określoną w dowolnej specyfikacji HTML. Drugi jest dozwolony tylko ze względów historycznych, ale ponownie nie jest nigdzie określony jako wymagany.
Rob
1
-Tag jest pusty i zawiera tylko atrybut. -Tag nie ma tagu „zamykanie”.
Pierwszy jest poprawny! Drugi jest dozwolony tylko ze względów historycznych. (Zgodność z użyciem XHTML / XML w starszych witrynach internetowych może się zepsuć, jeśli przeglądarki tego zabronią)
Rob
1
Warto mieć znacznik zamykający, jeśli kiedykolwiek spróbujesz go odczytać za pomocą parsera XHTML. To może być skrajna sprawa, ale robię to cały czas. Posiadanie go nie szkodzi i oznacza, że wiem, że możemy użyć tablicy czytników XML, które nie upadną, gdy trafią w niezamknięty tag.
Jeśli nigdy nie zamierzasz analizować zawartości, zignoruj zamknięcie.
Odpowiedzi:
Działa dobrze i prawidłowo zamyka tag. Najlepiej dodać
alt
atrybut dla osób niedowidzących.źródło
<img />
jest to poprawne w [X] HTML / XML, chociaż użycie XHTML jest obecnie bardzo rzadkie i jeśli twój serwer obsługuje stronytext/html
, jedyne, o co musisz się martwić, to pisanie prawidłowego HTML. Szanse na migrację aplikacji HTML do XHTML są bliskie zeru.<img src='stackoverflow.png'>
(jeśli ma to dla Ciebie znaczenie).Ten jest prawidłowym HTML5 i jest całkowicie w porządku bez zamykania go. Jest to tak zwany element void:
Poniżej znajdują się prawidłowe znaczniki XHTML. Muszą być zamknięte. Ta ostatnia jest również dobra w HTML 5:
źródło
<img src='stackoverflow.png'>
(jeśli to dla ciebie ważne).<img src="about:logo" alt="about:logo">
tag naabout:logo
stronie Firefox 76 ! Chociażdocument.body.innerHTML
pokazuje<img src=\"about:logo\" alt=\"about:logo\">
... Bardzo dobra odpowiedź ...Właściwie tylko pierwszy jest prawidłowy w HTML5
Tylko ostatnie dwa są poprawne w XHTML
(Chociaż nie jest to ściśle wymagane,
alt
atrybut _zwykle_ powinien być również uwzględniony).To powiedziawszy, Twoja strona HTML5 będzie prawdopodobnie wyświetlana zgodnie z przeznaczeniem, ponieważ przeglądarki przepiszą lub zinterpretują Twój HTML tak, jak myślą, że miałeś na myśli. Które mogą oznaczać okazuje tag, na przykład, od
<div />
do<div></div>
. A może po prostu ignoruje ostatnie ukośnik<img ... />
.zobacz 2016: Obsługuj HTML5 jako XHTML 5.0 w celu weryfikacji starszych wersji.
zobacz: dyskusja 2011 i dodatkowe linki tutaj, chociaż z czasem niektóre fragmenty mogły się zmienić
Częściowo dzieje się tak dlatego, że przeglądarki bardzo starają się poprawić błędy. Ponadto, ponieważ istnieje wiele nieporozumień dotyczących samozamykających się tagów i tagów void. Wreszcie specyfikacja uległa zmianie lub nie zawsze była jasna, a przeglądarki starają się być kompatybilne wstecz.
Tak więc, chociaż prawdopodobnie możesz uciec z dowolną z trzech opcji,
tylko pierwsza jest zgodna ze standardem HTML5 i gwarantuje, że przejdzie walidator HTML5.
Rozsądną strategią może być:
Oto lista tagów, których nie należy zamykać w HTML5 :
źródło
<img src='stackoverflow.png' />
w każdej wersji XHTML i HTML 5.Then, if the element is one of the void elements, or if the element is a foreign element, then there may be a single U+002F SOLIDUS character (/). This character has no effect on void elements, but on foreign elements it marks the start tag as self-closing.
img jest pustym elementem w sekcji 12.1.2Actually, only the first one is valid in HTML5
technicznie niepoprawne. Drugi jest również poprawny w HTML5. Nie jest wymagane, ale ważne. Nikt nie twierdzi, że jest to wymagane. Tyle tylko, że zgodnie ze specyfikacją, użycie samozamykającej się formy tagu jest ważne we wszystkich obecnych formach XHTML i HTML.Najlepsze wykorzystanie tagów, których powinieneś używać:
Możesz również użyć w HTML5:
Te dwa są całkowicie poprawne w HTML5. Wybierz jeden z nich i trzymaj się tego.
źródło
Obie prawidłowa odpowiedź. HTML5 podlega ścisłym regułom, aw HTML5 możemy zamknąć wszystkie tagi. Od Ciebie zależy więc, czy użyjesz HTML5 lub HTML i zastosujesz odpowiednią odpowiedź.
Druga właściwość jest bardziej odpowiednia.
źródło
-Tag jest pusty i zawiera tylko atrybut. -Tag nie ma tagu „zamykanie”.
Więc,
oba są również poprawne w HTML5.
źródło
Warto mieć znacznik zamykający, jeśli kiedykolwiek spróbujesz go odczytać za pomocą parsera XHTML. To może być skrajna sprawa, ale robię to cały czas. Posiadanie go nie szkodzi i oznacza, że wiem, że możemy użyć tablicy czytników XML, które nie upadną, gdy trafią w niezamknięty tag.
Jeśli nigdy nie zamierzasz analizować zawartości, zignoruj zamknięcie.
źródło