<STYLE> bir HTML belgesinin <HEAD> öğesinde olmalı mı?


136

Açıkçası, styleetiketlerin headbir HTML belgesinin içinde olması gerekir mi? 4.01 standardı bunu ifade eder, ancak açıkça belirtilmemiştir:

STYLE öğesi, yazarların stil sayfası kurallarını belgenin başına koymasına olanak tanır. HTML, bir belgenin HEAD bölümünde herhangi bir sayıda STYLE öğesine izin verir.

"Kesinlikle konuşan" diyorum çünkü stil öğelerini vücudun içine yerleştiren bir uygulamam var ve test ettiğim tüm tarayıcılar stil öğelerini kullanıyor gibi görünüyor. Sadece bunun yasal olup olmadığını merak ediyorum.


1
Şüpheniz varsa, W3C işaretleme doğrulayıcısı her zaman yardımcı olur :) http://validator.w3.org/
Lazlo

Birçok webposta hizmeti basitçe herhangi bir başlık öğesini çıkartacağından, stillerinizin gittiği anlamına gelen '<head> içine <head> koy' kuralının bir istisnası html e-postasıdır.
user132837

1
Gözlük gerektiren destek tarayıcıları styleiçinde bodyne olursa olsun yazar kılavuz bölümleri ima nelerin benim için yeterince iyi yani.
WraithKenny

Yanıtlar:


104

styleyalnızca headbelgenin üzerinde yer alması gerekir .

Doğrulama noktasında yanında kullanırken ilginizi çekebilecek bir ihtar styleüzerinde bodyolan stillendirilmemiş içeriğin flaş . Tarayıcı , gösterildikten sonra stilize edilecek öğeleri alacak ve boyut / şekil / yazı tipi ve / veya titremeye kaymalarını sağlayacaktır . Genellikle kötü işçiliğin bir işaretidir. Genellikle istediğiniz styleyere koymaktan kurtulabilirsiniz , ancak mümkün olduğunda kaçınmaya çalışın.

HTML 5, etiketlerin gövdenin her yerine eklenmesine scopedizin veren bir özellik tanıttı style, ancak daha sonra tekrar kaldırdı.


6
Şu anda yalnızca Firefox'un bu scopedözelliği desteklediği görülüyor , bkz. Caniuse.com/#feat=style-scoped .
Jaime Hablutzel

2
Bağlantılı makale rot æther bağlantısında kayboldu, bu yüzden mevcut en son arşivlenmiş sürüm: web.archive.org/web/20150525042412/http://bluerobot.com/web/css/…
Zachary Murray

@ZacharyMurray dikkatleri için teşekkürler! Gövdedeki bağlantıyı web arşivine güncelledim.
Esteban Küber

1
Spec desteklemek için tarayıcıların uygun gerektirir styleetiketleri bodyspec yazarı kısmı rağmen, ben geçerli olabilmesi için vücut stilleri kabul ettiğinden,. github.com/whatwg/html/issues/1605#issuecomment-235961103
WraithKenny

19

Kısa cevap

  • Mevcut spesifikasyona göre, evet, styleelemanlar her zaman içinde olmalıdırhead . İstisna yoktur ( saymak istiyorsanız, styleöğenin içindeki bir templateöğe hariç ).

  • Tarihsel olarak her zaman böyle olmamıştır. Spesifikasyonun detaylarını ve tarihini önemsiyorsanız, okumaya devam edin.

  • Spec kullanarak, ne diyor olursa olsun styleöğeleri body yapar tüm büyük tarayıcılarda daha çok veya daha az çalışması. Bununla birlikte, hem spesifikasyonu ihlal ettiği hem de daha kötü oluşturma performansı veya "biçimlendirilmemiş içeriğin parlaması" gibi istenmeyen sonuçlara neden olabileceği için kötü bir uygulama olarak kabul edilir.


Teknik özellik geçmişi

