<section> และ <div> ต่างกันอย่างไร


935

ความแตกต่างระหว่าง<section>และ<div>ในHTMLคืออะไร?
เราไม่ได้กำหนดหัวข้อในทั้งสองกรณี?


คำตอบ:


1037

<section> หมายความว่าเนื้อหาภายในมีการจัดกลุ่ม (เช่นเกี่ยวข้องกับธีมเดียว) และควรปรากฏเป็นรายการในโครงร่างของหน้า

<div>ในทางกลับกันไม่ได้สื่อความหมายใด ๆนอกเหนือจากสิ่งที่พบในclassนั้นlangและtitleคุณลักษณะ

ดังนั้นไม่: การใช้ a <div>ไม่ได้กำหนดส่วนใน HTML

จากสเป็ค:

<section>

<section>องค์ประกอบหมายถึงส่วนทั่วไปของเอกสารหรือโปรแกรมประยุกต์ ส่วนในบริบทนี้คือการจัดกลุ่มเนื้อหาที่มีเนื้อหาเฉพาะเรื่อง แต่ละคนsectionควรได้รับการระบุโดยทั่วไปแล้วรวมส่วนหัว (องค์ประกอบ h1-h6) เป็นลูกของ<section>องค์ประกอบ

ตัวอย่างของส่วนต่างๆจะเป็นบทหน้าต่างๆที่มีแท็บในกล่องโต้ตอบแบบแท็บหรือส่วนที่มีหมายเลขของวิทยานิพนธ์ โฮมเพจของเว็บไซต์สามารถแบ่งออกเป็นส่วน ๆ เพื่อแนะนำรายการข่าวและข้อมูลการติดต่อ

...

<section>องค์ประกอบไม่ได้เป็นองค์ประกอบภาชนะทั่วไป เมื่อองค์ประกอบจำเป็นสำหรับการจัดแต่งทรงผมเท่านั้นหรือเพื่อความสะดวกในการเขียนสคริปต์ผู้เขียนควรใช้<div>องค์ประกอบแทน กฎทั่วไปคือ<section>องค์ประกอบมีความเหมาะสมเฉพาะถ้าเนื้อหาขององค์ประกอบจะถูกระบุไว้อย่างชัดเจนในร่างของเอกสาร

