Kısa cevap
Mevcut spesifikasyona göre, evet, style
elemanlar 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
style
HTML 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 scoped
iç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, style
bir öğ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 scoped
ve 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ı.style
body
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, style
içindeki öğelere izin veren değişiklik body
artı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. style
eleman
Meta veri içeriği .
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 head
veya noscript
öğe olduğunu da doğrular .