คำตอบสั้น ๆ
ตามข้อกำหนดปัจจุบันใช่style
องค์ประกอบต้องอยู่ในไฟล์head
. ไม่มีข้อยกเว้น (ยกเว้นstyle
องค์ประกอบภายในtemplate
องค์ประกอบหากคุณต้องการนับสิ่งนั้น)
สิ่งนี้ไม่ได้เป็นเช่นนั้นเสมอไปในอดีต หากคุณสนใจเกี่ยวกับรายละเอียดของข้อมูลจำเพาะและประวัติโปรดอ่านต่อไป
ไม่ว่าสิ่งที่สเปคกล่าวว่าการใช้style
องค์ประกอบในbody
ไม่ทำงานมากขึ้นหรือน้อยลงในเบราว์เซอร์ที่สำคัญทั้งหมด อย่างไรก็ตามถือเป็นการปฏิบัติที่ไม่ดีทั้งสองอย่างเนื่องจากละเมิดข้อกำหนดและอาจทำให้เกิดผลที่ไม่พึงประสงค์เช่นประสิทธิภาพการแสดงผลที่แย่ลงหรือ "เนื้อหาที่ไม่เป็นระเบียบ"
ประวัติข้อมูลจำเพาะ
style
องค์ประกอบที่ไม่ได้อยู่ในHTML ที่ 2 พวกเขาได้รับการแนะนำให้รู้จักใน HTML 3.0 ที่พวกเขาถูกรวมอยู่ในรายการขององค์ประกอบที่สามารถนำมารวมอยู่ในหัวธาตุแต่ไม่ได้รวมอยู่ในรายการขององค์ประกอบที่อาจจะอยู่ในร่างกายธาตุ ดังนั้นในขณะที่ระบุองค์ประกอบเป็นครั้งแรกสามารถรวมไว้ในไฟล์head
.
สิ่งนี้ยังคงเป็นเช่นนั้น (แม้ว่าจะแสดงโดยใช้ถ้อยคำที่แตกต่างกัน) จนถึง HTML 5 ซึ่งแนะนำscoped
แอตทริบิวต์(ตั้งแต่ลบออก) สำหรับstyle
องค์ประกอบ แอตทริบิวต์นี้มีขึ้นเพื่ออนุญาตให้style
วางองค์ประกอบภายในองค์ประกอบในร่างกายเพื่อจัดรูปแบบเฉพาะลูกหลานขององค์ประกอบนั้นเท่านั้น อย่างไรก็ตามคุณลักษณะที่ไม่เคยทำให้มันเป็นเบราว์เซอร์ที่แท้จริงใด ๆ (อย่างน้อยไม่ได้โดยไม่จำเป็นต้องได้รับการเปิดใช้งานผ่านธงนักพัฒนา) และจะถูกลบออกจากทั้ง W3C WHATWG และรายละเอียด"เนื่องจากการขาดความสนใจ implementer" หลังจากนั้นstyle
องค์ประกอบจะได้รับอนุญาตเฉพาะในบริบทที่อนุญาตให้มีเนื้อหาเมทาดาทาซึ่งเป็นเพียงส่วนหัวเท่านั้น ดังนั้นเราจึงกลับไปใช้กฎเดิมเหมือนก่อน HTML 5
อย่างไรก็ตามเนื่องจากข้อผิดพลาดที่เกิดขึ้นโดยองค์กรข้อมูลจำเพาะทั้งสองดัชนีที่ไม่เป็นบรรทัดฐานขององค์ประกอบที่รวมอยู่ในภาคผนวกในข้อกำหนดทั้งสองจึงไม่ได้รับการอัปเดตอย่างเหมาะสมเพื่อให้สอดคล้องกับการลบออกscoped
ทำให้ไม่สอดคล้องกับข้อกำหนดเชิงบรรทัดฐาน ฉันชี้ให้เห็นสิ่งนี้ทั้งกับ WhatWGและW3Cและในการทำเช่นนั้นโดยไม่เจตนาในเหตุการณ์การเคลื่อนไหวที่ทำให้ข้อกำหนดทั้งสองแตกต่างกัน
วิธีแก้ปัญหาของ WhatWG สำหรับความไม่สอดคล้องกันระหว่างข้อมูลจำเพาะเชิงบรรทัดฐานและดัชนีที่ไม่ใช่บรรทัดฐานคือการยอมรับแพตช์ของฉันที่แก้ไขดัชนีที่ไม่ใช่บรรทัดฐาน
ในทางกลับกัน W3C ปฏิเสธโปรแกรมแก้ไขที่เทียบเท่าของฉันแทนการอัปเดตข้อกำหนดเชิงบรรทัดฐานเพื่ออนุญาตให้ใช้style
องค์ประกอบในbody
ขณะเดียวกันก็ระบุว่าอาจทำให้เกิดปัญหาได้และควรทำ "ด้วยความระมัดระวัง" เหตุผลเบื้องหลังการเปลี่ยนแปลงนี้คือเพื่อให้ข้อมูลจำเพาะสอดคล้องกับพฤติกรรมของเบราว์เซอร์ในชีวิตจริง
ดังนั้นตั้งแต่เดือนมีนาคม 2017 เป็นต้นมาคำตอบอย่างเป็นทางการสำหรับคำถามนี้ขึ้นอยู่กับองค์กรมาตรฐานที่คุณเลือกรับฟัง หากคุณระบุไว้ในข้อมูลจำเพาะ WhatWG (โดยทั่วไปเคารพมากกว่า) แสดงว่าstyle
องค์ประกอบไม่ได้รับอนุญาตในไฟล์body
. หากคุณระบุในข้อกำหนด W3C แสดงว่าได้รับอนุญาต แต่ไม่แนะนำ
สถานการณ์ที่โง่เขลานี้สิ้นสุดลง (อาจจะเหมือนกับความไม่ลงรอยกันอื่น ๆ อีกมากมาย) ด้วยสนธิสัญญาสันติภาพเดือนเมษายน 2019 ระหว่าง W3C และ WhatWGซึ่งตกลงกันว่าข้อกำหนดของ WhatWG จะกลายเป็นมาตรฐาน HTML ที่ใช้งานได้จริงโดย W3C เป็นเพียงการปล่อยภาพรวมจากมันตามหมายเลข ข้อกำหนด HTML แทนที่จะพัฒนาข้อมูลจำเพาะของคู่แข่งควบคู่กันไป ดังนั้นการเปลี่ยนแปลงจากปี 2017 เป็นทางแยกของ W3C ที่อนุญาตให้style
องค์ประกอบในbody
ไม่เป็นส่วนหนึ่งของข้อมูลจำเพาะปัจจุบันอีกต่อไป มันเป็นเพียงความอยากรู้อยากเห็นของประวัติศาสตร์
ดังนั้นวันนี้เราต้องดูเฉพาะข้อมูลจำเพาะของ WhatWGเพื่อพิจารณาว่าสิ่งใดได้รับอนุญาตอย่างเป็นทางการ มีสิ่งนี้ที่จะพูด:
4.2.6. style
องค์ประกอบ
เนื้อหา Metadata
ในกรณีที่คาดว่าจะมีเนื้อหาข้อมูลเมตา
ใน<noscript>
องค์ประกอบที่เป็นลูกของ<head>
องค์ประกอบ
CTRL-Fing ผ่านข้อมูลจำเพาะหน้าเดียวแสดงให้เห็นว่าองค์ประกอบเดียวที่โมเดลเนื้อหามีเนื้อหาเมทาดาทาเป็นhead
องค์ประกอบ
ดัชนีที่ไม่เป็นบรรทัดฐานขององค์ประกอบที่ฉันกล่าวถึงการแก้ไขก่อนหน้านี้ยังยืนยันว่าผู้ปกครองที่อนุญาตเท่านั้นสำหรับstyle
องค์ประกอบคือ a head
หรือnoscript
องค์ประกอบ