( https://www.w3.org/TR/html/sections.html#the-section-element )

<div>

<div>องค์ประกอบไม่มีความหมายพิเศษที่ทุกคน มันแสดงถึงลูก ๆ ของมัน มันสามารถใช้กับclass, langและtitleคุณลักษณะที่จะทำเครื่องหมายขึ้นความหมายร่วมกันกับกลุ่มขององค์ประกอบติดต่อกัน

หมายเหตุ:ผู้เขียนได้รับการสนับสนุนอย่างยิ่งให้ดู<div>องค์ประกอบเป็นองค์ประกอบของวิธีสุดท้ายสำหรับเมื่อไม่มีองค์ประกอบอื่นที่เหมาะสม การใช้องค์ประกอบที่เหมาะสมมากขึ้นแทน<div>องค์ประกอบนำไปสู่การเข้าถึงที่ดีขึ้นสำหรับผู้อ่านและการบำรุงรักษาง่ายขึ้นสำหรับผู้เขียน

( https://www.w3.org/TR/html/grouping-content.html#the-div-element )


22
คิดเพิ่มเติมเกี่ยวsectionกับการdivรวมทั้งในแง่ของคำตอบนี้ฉันได้ข้อสรุปว่าพวกเขาเป็นองค์ประกอบเดียวกัน W3C กล่าวว่าdiv"แสดงถึงลูก ๆ ของมัน" นั่นไม่ได้เป็นสิ่งที่sectionองค์ประกอบทำ? ใช่sectionหมายถึงเด็กที่มีการรวมกลุ่มกัน แต่โดยพระราชบัญญัติมากของการวางเด็กภายในdivคุณยังใช่การจัดกลุ่มเข้าด้วยกัน อย่างน้อยที่สุดฉันก็ทำฉันไม่รู้เกี่ยวกับพวกคุณ
trysis

9
@trysis:“คิดเพิ่มเติมเกี่ยวsectionกับdiv” - ไม่คิดว่ามากเกินไปเกี่ยวกับเรื่องนี้ HTML ไม่ซับซ้อน “ โดยการวางลูกไว้ข้างในdivคุณก็ใช่แล้วรวมกลุ่มพวกเขาด้วยกัน ” ไม่ตรงตามข้อมูลจำเพาะ HTML ที่คุณไม่ได้ คุณกำลังห่อไว้divเพื่อวัตถุประสงค์ในการจัดแต่งทรงผมหรือความสะดวกสบายของ JavaScript หรืออย่างอื่นที่ W3C ยังไม่ได้คิด แต่ไม่ได้ระบุถึงผู้อ่านว่าองค์ประกอบย่อยเป็นกลุ่ม
Paul D. Waite

8
@ Matian2040 เพราะวัตถุประสงค์ของ HTML คือการเพิ่มความหมายให้กับข้อความเช่นหรือ<p>This is a paragraph</p> <h2>This is a second-level heading</h2>เนื่องจาก<div>เพิ่มความหมายไม่ได้คุณจะใช้เฉพาะเมื่อไม่มีองค์ประกอบ HTML อื่นที่เพิ่มความหมายที่เหมาะสมกับข้อความที่เป็นปัญหา
Paul D. Waite

7
ดังนั้นจึงไม่มีข้อได้เปรียบหากใช้ส่วนต่างๆ แล้วทำไมมันถึงมีอยู่จริง?!
Black

14
@EdwardBlack: มันสื่อถึงความหมายที่แตกต่างจากแท็กอื่น ๆ การสื่อความหมายเป็นจุดทั้งหมดของ HTML
Paul D. Waite

71

<section>เครื่องหมายขึ้นส่วน , <div>เครื่องหมายขึ้นบล็อกทั่วไปที่มีความหมายที่เกี่ยวข้องไม่มี


@MarwenTrabelsi - ลิงค์ไม่ตาย "Section" เป็นคำภาษาอังกฤษมาตรฐาน มีพจนานุกรมให้อ่าน
เควนติน

@MarwenTrabelsi - คำที่คุณเรียกว่า "นามธรรมและกว้าง" คือความแตกต่างที่สำคัญ
เควนติน

64

<div> Vs <Section>

รอบที่ 1

<div>:HTML องค์ประกอบ (หรือ HTML เอกสารกองธาตุ) เป็นภาชนะทั่วไปสำหรับเนื้อหาการไหลซึ่งไม่ได้เป็นตัวแทนของสิ่งที่โดยเนื้อแท้ มันสามารถใช้ในการจัดกลุ่มองค์ประกอบเพื่อวัตถุประสงค์ในการจัดแต่งทรงผม (โดยใช้แอตทริบิวต์ class หรือ id) หรือเพราะพวกเขาแบ่งปันค่าคุณลักษณะเช่น lang ควรใช้เฉพาะเมื่อไม่มีองค์ประกอบทางความหมายอื่น ๆ (เช่น<article>หรือ<nav>) มีความเหมาะสม

<section>:HTMLองค์ประกอบมาตรา ( <section>) หมายถึงส่วนทั่วไปของเอกสารเช่นการจัดกลุ่มเฉพาะเรื่องของเนื้อหาโดยปกติจะมีหัวข้อ


รอบ 2

<div>: สนับสนุนเบราว์เซอร์ ป้อนคำอธิบายรูปภาพที่นี่

<section>: สนับสนุนเบราว์เซอร์

ตัวเลขในตารางระบุเวอร์ชันเบราว์เซอร์แรกที่รองรับองค์ประกอบอย่างสมบูรณ์ ป้อนคำอธิบายรูปภาพที่นี่

ในหลอดเลือดดำนั้น div มีความเกี่ยวข้องจาก CSS หรือ DOM ล้วนๆในขณะที่ส่วนนั้นเกี่ยวข้องกับความหมายและในอนาคตอันใกล้นี้สำหรับการจัดทำดัชนีโดยเครื่องมือค้นหา


10
การสนับสนุนเบราว์เซอร์ไม่ใช่ปัญหาที่นี่มันเกี่ยวกับความหมาย หากคุณใช้ HTML5 คุณอาจต้องใช้ polyfill อยู่ดี
Jack Tuck

@ JackTuck และถ้าคุณไม่ต้องการใช้กากตะกอนแบบนั้นล่ะ
Mr Lister

49

แค่การสังเกต - ยังไม่พบเอกสารใด ๆ ที่ยืนยันสิ่งนี้

หากส่วนมีส่วนอื่นส่วนหัว h1 ในส่วนด้านในจะแสดงเป็นแบบอักษรขนาดเล็กกว่าส่วนหัว h1- ในส่วนด้านนอก เมื่อใช้ div แทนส่วน div ภายใน h1-header จะถูกแปลงเป็น h1

<section>
  <h1>Level1</h1>
  some text
  <section>
    <h1>Level2</h1>
    some more text
  </section>
</section>

- ส่วนหัว Level2 - แสดงเป็นแบบอักษรขนาดเล็กกว่าส่วนหัวระดับ 1 -

เมื่อใช้ส่วนหัว css เพื่อ color h1 ส่วน h1 ด้านในก็เป็นสีด้วย (ทำหน้าที่เหมือน h1 ปกติ) มันเป็นพฤติกรรมเดียวกันใน Firefox 18, IE 10 และ Chrome 28


1
ช่างประหลาดเหลือเกิน ... ได้สร้าง stackblitz อย่างรวดเร็วเพื่อสาธิตสิ่งนี้เพราะมันยังเป็นสิ่งที่stackblitz.com/edit/angular-h1ayez
Gavin Mannion

24

ในมาตรฐาน HTML5 <section>องค์ประกอบจะถูกกำหนดเป็นบล็อกขององค์ประกอบที่เกี่ยวข้อง

<div>องค์ประกอบถูกกำหนดให้เป็นบล็อกขององค์ประกอบเด็ก


ฉันไม่รู้ว่าทำไมมีคนทำเครื่องหมายลง สั้นหวานและตรงประเด็นมากเกินไป
user6031759

1
-1 มันไม่มีเหตุผลใด ๆ วิธีที่คุณต้องการจัดกลุ่มองค์ประกอบที่เกี่ยวข้องในเอกสารโครงสร้างแบบลำดับชั้น (XML / HTML) คุณสามารถจัดกลุ่มบล็อกองค์ประกอบลูก ๆ โดยใช้แท็กใดก็ได้
Svisstack

@Svisstack คุณถูกต้องว่าแท็กที่ล้อมรอบ (เช่น. ไม่ใช่ปิดตัวเอง / เป็นโมฆะ) สามารถจัดกลุ่มบล็อกขององค์ประกอบเด็ก แม้ว่าฉันคิดว่าสิ่งนี้จะได้มากขึ้นในความสัมพันธ์ของเด็ก พวกเขาทั้งหมดมีบริบทที่เกี่ยวข้องในการถ่ายทอดหรือไม่ ตัวอย่างเช่น: แบบฟอร์มที่มีหลายอินพุตจะถูกจัดกลุ่มเข้าด้วยกันเพื่อเหตุผลด้านการใช้งาน / การกำหนดสไตล์ แต่แบบฟอร์มนี้ไม่ใช่ส่วนของเว็บไซต์ แต่เป็นแบบที่มีฟังก์ชั่นแทน ตอนนี้สมมติว่าหน้าของคุณอธิบายผลิตภัณฑ์ ส่วนต่าง ๆ เกี่ยวกับผลิตภัณฑ์จะถูกระบุไว้ในองค์ประกอบส่วนเพราะองค์ประกอบถ่ายทอดความคิดโดยรวม
Xandor

20

ระวังอย่าใช้แท็กส่วนมากเกินไปเพื่อแทนที่องค์ประกอบdiv ส่วนแท็กควรกำหนดพื้นที่ที่มีนัยสำคัญในบริบทของร่างกาย ความหมาย HTML5 ส่งเสริมให้เรากำหนดเอกสารของเราดังนี้:

<html>
<head></head>
<body>
    <header></header>
    <section>
        <h1></h1>
        <div>
            <span></span>
        </div>
        <div></div>
    </section>
    <footer></footer>
</body>
</html>

กลยุทธ์นี้ช่วยให้เว็บโรบอตและโปรแกรมอ่านหน้าจออัตโนมัติเข้าใจการไหลของเนื้อหาของคุณได้ดียิ่งขึ้น มาร์กอัปนี้จะกำหนดว่าเนื้อหาหน้าหลักของคุณอยู่ที่ใด แน่นอนว่าส่วนหัวและท้ายกระดาษมักจะพบได้บ่อยในหลายร้อยหน้าหากไม่นับพันหน้าในเว็บไซต์ ส่วนแท็กควรจะ จำกัด ที่จะอธิบายที่เนื้อหาที่ไม่ซ้ำที่มีอยู่ ภายในแท็กส่วนเราควรมาร์กอัปและควบคุมเนื้อหาด้วยแท็ก HTML ซึ่งต่ำกว่าในลำดับชั้นเช่นh1 , div , span , ฯลฯ

ในหน้าเว็บส่วนใหญ่ควรมีแท็กส่วนเดียวเท่านั้นไม่ควรมีหลายแท็ก โปรดพิจารณาว่ามีแท็ก HTML5 ที่น่าสนใจอื่น ๆ ที่มีความคล้ายคลึงกับส่วน พิจารณาใช้บทความ , สรุป , กันและคนอื่น ๆ ที่อยู่ในการไหลของเอกสารของคุณ ดังที่คุณเห็นแท็กเหล่านี้ช่วยเพิ่มความสามารถของเราในการกำหนดขอบเขตหลักของเอกสาร HTML


"ในหน้าง่ายที่สุดควรมีแท็กส่วนเดียวเท่านั้น" คุณสามารถยกตัวอย่างที่ไม่ง่ายซึ่งคุณต้องการใช้หลายแท็กส่วนในหน้าเดียวได้หรือไม่?
styfle

7
ฉันจะใช้mainแท็กในนั้นและภายในsectionแท็กหนึ่งแท็กขึ้นไป
Chazy Chaz

10

<div>- ภาชนะบรรจุกระแสทั่วไปที่เราทุกคนรู้จักและชื่นชอบ เป็นองค์ประกอบระดับบล็อกโดยไม่มีความหมายเพิ่มเติม (W3C: Markup, WhatWG)

<section>- เป็นเอกสารทั่วไปหรือส่วนของแอปพลิเคชัน โดยปกติจะมีหัวเรื่อง (ชื่อเรื่อง) และอาจเป็นท้ายกระดาษด้วย มันเป็นเนื้อหาที่เกี่ยวข้องเช่นส่วนย่อยของบทความยาวส่วนสำคัญของหน้า (เช่นส่วนข่าวในหน้าแรก) หรือหน้าในอินเทอร์เฟซแบบแท็บของ webapp (W3C: มาร์กอัป WhatWG)

คำแนะนำของฉัน: div: ใช้รุ่นที่ต่ำกว่า (ฉันคิดว่า 4.01 เป็นยัง) องค์ประกอบ HTML (นักออกแบบจำนวนมากจัดการสิ่งนั้น) section: องค์ประกอบ html5 ที่ส่งมาเมื่อเร็ว ๆ นี้


9

แท็กส่วนมีไวยากรณ์ความหมายเพิ่มเติมสำหรับ html div เป็นแท็กทั่วไปสำหรับส่วน เมื่อคุณใช้แท็กส่วนสำหรับเนื้อหาที่เหมาะสมสามารถใช้สำหรับการเพิ่มประสิทธิภาพกลไกค้นหาได้เช่นกัน แท็กส่วนยังทำให้การแยกวิเคราะห์ HTML ทำได้ง่าย สำหรับข้อมูลเพิ่มเติมอ้างอิง http://blog.whatwg.org/is-not-just-a-semantic


1
“ แท็กส่วนทำให้การแยกวิเคราะห์ html ง่ายขึ้น” - ใช่มั้ย คุณหมายถึงการสร้างโครงร่างของหน้าหรือไม่?
Paul D. Waite

7

ใช้<section>อาจจะneaterช่วยอ่านหน้าจอและSEOในขณะที่ยัง<div>เป็นขนาดเล็กไบต์และรวดเร็วในการประเภท

โดยรวมแตกต่างกันเล็กน้อยมาก

นอกจากนี้จะไม่แนะนำให้ใส่<section>ใน<section>แทนวาง<div>ภายใน<section>


3

นี่คือเคล็ดลับเกี่ยวกับวิธีแยกแยะองค์ประกอบ html5 ล่าสุดในกรณีของเว็บแอปพลิเคชัน (ส่วนตัวล้วนๆ)

<section>ทำเครื่องหมายวิดเจ็ตในส่วนติดต่อผู้ใช้แบบกราฟิกในขณะ<div>ที่ภาชนะของส่วนประกอบของเครื่องมือเช่นภาชนะถือปุ่มและฉลาก ฯลฯ

<article> วิดเจ็ตกลุ่มที่มีจุดประสงค์

<header> เป็นชื่อและแถบเมนู

<footer> เป็นแถบสถานะ


1

<section>แท็กกำหนดส่วนในเอกสารเช่นบทส่วนหัวส่วนท้ายหรือส่วนอื่น ๆ ของเอกสาร

ขณะที่:

<div>แท็กกำหนดส่วนหรือส่วนใดส่วนในเอกสารแบบ HTML

<div>แท็กจะใช้ในกลุ่มบล็อกองค์ประกอบการจัดรูปแบบให้พวกเขาด้วย CSS


2
ส่วนหัวส่วนท้ายและส่วนอื่น ๆ ของเอกสารมีแท็กความหมายของตัวเอง ( <header>, <footer>, <nav>, <article>ฯลฯ )
โอลิเวอร์

1

<section></section>

<section>องค์ประกอบHTML แสดงถึงส่วนทั่วไปของเอกสารเช่นการจัดกลุ่มใจความของเนื้อหาโดยทั่วไปแล้วจะมีหัวเรื่อง แต่ละคน<section>ควรได้รับการระบุโดยทั่วไปแล้วรวมส่วนหัว ( <h1>- <h6>องค์ประกอบ) เป็นลูกของ<section> องค์ประกอบ สำหรับรายละเอียดโปรดลิงค์ต่อไปนี้

การอ้างอิง:


<div></div>

<div>องค์ประกอบHTML (หรือองค์ประกอบส่วนเอกสาร HTML) เป็นคอนเทนเนอร์ทั่วไปสำหรับเนื้อหาการไหลซึ่งไม่ได้เป็นตัวแทนของสิ่งใด มันสามารถใช้ในการจัดกลุ่มองค์ประกอบเพื่อวัตถุประสงค์ในการจัดแต่งทรงผม (โดยใช้แอตทริบิวต์ class หรือ id) หรือเพราะพวกเขาแบ่งปันค่าคุณลักษณะเช่น lang ควรใช้เฉพาะเมื่อไม่มีองค์ประกอบทางความหมายอื่น ๆ (เช่น<article>หรือ<nav>) มีความเหมาะสม

ข้อมูลอ้างอิง: - http://www.w3schools.com/tags/tag_div.asp - https://developer.mozilla.org/en/docs/Web/HTML/Element/div


นี่คือลิงค์บางส่วนที่อธิบายเพิ่มเติมเกี่ยวกับความแตกต่างระหว่างพวกเขา:

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.