Frame (HTML)

Dalam konteks penyemak imbas web, ***frame*** ("bingkai") ialah sebahagian daripada halaman web atau tetingkap penyemak imbas yang memaparkan kandungan secara bebas daripada bekasnya, dengan keupayaan untuk memuatkan kandungan secara bebas. HTML atau elemen media yang ditunjukkan dalam bingkai mungkin berasal dari tapak web yang berbeza dengan elemen kandungan lain yang dipamerkan, walaupun amalan ini kini sering dianggap sebagai pelanggaran dasar asal sama dan mempunyai telah dianggap sebagai satu bentuk pelanggaran hak cipta.

Dalam HTML, ***frameset*** ialah sekumpulan bingkai bernama yang mana halaman web dan media boleh diarahkan, dan ***iframe*** pula menyediakan bingkai untuk diletakkan di dalam badan dokumen.

Sejak awal 2000-an, penggunaan set bingkai telah dianggap usang disebabkan oleh kebimbangan kebolehgunaan dan ketercapaian, dan ciri tersebut telah dibuang daripada piawaian HTML5.

## Teg dan atribut
*Frame* dalam HTML dibuat menggunakan pasangan tag `<frameset></frameset>`. Teg `<frameset>` ialah teg bekas bagi semua teg lain yang digunakan untuk membuat bingkai. Teg `<frameset>` menggantikan teg `<body>` dalam dokumen *frameset*. Teg `<frameset>` mentakrifkan cara membahagikan tetingkap kepada bingkai.

Setiap *frameset* mentakrifkan satu set baris atau lajur. Jika pengguna mentakrifkan bingkai dengan menggunakan atribut `rows,` maka bingkai mendatar dicipta. Jika pengguna mentakrifkan bingkai dengan menggunakan `cols` maka bingkai menegak dicipta.

`<noframes>` mungkin disertakan supaya pelayar web dengan bingkai dinyahkan (atau penyemak imbas yang tidak menyokong bingkai) boleh memaparkan sesuatu kepada pengguna, seperti dalam contoh ini:
```html4strict
<frameset cols="85%, 15%">
 <frame src="http://www.example.com/frame_1.html" name="frame_1">
 <frame src="http://alt.example.com/frame_2.html" name="frame_2">
 <noframes>
  frame tidak disokong oleh pelayar web anda. 
  <a href="http://www.example.com/frame_1.html">Klik di sini</a> untuk melihat ''frame'' 1. 
  <a href="http://alt.example.com/frame_2.html">Klik di sini</a> untuk melihat ''frame'' 2.
 </noframes>
</frameset>
```
*Frameset* mempunyai atribut `border` (jidar/sempadan). Jika ditetapkan kepada integer lebih besar daripada 0, pengguna boleh mengubah saiz bingkai dengan menyeret jidar ini, melainkan atribut `noresize` hadir dalam elemen *frame*. Jika nilai ditetapkan kepada 0, tiada sempadan akan dipaparkan dan kandungan dalam bingkai berbeza akan bersempadan antara satu sama lain tanpa persempadanan semula.

Unsur `iframe` digunakan sebaris dalam badan HTML biasa, dan mentakrifkan kandungan awal dan nama sama dengan elemen `frame`. Sebarang teks di dalam pasangan teg `<iframe></iframe>` akan dipaparkan dalam penyemak imbas yang tidak dapat mengenal pasti teg *iframe*.
```html4strict
<iframe src="http://www.example.com/frame_1.html" height="480" width="640">
  iframes tidak disokong oleh pelayar web anda. <a href="http://www.example.com/frame_1.html">Klik di sini</a> untuk melihat kandungan.
</iframe>
```


## Alternatif
Apabila teknologi web berkembang, banyak tujuan penggunaan bingkai menjadi mungkin dengan cara yang mengelakkan masalah yang dikenal pasti dengan bingkai.

* CSS membenarkan elemen halaman ditatal secara bebas (menggunakan sifat `overflow` ) atau dipegang pada skrin semasa kandungan lain ditatal (menggunakan `position:fixed`)
* Server-Side Includes membolehkan kandungan terkongsi untuk disunting sekali dan dihantar secara automatik kepada pengguna sebagai sebahagian halaman siap; apabila CPU pelayan dan kelajuan sambungan meningkat, kerja tambahan yang diperlukan untuk melakukan ini dengan cepat menjadi pertimbangan yang kurang.
* Common Gateway Interface dan bahasa skrip berorientasikan web dan rangka kerja pembangunan web seperti PHP dan Halaman Pelayan Aktif, serta Sistem Pengurusan Kandungan yang disokong pangkalan data seperti WordPress, menyediakan pilihan pelbagai untuk mengekalkan kandungan dan menyediakan navigasi.
* Skrip sisi klien dan HTML Dinamik membenarkan bahagian halaman diganti secara visual berdasarkan tindakan pengguna. Ini membenarkan lebih banyak fleksibiliti untuk menunjukkan kandungan "sisi", seperti nota kaki atau arahan, kerana ini kini boleh dipaparkan dan disembunyikan di mana-mana pada halaman dan bukannya memerlukan bingkai yang telah ditetapkan.
* AJAX dibenarkan bagi paparan dinamik dalam halaman kandungan walaupun ia perlu diambil dari pelayan, contohnya berdasarkan pengguna log masuk atau acara di tempat lain.

Tidak semua masalah yang dikenal pasti dengan *frameset* selesai dengan pendekatan alternatif ini; contohnya isu dengan navigasi belakang hadapan, penanda halaman dan pengindeksan kekal di banyak tapak yang banyak menggunakan navigasi DHTML/AJAX.