Atribut khusus - Ya atau tidak?


254

Baru-baru ini saya telah membaca semakin banyak tentang orang-orang yang menggunakan atribut khusus dalam tag HTML mereka, terutama untuk tujuan menanamkan beberapa bit data tambahan untuk digunakan dalam kode javascript.

Saya berharap dapat mengumpulkan umpan balik tentang apakah menggunakan atribut khusus atau tidak adalah praktik yang baik, dan juga apa beberapa alternatifnya.

Sepertinya itu benar-benar dapat menyederhanakan baik sisi server dan kode sisi klien, tetapi juga tidak sesuai W3C.

Haruskah kita memanfaatkan atribut HTML khusus di aplikasi web kita? Mengapa atau mengapa tidak?

Bagi mereka yang menganggap atribut khusus adalah hal yang baik: apa sajakah hal yang perlu diingat ketika menggunakannya?

Bagi mereka yang menganggap atribut khusus adalah hal yang buruk: alternatif apa yang Anda gunakan untuk mencapai sesuatu yang serupa?

Pembaruan: Saya lebih tertarik pada alasan di balik berbagai metode, serta poin mengapa satu metode lebih baik dari yang lain. Saya pikir kita semua dapat menemukan 4-5 cara berbeda untuk mencapai hal yang sama. (elemen tersembunyi, skrip sebaris, kelas tambahan, parsing info dari id, dll).

Pembaruan 2: Tampaknya data-fitur atribut HTML 5 memiliki banyak dukungan di sini (dan saya cenderung setuju, sepertinya opsi yang solid). Sejauh ini saya belum melihat banyak cara bantahan untuk saran ini. Apakah ada masalah / jebakan yang perlu dikhawatirkan dalam menggunakan pendekatan ini? Atau itu hanya validasi 'tidak berbahaya' dari spesifikasi W3C saat ini?


Jujur, pendirian awal saya adalah bahwa mereka bukan hal yang buruk, yang bisa agak kontroversial dengan kaum puritan. Saya merasa seperti saya benar-benar perlu duduk dan mengevaluasi semua opsi yang tersedia untuk mendukung hal ini dengan benar, sehingga perlu menulis esai yang panjang.
Paolo Bergantino

Untuk melakukan itu, Anda mungkin hanya perlu beberapa contoh tandingan: dari apa yang Anda coba implementasikan, betapa mudahnya melakukannya dengan atribut khusus, dan mengapa solusi itu lebih baik dan tidak lebih buruk daripada solusi lain tanpa atribut khusus.
ChrisW

@ Chris Saya sebagian besar meminta saya tidak tertarik, tidak keluar dari beberapa aplikasi tertentu.
TM.

Nah, ada banyak opsi untuk mendapatkan data ke sisi klien: bidang input tersembunyi, daftar definisi tersembunyi, kelas, plugin metadata, memiliki kamus Javascript besar (objek) dengan semua pemetaan data secara terpisah, atribut khusus, atribut data ( HTML5), dll. Saya ingin menjelajahi semua ini, mempertimbangkan kemampuan mereka, perangkap mereka, dan akhirnya mencapai kesimpulan. Posting ini akhirnya membuat saya mulai menulis ini. :) Harus dilakukan kira-kira sebelum 2010.
Paolo Bergantino

2
@ Paolo Anda tidak bisa hanya mengatakan Anda menulis esai untuk menjawab pertanyaan ini tanpa memberi kami tautan. Tidak keren.
Connell

Jawaban:


253

HTML 5 secara eksplisit memungkinkan atribut khusus yang dimulai dengan data. Jadi, misalnya, <p data-date-changed="Jan 24 5:23 p.m.">Hello</p>valid. Karena secara resmi didukung oleh standar, saya pikir ini adalah opsi terbaik untuk atribut khusus. Dan itu tidak mengharuskan Anda untuk membebani atribut lainnya dengan peretasan, sehingga HTML Anda dapat tetap semantik.

Sumber: http://www.w3.org/TR/html5/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes


Ini adalah pendekatan yang baik .. Tapi saya ragu itu akan berhasil karena Anda harus mendukung IE 6 dan browser lama lainnya.
cllpse

8
Saya cukup yakin ini berfungsi dengan browser lama; atribut ditambahkan ke DOM, di mana Anda dapat mengaksesnya.
Ms2ger