styleHTML 2'de öğeler yoktu . Onlar dahil edilebilecek unsurların listesine dahil edilmiştir HTML 3.0, tanıtıldı Baş Unsuru , ama değil mevcut olabilecek elementlerin listesine dahil Vücut Unsuru . Böylece, eleman ilk kez belirtildiği anda, sadece head.

Bu, öğeler scopediçin (kaldırıldığından beri) özniteliğini tanıtan HTML 5'e kadar (farklı ifadeler kullanılarak ifade edilmiş olsa da) durum kaldı style. Bu öznitelik, mevcut olduğunda, stylebir öğenin gövdedeki bir öğenin içine yerleştirilmesinin, yalnızca o öğenin torunlarını biçimlendirmesine izin vermekti . Ancak, bu özellik hiçbir zaman gerçek bir tarayıcıya ulaşmadı (en azından bir geliştirici bayrağıyla etkinleştirilmesine gerek kalmadan) ve hem "uygulayıcı ilgisinin olmaması nedeniyle" W3C ve WhatWG özelliklerinden kaldırıldı . Daha sonra, styleöğelere yalnızca, yalnızca başlık olan meta veri içeriğine izin veren bağlamlarda izin verildi. Böylece HTML 5'ten önceki kurallara geri döndük.

Bununla birlikte, her iki spesifikasyon kuruluşu tarafından yapılan bir hata nedeniyle, her iki spesifikasyonda ek olarak dahil edilen normatif olmayan bir unsurlar dizisinin kaldırılmasını yansıtacak şekilde güncellenmedi scopedve normatif spesifikasyonla tutarsız hale geldi. Dışarı bu ikisi işaret WHATWG için ve W3C için ve bunu yaparken farkında olmadan sapmak için iki gözlük neden hareket olaylarda ayarlayın.

WhatWG'nin normatif spesifikasyon ile normatif olmayan indeks arasındaki tutarsızlığa çözümü, normatif olmayan indeksi düzelten yamamı kabul etmekti .

Öte yandan W3C, eşdeğer yamamı, öğelerin kullanımına izin vermek için normatif spesifikasyonu güncellemek yerine , sorunlara neden olabileceğini ve "dikkatle" yapılması gerektiğini not ederek uyarmayı reddetti. Bu değişikliğin ardında yatan neden, spesifikasyonun gerçek hayattaki tarayıcı davranışıyla hizalanmasını sağlamaktı.stylebody

Böylece, Mart 2017'den itibaren, bu soruya verilen resmi cevap, hangi standart organizasyonunu dinlemeyi seçtiğinize bağlıydı. (Genel olarak daha fazla saygı duyulan) WhatWG spesifikasyonuna listelediyseniz, styleöğesinde body. W3C spesifikasyonuna listelediyseniz, buna izin verildi, ancak önerilmez.

Bu aptallık durumu, W3C ve WhatWG arasındaki Nisan 2019 barış anlaşması ile (belki de bu tür tutarsızlıkların çoğu gibi) sona erdi ve bu da WhatWG spesifikasyonunun gerçek bir canlı HTML standardı olacağını kabul etti. Paralel olarak rakip bir özellik geliştirmek yerine HTML özellikleri. Bu nedenle, 2017'den W3C çatalına, styleiçindeki öğelere izin veren değişiklik bodyartık mevcut spesifikasyonların bir parçası değildir; sadece tarihin bir merakıydı.

Yani, bugün, neye izin verildiğini belirlemek için sadece WhatWG spesifikasyonlarına bakmamız gerekiyor . Şunu söylemek gerekir:

4.2.6. styleeleman

Kategoriler :

Meta veri içeriği .

Bu öğenin kullanılabileceği bağlamlar :

Nerede meta içerik bekleniyor.
Bir <noscript>öğenin alt <head>öğesi olan bir öğede.

Tek sayfalık teknik özellikteki CTRL-Fing , içerik modeli meta veri içeriği içeren tek öğenin headöğe olduğunu gösterir.

Daha önce sabitlemeden bahsettiğim öğelerin normatif olmayan dizini, bir styleöğe için yalnızca izin verilen ebeveynlerin bir headveya noscriptöğe olduğunu da doğrular .


