Mengapa kita membutuhkan tag fieldset?

165

Mengapa kami membutuhkan <fieldset>tag? Apa pun tujuan yang dilayaninya mungkin merupakan bagian dari tag formulir.

Saya mencari beberapa info tentang W3Schools, yang mengatakan:

  • The <fieldset>tag digunakan untuk elemen kelompok terkait dalam formulir.
  • The <fieldset>tag menarik sebuah kotak di sekitar elemen terkait.

Penjelasan lebih lanjut untuk mereka yang salah "mengapa ada dalam spesifikasi" untuk "apa fungsinya". Saya pikir bagian gambar tidak relevan, dan saya tidak melihat mengapa kita perlu tag khusus hanya untuk mengelompokkan beberapa elemen terkait dalam formulir.

Biksu Timur
sumber
30
Mengapa kami membutuhkan tag? Mengapa kita membutuhkan tag img ketika kita dapat membuat gambar dari div 1px dengan warna latar belakang?
Oded
127
Harap dicatat: W3C memiliki apa-apa hubungannya dengan W3Schools.
Wesley Murch
82
Jangan merujuk ke w3schools. Cukup gunakan MDN: fieldset @ MDN .
Sirko
9
@ Madmartigan saya tahu. Tetapi W3C hanya memberikan spesifikasi yang menurut saya tidak banyak berguna untuk menjawab pertanyaan saya.
Biksu Timur
2
Tentang (tidak) menggunakan W3Schools dan menggunakan situs yang lebih tepercaya untuk informasi teknis: w3fools.com
Denilson Sá Maia

Jawaban:

187

Contoh paling nyata dan praktis adalah:

<fieldset>
  <legend>Colour</legend>

  <input type="radio" name="colour" value="red" id="colour_red">
  <label for="colour_red">Red</label>

  <input type="radio" name="colour" value="green" id="colour_green">
  <label for="colour_green">Green</label>

  <input type="radio" name="colour" value="blue" id="colour_blue">
  <label for="colour_blue">Blue</label>

</fieldset>

Ini memungkinkan setiap tombol radio untuk diberi label sambil juga memberikan label untuk grup secara keseluruhan. Ini sangat penting di mana teknologi bantuan (seperti pembaca layar) sedang digunakan di mana asosiasi kontrol dan legenda mereka tidak dapat tersirat oleh presentasi visual.

Quentin
sumber
4
Saya tidak memiliki tautan yang berguna, tetapi tampaknya banyak pembaca layar membaca teks legenda sebelum setiap label di bidang tersebut.
Wesley Murch
8
@ Madmartigan - Itu adalah hal yang baik, artinya Anda tahu Anda masih berurusan dengan set tombol radio yang sama. (Ini juga alasan untuk memastikan legenda itu singkat ).
Quentin
1
"Teknologi bantu" yang sangat masuk akal.
Biksu Timur
5
Selain itu, <fieldset> dapat digunakan untuk 'menonaktifkan' elemen yang dikelompokkan. Saya berharap <fieldset> juga harus digunakan untuk menentukan apakah suatu grup diperlukan dengan menambahkan atribut 'wajib' ke tag, sayangnya itu tidak berfungsi!
Simon Savai
41

Fitur lain dari fieldset adalah menonaktifkannya menonaktifkan semua bidang yang ada di dalamnya.

<fieldset disabled>
  <legend>Disabled Fields</legend>
  <input type="text" value="Sample">
  <textarea>Text Area</textarea>
</fieldset>

<fieldset>
  <legend>Enabled Fields</legend>
  <input type="text" value="Sample">
  <textarea>Text Area</textarea>
</fieldset>

Harga Collin
sumber
6
Tentu saja, orang dapat membuat argumen bahwa disabledatribut yang berfungsi untuk fieldsetkontrol bentuk dan s, seharusnya juga telah diterapkan untuk formelemen tersebut. Itu masuk akal untuk itu, bukan?
amn
25

Itu diperlukan untuk aksesibilitas.

Lihat: http://usability.com.au/2013/04/accessible-forms-1-labels-and-identification/

Elemen HTML 4 fieldset dan legendmemungkinkan Anda untuk tata letak dan mengatur formulir besar dengan berbagai bidang yang menarik secara logis tanpa menggunakan tabel. The fieldsettag dapat digunakan untuk membuat kotak di sekitar elemen yang dipilih dan legendtag akan memberikan keterangan ke elemen-elemen. Dengan cara ini elemen formulir dapat dikelompokkan bersama ke dalam kategori yang diidentifikasi.

Browser yang berbeda dapat menampilkan fieldsetbatas default dengan cara yang berbeda. Cascading Style Sheets dapat digunakan untuk menghapus perbatasan atau mengubah tampilannya.