12
Ini bekerja dengan sangat baik dengan semua browser menggunakan metode getAttribute () pada HTMLElement. Plus, seiring meningkatnya dukungan dataset HTML5, Anda dapat dengan mudah menambahkannya.
ajm

1
@Cuck rupanya Anda dapat menambahkan Atribut ke DOCTYPE: rodsdot.com/html/… - bukan karena saya pikir itu ide yang bagus, tetapi tampaknya standar.
Michael Stum

2
@Wahnfrieden: w3.org/TR/REC-html40/intro/sgmltut.html#idx-attribute-8 yang disetujui, standar metode compliant. Yang dijelaskan dan diperagakan dengan baik di sini: rodsdot.com/html/... Seperti yang sebelumnya diposting oleh orang lain.
rdivilbiss

95

Inilah teknik yang saya gunakan baru-baru ini:

<div id="someelement">

    <!-- {
        someRandomData: {a:1,b:2},
        someString: "Foo"
    } -->

    <div>... other regular content...</div>
</div>

Objek komentar terkait dengan elemen induk (mis. #Someelement).

Inilah pengurai: http://pastie.org/511358

Untuk mendapatkan data untuk elemen tertentu, cukup panggil parseDatadengan referensi ke elemen yang diteruskan sebagai satu-satunya argumen:

var myElem = document.getElementById('someelement');

var data = parseData( myElem );

data.someRandomData.a; // <= Access the object staight away

Itu bisa lebih ringkas dari itu:

<li id="foo">
    <!--{specialID:245}-->
    ... content ...
</li>

Akses:

parseData( document.getElementById('foo') ).specialID; // <= 245

Satu-satunya kelemahan menggunakan ini adalah tidak dapat digunakan dengan elemen self-closing (mis. <img/>), Karena komentar harus berada dalam elemen untuk dipertimbangkan sebagai data elemen itu.


EDIT :

Manfaat penting dari teknik ini:

  • Mudah diimplementasikan
  • Apakah tidak invalidate HTML / XHTML
  • Mudah digunakan / dimengerti (notasi JSON dasar)
  • Tidak mengganggu dan lebih bersih daripada kebanyakan alternatif

Berikut kode parser (disalin dari tautan http://pastie.org/511358 di atas, kalau-kalau kode tersebut tidak tersedia di pastie.org):

var parseData = (function(){

    var getAllComments = function(context) {

            var ret = [],
                node = context.firstChild;

            if (!node) { return ret; }

            do {
                if (node.nodeType === 8) {
                    ret[ret.length] = node;
                }
                if (node.nodeType === 1) {
                    ret = ret.concat( getAllComments(node) );
                }
            } while( node = node.nextSibling );

            return ret;

        },
        cache = [0],
        expando = 'data' + +new Date(),
        data = function(node) {

            var cacheIndex = node[expando],
                nextCacheIndex = cache.length;

            if(!cacheIndex) {
                cacheIndex = node[expando] = nextCacheIndex;
                cache[cacheIndex] = {};
            }

            return cache[cacheIndex];

        };

    return function(context) {

        context = context || document.documentElement;

        if ( data(context) && data(context).commentJSON ) {
            return data(context).commentJSON;
        }

        var comments = getAllComments(context),
            len = comments.length,
            comment, cData;

        while (len--) {
            comment = comments[len];
            cData = comment.data.replace(/\n|\r\n/g, '');
            if ( /^\s*?\{.+\}\s*?$/.test(cData) ) {
                try {
                    data(comment.parentNode).commentJSON =
                        (new Function('return ' + cData + ';'))();
                } catch(e) {}
            }
        }

        return data(context).commentJSON || true;

    };

})();

2
Karena penasaran, metode apa yang Anda gunakan untuk tag penutup diri? Saya biasanya perlu menggunakan sesuatu seperti ini pada elemen <input> (untuk membantu dalam aturan validasi sisi klien). Alternatif apa yang Anda ambil dalam situasi itu?
TM.

2
Saya mungkin akan menggunakan teknik yang sama, alih-alih data komentar yang mengikat "parentNode" itu bisa mengikat ke "sebelumnyaSibling" dari komentar ... Kemudian Anda dapat memiliki komentar segera mengikuti <input /> dan itu akan kerja: <input /> <! - {data: 123} ->
James

7
seseorang harus membuat ini jquery plugin yang
SeanDowney

10
Komentar harus dapat diubah / dihapus tanpa merusak apa pun. Itulah intinya. Jadi itu ide buruk untuk memasukkan sesuatu yang penting ke markup atau kode ke dalam komentar. Pengembang masa depan dapat dengan mudah berpikir bahwa itu adalah komentar dan menghapusnya. Kami sudah memiliki solusi nyata untuk pertanyaan ini: atribut khusus diawali dengan "data-". Pendekatan ini seharusnya tidak pernah digunakan.
MGOwen

6
Izinkan saya memperkuat pernyataan @MGOwen: jangan gunakan komentar untuk menambahkan fungsionalitas. Khususnya dalam HTML. Apakah Anda tidak menggunakan minifiers? Anda tidak akan dapat menghapus komentar tanpa melanggar kode Anda. Ini juga berarti Anda tidak dapat menambahkan komentar nyata lagi.
Olivictor

15

Anda dapat membuat atribut apa pun jika Anda menentukan skema untuk halaman Anda.

Sebagai contoh:

Tambahkan ini

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:addthis="http://www.addthis.com/help/api-spec">
...
<a addthis:title="" addthis:url="" ...>

Facebook (bahkan tag)

<html xmlns:og="http://opengraphprotocol.org/schema/" xmlns:fb="http://www.facebook.com/2008/fbml">
...
<fb:like href="http://developers.facebook.com/" width="450" height="80"/>

10

Cara termudah untuk menghindari penggunaan atribut khusus adalah dengan menggunakan atribut yang ada.

menggunakan nama kelas yang bermakna dan relevan.
Misalnya, lakukan sesuatu seperti: type='book'dan type='cd', untuk mewakili buku dan CD. Kelas jauh lebih baik untuk mewakili apa sesuatu IS .

misalnya class='book'

Saya telah menggunakan atribut khusus di masa lalu, tetapi jujur, sebenarnya tidak ada kebutuhan untuk itu jika Anda menggunakan atribut yang ada dengan cara yang secara semantik bermakna.

Untuk memberikan contoh yang lebih konkret, katakanlah Anda memiliki situs yang memberikan tautan ke berbagai jenis toko. Anda dapat menggunakan yang berikut ini:

<a href='wherever.html' id='bookstore12' class='book store'>Molly's books</a>
<a href='whereverelse.html' id='cdstore3' class='cd store'>James' Music</a>

styling css dapat menggunakan kelas-kelas seperti:

.store { }
.cd.store { }
.book.store { }

Dalam contoh di atas kita melihat bahwa keduanya adalah tautan ke toko (berbeda dengan tautan lain yang tidak terkait di situs) dan satu adalah toko cd, dan yang lainnya adalah toko buku.


4
Poin bagus, tetapi untuk bersikap adil, "type" hanya valid pada tag tertentu, dan ketika itu adalah atribut yang valid, itu juga memiliki daftar nilai yang valid, jadi Anda masih belum benar-benar memenuhi persyaratan w3c.
TM.

1
maksud saya adalah Anda TIDAK boleh menggunakan tag jenis untuk ini. maka Jika Anda ... maka Anda harus ... saya akan mengedit untuk membuat yang lebih jelas
Jonathan Fingland

Saya cenderung membuat atribut "kelas" saya dengan rasa dengan meminta beberapa di antaranya ditambahkan dengan semacam "kualifikasi-". untuk div yang terkait dengan tata letak saja, saya ingin kelasnya menjadi "tata letak-xxx", atau untuk div internal yang mengelilingi bagian penting, seperti buku atau toko, saya akan memiliki buku konten, atau toko konten . kemudian di JavaScript saya, saya memiliki fungsi yang menambahkan hal-hal tersebut pada tag berdasarkan apa yang saya cari. ini membantu menjaga hal-hal tetap bersih dan terorganisir untuk saya, tetapi membutuhkan tingkat disiplin dan pra-organisasi tertentu.
Kera-inago

2
@ Jonathan hal kelas ganda berfungsi dengan baik kecuali dalam kasus di mana 'nilai' tidak diketahui. Misalnya, jika itu adalah semacam nomor integer, kami tidak dapat memilih dengan baik untuk setiap kasus yang mungkin. Kita kemudian dibiarkan mem-parse atribut kelas secara manual yang pasti bisa diterapkan, tetapi tidak sejelas dalam kode, dan dalam beberapa kasus, bisa sangat lambat (jika ada banyak elemen kandidat untuk diurai).
TM.

2
Sayangnya, menulis penyeleksi css untuk dua kelas sekaligus (.ab perhatikan kosong yang hilang) tidak berfungsi di IE. itu berfungsi di firefox dan browser lain. masih, menggunakan kelas adalah cara yang bagus untuk menanamkan makna semantik tambahan untuk markup Anda
knittl

6

Sematkan data dalam dom dan gunakan metadata untuk jQuery .

Semua plug-in yang baik mendukung plugin metadata (memungkinkan per opsi tag).

Ini juga memungkinkan struktur data / data yang sangat rumit, serta pasangan nilai kunci.

<li class="someclass {'some': 'random,'json':'data'} anotherclass">...</li>

ATAU

<li class="someclass" data="{'some':'random', 'json': 'data'}">...</li>

ATAU

<li class="someclass"><script type="data">{"some":"random","json":"data"}</script> ...</li>

Kemudian dapatkan data seperti:

var data = $('li.someclass').metadata();
if ( data.some && data.some == 'random' )
alert('It Worked!');

22
Merusak atribut kelas ketika ada cara W3C yang disetujui untuk menentukan atribut khusus mungkin adalah alasan Anda ditolak.
rdivilbiss

2
merusak atribut kelas hanyalah salah satu cara untuk menggunakan plugin; itu bukan satu - satunya cara.
antony.trupe

1
Alasan lain mengapa Anda ditolak adalah menyarankan plugin di mana tidak ada plugin sama sekali.
meandre

4

Saya melihat tidak ada masalah dalam menggunakan fitur XHTML yang ada tanpa merusak apa pun atau memperluas namespace Anda. Mari kita lihat contoh kecil:

<div id="some_content">
 <p>Hi!</p>
</div>

Bagaimana cara menambahkan informasi tambahan ke some_content tanpa atribut tambahan? Bagaimana dengan menambahkan tag lain seperti yang berikut ini?

<div id="some_content">
 <div id="some_content_extended" class="hidden"><p>Some alternative content.</p></div>
 <p>Hi!</p>
</div>

Itu membuat hubungan melalui id / ekstensi "_extended" yang ditentukan dengan baik dari pilihan Anda dan dengan posisinya dalam hierarki. Saya sering menggunakan pendekatan ini bersama dengan jQuery dan tanpa benar-benar menggunakan teknik seperti Ajax.


2
Masalah dengan menambahkan tag bersarang seperti ini adalah bahwa ia cenderung membuat kode serveride SANGAT rumit dan jelek (JSP / ASP / DTL dll)
TM.

3

Bahkan. Coba sesuatu seperti ini sebagai gantinya:

<div id="foo"/>

<script type="text/javascript">
  document.getElementById('foo').myProperty = 'W00 H00! I can add JS properties to DOM nodes without using custom attributes!';
</script>

1
Jadi Anda lebih suka menulis banyak tag skrip tambahan di seluruh dokumen Anda untuk halaman dinamis? Saya akan menggunakan tugas javascript manual ketika info ditambahkan di sisi klien, tetapi masalah ini terutama tentang apa yang harus dirender di server. Selain itu, jQuery.data () jauh lebih baik daripada metode Anda.
TM.

Jawaban di atas adalah contoh independen kerangka kerja untuk mendemonstrasikan fungsionalitas. Anda dapat dengan mudah memperluas intinya untuk membuat kode cukup singkat. Misalnya, <div id = "foo" /> <div id = "bar" /> <div id = "baz" /> <jenis skrip = "teks / javascript"> xtrnlFnc ({foo: 'w00 h00', bar : 'etc.', baz: 3.14159}); </script> Jika Anda menggunakan jQuery (bukan berarti Anda menyebutkannya di pertanyaan awal), tentu saja, gunakan metode data - itulah gunanya. Jika tidak, mengirimkan data di antara lapisan arsitektur adalah penggunaan tag skrip inline yang valid.
Anon

Ini jelas merupakan opsi yang jelas dan valid. Menurut pendapat saya itu hanya mengacaukan kode lebih dari banyak alternatif lain yang tidak menggunakan atribut khusus. Dan untuk lebih jelasnya, saya tidak mencoba untuk bersikap agresif atau kasar, saya hanya mencoba untuk membujuk beberapa alasan Anda mengapa Anda lebih suka metode ini. Anda telah memberikan alternatif tetapi bukan itu pertanyaan sebenarnya.
TM.

1
Saya tidak berpikir ada masalah dengan pendekatan ini yang merusak browser. Microsoft menggunakan mekanisme yang tepat ini sebagai mekanisme yang disukai di halaman ASP.NET. (dengan memanggil RegisterExpandoAttribute di sisi server). Pertanyaannya tampaknya terfokus pada klien dan bukan pada server, tetapi di sisi server semua pendekatan ini dapat (harus?) Diabstraksikan.
Adrian

3
Pro untuk pendekatan ini: - Ini menghasilkan markup yang valid (bahkan di bawah browser / spesifikasi lama). --Itu membuat maksud data (untuk dikonsumsi oleh JS) menjadi jelas. --Ini adalah kohesif untuk elemen tanpa memanfaatkan fitur-fitur lainnya (seperti komentar). --Ini tidak memerlukan penguraian khusus. Dari perspektif sisi server, Anda dapat menganggapnya seperti RPC.
steamer25

2

Saya tidak melakukan menggunakan atribut khusus, karena saya mengeluarkan XHTML, karena saya ingin data dapat dibaca oleh perangkat lunak pihak ke-3 (walaupun, saya bisa memperpanjang skema XHTML jika saya mau).

Sebagai alternatif untuk atribut khusus, sebagian besar saya menemukan atribut id dan kelas (misalnya seperti yang disebutkan dalam jawaban lain) cukup.

Juga pertimbangkan ini:

  • Jika data tambahan harus dapat dibaca oleh manusia dan juga dapat dibaca oleh mesin, maka data tersebut harus disandikan menggunakan tag dan teks HTML (terlihat) alih-alih sebagai atribut khusus.

  • Jika tidak perlu dibaca manusia, maka mungkin dapat dikodekan menggunakan tag dan teks HTML yang tidak terlihat .

Beberapa orang membuat pengecualian: mereka mengizinkan atribut khusus, ditambahkan ke DOM oleh Javascript di sisi klien saat run-time. Mereka menganggap ini OK: karena atribut khusus hanya ditambahkan ke DOM pada saat run-time, HTML tidak mengandung atribut khusus.


1

Kami telah membuat editor berbasis web yang memahami subset HTML - subset yang sangat ketat (yang dipahami hampir secara universal oleh klien surat). Kita perlu mengekspresikan hal-hal seperti <td width="@INSWIDTH_42@">dalam database, tetapi kita tidak dapat memilikinya di DOM, jika tidak browser tempat editor berjalan, panik (atau lebih cenderung panik daripada cenderung panik pada atribut khusus) . Kami ingin drag-and-drop, jadi memasukkannya murni di DOM sudah keluar, seperti jquery .data()(data tambahan tidak disalin dengan benar). Kami mungkin juga membutuhkan data tambahan untuk ikut dalam perjalanan .html(). Pada akhirnya kami memutuskan untuk menggunakan <td width="1234" rs-width="@INSWIDTH_42@">selama proses pengeditan, dan kemudian ketika kami POST semuanya, kami menghapus widthdan melakukan pencarian dan penghancuran regex s/rs-width=/width=/g.

Pada awalnya orang yang menulis sebagian besar ini adalah validasi-nazi pada masalah ini dan mencoba segalanya untuk menghindari atribut khusus kami, tetapi pada akhirnya menyetujui ketika tidak ada hal lain yang tampaknya berfungsi untuk SEMUA persyaratan kami. Itu membantu ketika dia menyadari bahwa atribut khusus tidak akan pernah muncul dalam email. Kami memang mempertimbangkan untuk menyandikan data tambahan kami class, tetapi memutuskan bahwa itu akan menjadi yang terbesar dari dua kejahatan.

Secara pribadi, saya lebih suka memiliki hal-hal yang bersih dan melewati validator dll, tetapi sebagai karyawan perusahaan saya harus ingat bahwa tanggung jawab utama saya adalah memajukan tujuan perusahaan (menghasilkan uang secepat mungkin), bukan keinginan egois saya untuk kemurnian teknis. Alat harus bekerja untuk kita; bukan kita untuk mereka.


1

Saya tahu orang-orang menentangnya, tetapi saya datang dengan solusi super singkat untuk ini. Jika Anda ingin menggunakan atribut khusus seperti "milikku", misalnya:

<a href="test.html" mine-one="great" mine-two="awesome">Test</a>

Kemudian Anda dapat menjalankan kode ini untuk mendapatkan objek kembali seperti halnya jquery.data ().

var custom_props = {} ;
$.each($(".selector")[0].attributes, function(i,x) {
    if (this.specified && x.name.indexOf("mine-") !== -1) 
        self.new_settings[x.name.replace("modal-","")] = x.value;
});

0

Spec: Buat kontrol ASP.NET TextBox yang secara otomatis memformat teksnya sebagai angka, sesuai dengan properti "DecimalSeparator" dan "ThousandsSeparator", menggunakan JavaScript.


Salah satu cara untuk mentransfer properti ini dari kontrol ke JavaScript adalah dengan membuat kontrol membuat properti khusus:

<input type="text" id="" decimalseparator="." thousandsseparator="," />

Properti khusus mudah diakses oleh JavaScript. Dan sementara halaman menggunakan elemen dengan properti khusus tidak akan divalidasi , rendering halaman itu tidak akan terpengaruh.


Saya hanya menggunakan pendekatan ini ketika saya ingin mengaitkan tipe sederhana seperti string dan integer ke elemen HTML untuk digunakan dengan JavaScript. Jika saya ingin membuat elemen HTML lebih mudah diidentifikasi, saya akan menggunakan properti class dan id .


0

Untuk aplikasi web yang kompleks, saya menjatuhkan atribut khusus di semua tempat.

Untuk halaman yang menghadap publik lainnya, saya menggunakan atribut "rel" dan membuang semua data saya di JSON dan mendekode dengan MooTools atau jQuery:

<a rel="{color:red, awesome:true, food: tacos}">blah</a>

Saya mencoba untuk tetap menggunakan atribut data HTML 5 belakangan ini hanya untuk "mempersiapkan", tetapi belum datang secara alami.


-1

Saya menggunakan bidang khusus sepanjang waktu misalnya <ai = "" .... Lalu referensi ke i dengan jquery. Html tidak valid, ya. Itu bekerja dengan baik, ya.


Sepertinya ada yang hilang di sini. Apakah tag Anda lengkap, di sini?
Stuart Siegler

Bagaimana orang bisa memahami ini? Harap lengkapi jawaban Anda.
Rahul Raj

-2

Atribut khusus, menurut pendapat saya, tidak boleh digunakan karena tidak valid. Alternatif untuk itu, Anda dapat mendefinisikan banyak kelas untuk elemen tunggal seperti:

<div class='class1 class2 class3'>
    Lorem ipsum
</div>

10
secara pribadi, saya pikir ini adalah contoh yang mengerikan. nama kelas Anda menentukan tampilannya, bukan tujuannya. Pikirkan ketika Anda ingin mengubah semua div yang serupa ... Anda harus pergi dan mengubahnya semua ke span-11 atau sejenisnya. kelas harus mendefinisikan apa itu. style sheet harus menentukan bagaimana hal-hal itu terlihat
Jonathan Fingland

Bagaimana Anda menggunakan metode ini untuk menentukan lebih dari sekadar bendera? Saya cenderung setuju dengan pendirian Anda, dan saya tidak menggunakan atribut khusus (walaupun saya mempertimbangkannya). Keuntungan memiliki pasangan kunci / nilai tampaknya sedikit lebih berguna daripada hanya menambahkan kelas lain.
TM.

@ Jonathan Fingland: Jika Kompas digunakan, Anda tidak perlu mengatur nama kelas di sini. Anda cukup menentukannya dalam file .sass dan markup Anda akan bersih.
Alan Haggai Alavi

@ Jonathan Fingland, classatributnya jelas tidak diperuntukkan untuk "penampilan" saja. Penggunaan lain adalah "pemrosesan tujuan umum oleh agen pengguna". Ini berbicara spec: w3.org/TR/REC-html40/struct/global.html#h-7.5.2
npup

@ npup: pilihan kutipan yang menarik. Seperti yang saya nyatakan lebih dari setahun yang lalu, style sheet mendefinisikan bagaimana hal-hal itu akan terlihat (seperti halnya atribut style, saya akan tambahkan), dan atribut class digunakan untuk mendefinisikan tujuan elemen. Artinya, secara khusus digunakan untuk mendefinisikan apa itu IS, dan bukan bagaimana MELIHAT. Saya pikir Anda mungkin salah membaca apa yang saya katakan, karena kami setuju sejauh yang saya tahu.
Jonathan Fingland
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.