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
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 headveya noscriptöğe olduğunu da doğrular .