Ściśle mówiąc, czy style
tagi muszą znajdować się wewnątrz head
dokumentu HTML? Sugeruje to standard 4.01, ale nie jest to wyraźnie określone:
Element STYLE umożliwia autorom umieszczanie reguł arkusza stylów w nagłówku dokumentu. HTML dopuszcza dowolną liczbę elementów STYLE w sekcji HEAD dokumentu.
Mówię „ściśle mówiąc”, ponieważ mam aplikację, która umieszcza elementy stylu w treści, a wszystkie przeglądarki, z którymi testowałem, wydają się używać elementów stylu. Zastanawiam się tylko, czy to rzeczywiście legalne.
html
coding-style
html-head
eaolson
źródło
źródło
style
w programiebody
, więc jest to dla mnie wystarczająco dobre, niezależnie od tego, co sugerują sekcje ze wskazówkami autora.Odpowiedzi:
style
ma znajdować się tylko nahead
dokumencie.Oprócz punktu weryfikacji, jednym zastrzeżeniem, które może Cię zainteresować podczas korzystania
style
z aplikacji na stronie,body
jest flashowanie niestylizowanych treści . Przeglądarka otrzymywałaby elementy, które byłyby stylizowane po ich wyświetleniu, powodując ich zmianę rozmiaru / kształtu / czcionki i / lub migotania. Na ogół jest to oznaka złego rzemiosła. Generalnie możesz uciec od umieszczania wstyle
dowolnym miejscu, ale staraj się tego unikać, gdy tylko jest to możliwe.HTML 5 wprowadził
scoped
atrybut, który umożliwiał umieszczaniestyle
tagów w każdym miejscu w treści, ale potem ponownie go usunął.źródło
scoped
atrybut, patrz caniuse.com/#feat=style-scoped .style
tagi,body
więc pomimo części specyfikacji dotyczącej autora, uważam style treści za prawidłowe. github.com/whatwg/html/issues/1605#issuecomment-235961103Krótka odpowiedź
Zgodnie z aktualną specyfikacją tak,
style
elementy muszą zawsze znajdować się whead
. Nie ma wyjątków (z wyjątkiemstyle
elementu wewnątrztemplate
elementu , jeśli chcesz to policzyć).Nie zawsze tak było w przeszłości. Jeśli zależy Ci na szczegółach specyfikacji i jej historii, czytaj dalej.
Bez względu na to, co mówi specyfikacja, używanie
style
elementów w programiebody
działa mniej więcej we wszystkich głównych przeglądarkach. Jednak jest to uważane za złą praktykę, zarówno dlatego, że narusza specyfikację, jak i dlatego, że może powodować niepożądane konsekwencje, takie jak gorsza wydajność renderowania lub „flashowanie niestylizowanej treści”.Historia specyfikacji
style
elementy nie istniały w HTML 2 . Zostały wprowadzone w HTML 3.0, gdzie zostały uwzględnione na liście elementów, które mogły być zawarte w The Head Element , ale nie zostały uwzględnione na liście elementów, które mogą znajdować się w The Body Element . Tak więc w momencie pierwszej specyfikacji element można było uwzględnić tylko w plikuhead
.Tak było (choć wyrażono je przy użyciu innych sformułowań) do czasu HTML 5, który wprowadził (od czasu usunięcia)
scoped
atrybut dlastyle
elementów. Atrybut ten, jeśli jest obecny, miał na celu umożliwieniestyle
umieszczenia elementu w elemencie w treści w celu nadania stylu tylko potomkom tego elementu. Jednak ta funkcja nigdy nie dotarła do żadnej prawdziwej przeglądarki (przynajmniej nie bez konieczności włączenia jej flagą programisty) i została usunięta ze specyfikacji W3C i WhatWG „z powodu braku zainteresowania ze strony implementatora” . Odtądstyle
elementy były dozwolone tylko w kontekstach, które dopuszczają zawartość metadanych, która jest tylko nagłówkiem. W ten sposób wróciliśmy do tych samych reguł, co przed HTML 5.Jednak z powodu błędu popełnionego przez obie organizacje specyfikacyjne, nienormatywny indeks elementów zawartych jako załącznik w obu specyfikacjach nie został odpowiednio zaktualizowany, aby odzwierciedlić usunięcie
scoped
, co czyni go niezgodnym ze specyfikacją normatywną. Zwróciłem na to uwagę zarówno WhatWG, jak i W3C , a robiąc to nieświadomie uruchomiłem zdarzenia, które spowodowały rozbieżność dwóch specyfikacji.Rozwiązaniem WhatWG na niespójność między specyfikacją normatywną a indeksem nienormatywnym było zaakceptowanie mojej poprawki korygującej indeks nienormatywny.
Z drugiej strony W3C odrzucił mój równoważny patch na korzyść aktualizacji specyfikacji normatywnej, aby umożliwić użycie
style
elementów wbody
, jednocześnie zastrzegając, że może to powodować problemy i powinno być wykonywane „ostrożnie”. Powodem tej zmiany było dostosowanie specyfikacji do rzeczywistego zachowania przeglądarki.Tak więc od marca 2017 r. Oficjalna odpowiedź na to pytanie zależała od tego, której organizacji normalizacyjnej zdecydujesz się wysłuchać. Jeśli podałeś (aś) (ogólnie bardziej szanowaną) specyfikację WhatWG, a
style
element nie był dozwolony wbody
. Jeśli podałeś specyfikację W3C, było to dozwolone, ale nie zalecane.Ten głupi stan rzeczy został zakończony (być może podobnie jak wiele innych takich niespójności) traktatem pokojowym z kwietnia 2019 r. Między W3C a WhatWG , Który uzgodnił, że specyfikacja WhatWG stanie się jedynym prawdziwym żywym standardem HTML, a W3C po prostu wypuści migawki z niego jako ponumerowane Specyfikacje HTML zamiast równoległego opracowywania konkurencyjnej specyfikacji. Zatem zmiana z 2017 na widelec W3C, która zezwalała na
style
elementy w elemencie,body
nie jest już częścią żadnej obecnej specyfikacji; to tylko ciekawostka historii.Tak więc dzisiaj wystarczy spojrzeć na specyfikację WhatWG aby określić, co jest oficjalnie dozwolone. Ma to do powiedzenia:
CTRL-Fing w specyfikacji jednostronicowej ujawnia, że jedynym elementem, którego model zawartości zawiera zawartość metadanych, jest ten
head
element.Nienormatywny indeks elementów, o których wspomniałem wcześniej, ustalając również, potwierdza, że jedynymi dopuszczalnymi rodzicami
style
elementu są ahead
lubnoscript
element.źródło
Podczas gdy inne odpowiedzi są poprawne, jestem zaskoczony, że nikt nie wyjaśnił, gdzie standardy zabraniają stylów poza nimi
head
.Właściwie jest to w sekcji o
head
elemencie (i w DTD ):Tak, wiem. DTD są trudne do odczytania.
Jest to jedyne miejsce, w którym
STYLE
występuje element, więc domyślnie jest on nieprawidłowy w innym miejscu.źródło
Nie powinny wychodzić poza głowę, ale i tak działają; chociaż możesz zauważyć szybkie migotanie. Witryna nie powinna sprawdzać się za pomocą tagu stylu poza głową, ale czy to naprawdę ma znaczenie? Ponadto tagi linków działają również poza nagłówkiem, mimo że nie powinny.
źródło
style
Tak jak w innych odpowiedziach, tak naprawdę nie musi tam być. Jednak nie zostanie zweryfikowana. W tym przypadku może to mieć znaczenie lub nie, ale należy pamiętać, że renderowanie html zależy wyłącznie od przeglądarek. Z tego co wiem, wszystkie używane dziś przeglądarki będą obsługiwały umieszczanie go poza głową, ale nie możesz tego zagwarantować w przyszłych przeglądarkach i przyszłych wersjach przeglądarek.
Trzymaj się normy, a będziesz bezpieczniejszy. O ile bezpieczniejsze jest wiele dyskusji.
źródło
Zalecenie HTML5.2 W3C, 14 grudnia 2017 (nie wcześniej projekt, o którym mowa powyżej) mówi teraz można dołączyć
<style>
.źródło
style
wbody
, więc wracamy do tego, aby było to jednoznacznie zabronione. Zobacz moją odpowiedź, jeśli interesuje Cię kręta ścieżka, którą tu dotarliśmy.Znacznik stylu w dowolnym miejscu poza tagiem
<head>
nie będzie sprawdzany z regułami W3C.źródło
Według tej witryny HTML5.1 (w wersji roboczej) i WHATWG pozwalają na umieszczenie
<style>
tagu w treści:http://www.html.am/tags/html-style-tag.cfm
Wygląda na to, że był obsługiwany przez przeglądarki od dłuższego czasu. Zgodnie z tą odpowiedzią StackOverflow, Firefox 3+, IE6 +, Safari 2+ i Chrome 12+ obsługują ją:
https://stackoverflow.com/a/10989663/297793
źródło
Zgodnie ze specyfikacją HTML 5.2 (w wersji roboczej), znacznik stylu jest dozwolony tylko w nagłówku dokumentu.
Szkic HTML 5.2 na tagu stylu (18 sierpnia 2016 r.)
źródło
Możesz użyć tagu style wewnątrz sekcji head lub body lub także poza tagiem HTML (zewnętrzny HTML nie jest zalecany). W projektach czasu rzeczywistego wiele razy można zobaczyć, że używają one tagu stylu poza tagiem HTML
źródło