18

Diğer cevaplar doğru olsa da, kimsenin standartların dışındaki stillere nerede izin vermediğini açıklamamasına şaşırdım head.

Aslında Eleman (ve DTD'de ) bölümündehead :

<!-- %head.misc; defined earlier on as "SCRIPT|STYLE|META|LINK|OBJECT" -->
<!ENTITY % head.content "TITLE & BASE?">

<!ELEMENT HEAD O O (%head.content;) +(%head.misc;) -- document head -->

Evet biliyorum. DTD'lerin okunması zordur.

Bu, STYLEöğenin oluştuğu tek yerdir , bu nedenle dolaylı olarak başka bir yerde geçersizdir.


6
Kafam çok karıştı.
dav_i

1
Şimdi IIRC'nin DTD'si olmayan HTML5 kullanıyor olmalıdır. HTML5 spesifikasyonunun tek başına söylediği şey nedir veya değildir.
Jan Kyu Peblik

14

Kafanın dışına çıkmaları gerekmiyor, ama yine de çalışıyorlar; hızlı bir titreşim fark edebilirsiniz. Site, stil etiketi ile başın dışında doğrulanmamalıdır, ancak bu gerçekten önemli mi? Ayrıca, bağlantı etiketleri, gerekmese de, başın dışında da çalışır.


5
"Çalışıyorlar" demek biraz zor. En iyi ihtimalle, mevcut tarayıcıların çoğunun hala stilleri oluşturacağını söyleyebilirsiniz, ancak bu hata hakkında doğası gereği "çalışan" hiçbir şey yoktur. Herhangi bir tarayıcının gelecekteki herhangi bir sürümünde çalışamaz ve yanlış bir şey yapmazlardı.
Chuck

6
imo, oluşturulan stiller = çalışır; zor bir şey değil. son cümlenin yeniden yazılması gerektiği; hiç bir anlamı yok. Ben doğrulamak olmaz dedi, "doğru" nasıl bahsetti, bu yüzden bu cümle ile ne demek istediğini anlamamalıyım.
geowa4

Sorun şu ki olsa bile olmasıdır edilir tarz olanlar zaman, içeriğin üzerine bazı titreşimler görülür styles tekme.
Esteban Kuber

2
stil etiketi gövdede ilk olmadıkça
geowa4

Bunu evde denemeyin.
TechNyquist

3

Diğer yanıtların belirttiği gibi, aslında orada olması gerekmiyor. Ancak, onaylanmayacaktır. Bu, bu durumda önemli olabilir veya olmayabilir, ancak html oluşturmanın tamamen tarayıcılara bağlı olduğunu lütfen unutmayın. Bildiğim kadarıyla, bugün kullanılan tüm tarayıcılar başın dışına koymayı destekleyecek, ancak gelecekteki tarayıcılar ve gelecekteki tarayıcı sürümleri için bunu garanti edemezsiniz.

Standartlara sadık kalın ve daha güvende olursunuz. Çok fazla tartışma için ne kadar güvenli.


3

HTML5.2 W3C Tavsiyesi 2017 14 Aralık (değil önceki taslak yukarıda değinilen) Artık dahil söylüyor <style>.

"Akış içeriğinin beklendiği vücutta." (bölüm 4.2.6)


Şimdi de, W3C resmen devlet WHATWG Spec obsoletes önceki tüm özellikleri ve WHATWG Spec izin vermez stylede bodybuna tekrar yayındayız açıkça yasak olan, bu yüzden. Buraya geldiğimiz virajlı yolla ilgileniyorsanız cevabımı görün .
Mark Amery

2

<head>W3C kuralları ile herhangi bir yerde bir stil etiketi doğrulanmayacaktır.




-1

Stil etiketini baş bölümünün veya gövde bölümünün içinde veya ayrıca html etiketinin dışında da kullanabilirsiniz (dış taraf html önerilmez). Gerçek zamanlı projelerde birçok kez html etiketinin yan tarafındaki stil etiketini kullandıklarını görebilirsiniz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.