Eric Sites
sumber
fieldset tidak ada dalam HTML4. Ini fitur HTML5
radio_head
5
Itu keluar dalam HTML 4.0.1 - w3.org/TR/html401/interact/forms.html#h-17.10
Eric Sites
14

Seperti dijelaskan di sini , tujuan tag ini adalah untuk memberikan kejelasan pada organisasi formulir dan memungkinkan perancang akses yang lebih mudah untuk menghias elemen formulir.

dthagard
sumber
6

Fieldset mengatur item dalam bentuk secara logis tetapi juga meningkatkan aksesibilitas bagi mereka yang menggunakan browser aural. Fieldset berguna dan karena itu sangat populer di masa lalu dalam banyak aplikasi sehingga mereka mengimplementasikannya dalam html juga.

Boris D. Teoharov
sumber
4

Saya suka bahwa ketika Anda mengelilingi radio Anda dengan fieldset, dan Anda tidak meletakkan id pada tag input tombol radio Anda, maka grup yang diwakili oleh fieldset ditambahkan ke tabchain seolah-olah itu adalah satu item.

Ini memungkinkan Anda tab melalui formulir, dan ketika Anda sampai ke fieldset, Anda bisa menggunakan tombol panah untuk mengubah radio yang dipilih, dan kemudian tab pergi ketika Anda selesai.

Juga, jangan lupa aksesibilitas. Pembaca layar perlu legenda setset + legenda untuk memahami formulir Anda dan dapat membacanya ke pengguna dengan cara alami. Jangan ragu untuk menghilangkan legenda jika Anda tidak ingin pengguna yang melihatnya melihatnya. Legenda lay out dan styling tepat dengan CSS kadang-kadang lintas-browser tidak pasti terutama dengan browser lama, jadi saya menemukan membuat tag legenda tidak terlihat untuk pengguna pembaca layar dan menambahkan rentang terpisah, aria-hidden = "true" yang ditata seperti label untuk pengguna terlihat membuat hal-hal sederhana untuk ditata dan membuat hal-hal dapat diakses.

DWoldrich
sumber
This lets you tab through a form, and when you get to a fieldset, you can use arrow keys to change the selected radio, and then tab away when you're done.- Itulah perilaku default dari input radio dan tidak ada hubungannya dengan fieldset. Kotak centang berperilaku berbeda secara default.
Vladimir Kornea
2

Saya merasa berguna untuk styling CSS dan menghubungkan label dengan kontrol. Ini membuatnya mudah untuk menempatkan wadah visual di sekitar sekelompok bidang dan meluruskan label.

Chuck Spohr
sumber
2

Saya menggunakan fieldset untuk mengelompokkan input formulir, ketika saya memiliki formulir besar dan ingin memecahnya dalam semacam form wizard.

Pertanyaan yang sama dijawab di sini pada SO.

Eric H.
sumber
2

Hanya meringkas beberapa keuntungan:

<fieldset> Elemen HTML  digunakan untuk mengelompokkan beberapa kontrol serta label ( <label>) dalam formulir web seperti yang didefinisikan oleh MDN .

Dengan kata lain: Tag fieldset memungkinkan Anda mengelompokkan kumpulan bidang secara logis agar formulir Anda lebih deskriptif. Jadi, satu set kontrol bentuk secara opsional dikelompokkan di bawah nama umum.

<fieldset>
  <legend>Choose your favorite animal</legend>

  <input type="radio" id="dog" name="animal">
  <label for="dog">Dog</label><br/>

  <input type="radio" id="cat" name="animal">
  <label for="cat">Cat</label><br/>
</fieldset>

" Keuntungan " menggunakan fieldset adalah:

  • mereka memungkinkan Anda untuk menandai data Anda (dalam hal ini formulir) di paling semantik tersedia. Pertimbangkan bahwa menempatkan bidang Anda di bidang lebih bersifat deskriptif daripada menempatkan bidang Anda di div. Div tidak memberi tahu Anda apa pun tentang hubungan antara bidang, satu bidang memberitahu Anda bahwa ada hubungan.
  • dengan menggunakan dinonaktifkan , ini memungkinkan Anda untuk menonaktifkan dan semua isinya dalam sekali jalan.
  • ini membantu aksesibilitas
mmsilviu
sumber
1

Bagi saya, salah satu keuntungan terbesar dari <fieldset>...</fieldset>elemen ini adalah kemampuan untuk mempertahankan <form>...</form>konteks bahkan jika <fieldset>...</fieldset>tidak ada di dalam formulir.

Misalnya, formulir berikut:

<div class="header">
    <form id="myForm">
        <input type="text" name="someInput">
    </form>
</div>

<div class="footer">
    <fieldset form="myForm">
        <input type="text" name="someInput1">
    </fieldset>
</div>

secara semantik identik dengan bentuk berikut:

<form>
    <input type="text" name="someInput">
    <input type="text" name="someInput1">
</form>
altgov3en
sumber