- Di HTML, meskipun memakai nama tag yang tidak dikenali, browser akan tetap menanganinya sebagai elemen biasa
- Jika nama tag tersebut ditentukan sebagai selector di CSS, maka pemberian style dan kontrol tampilan bisa dilakukan
- Menggunakan nama yang mengandung tanda hubung (-) dapat mencegah benturan dengan standar HTML di masa depan
- Alih-alih
<div>atau<span>, memakai tag kustom yang bermakna dapat meningkatkan keterbacaan kode - Bahkan dalam struktur nested yang kompleks, struktur lebih mudah dipahami hanya dari nama tag, sehingga perawatan jadi lebih mudah
Pemanfaatan tag HTML kustom
-
Browser merender tag yang tidak dikenal seperti elemen blok biasa
- Ini adalah perilaku normal yang dijelaskan dalam standar HTML, dan tampilannya dapat dikendalikan secara visual jika style ditetapkan di CSS
- Sebagai contoh, tag seperti
<cool-thing>bisa didefinisikan dan dihias di CSS dalam bentukcool-thing { ... }
-
Jika nama tag menyertakan tanda hubung (-), maka tidak akan berbenturan dengan penambahan pada standar HTML di masa depan sehingga tidak ada risiko konflik
- Contoh:
<main-article>,<quote-body>
- Contoh:
Peningkatan keterbacaan dan struktur
- Menggunakan tag dengan nama yang bermakna alih-alih
<div>atau<span>membuat kode lebih mudah dipahami- Misalnya,
<div class="article-header">bisa diganti dengan<article-header>
- Misalnya,
- Dalam struktur
<div>yang bertingkat, posisi tag penutup sulit dikenali, tetapi dengan nama tag yang eksplisit struktur menjadi lebih jelas- Jika di dalam
<main-article>ada<article-header>,<article-quote>, dan sebagainya, maka struktur DOM lebih intuitif untuk dipahami
- Jika di dalam
Contoh kode
- Cara lama
<div class="cool-thing"> Hello, World! </div> - Cara dengan tag kustom
<cool-thing> Hello, World! </cool-thing>- Di CSS, style bisa ditetapkan dalam bentuk
cool-thing { display: block; font-weight: bold; text-align: center; ... }
- Di CSS, style bisa ditetapkan dalam bentuk
Kesimpulan
- Dengan memanfaatkan fitur definisi tag yang fleksibel yang diizinkan oleh standar HTML,
kita bisa menulis markup struktural yang lebih mudah dibaca - Namun, jika sudah ada tag bermakna yang didefinisikan, maka menggunakan tag yang sudah ada tetap menjadi prioritas
1 komentar
Pendapat Hacker News
Menekankan bahwa
<tag-name>bukanlah tag yang tidak dikenaliMemperkenalkan tulisan blog miliknya, dan menjelaskan bahwa
<tagname>diperlakukan sebagai HTMLUnknownElement sampai WHATWG menambahkannya sebagai elemen baru, tetapi<tag-name>adalah HTMLElement yang valid sehingga berguna untuk layout dan stylingJika di-upgrade dengan JavaScript Custom Elements API, itu menjadi custom element yang terdefinisi
Ini adalah perilaku standar di semua browser, dan W3C HTML Validator juga mengakui custom element yang mengandung dash sebagai HTMLElement
Namun aturan
[hidden]{display:none}dari stylesheet UA bawaan tidak diwariskan, jadi harus ditentukan sendiriFakta bahwa
<DIV>secara default memilikidisplay:blockjuga berkat stylesheet UA, jadi untuk custom element kita perlu mengatur propertidisplaysendiriDengan selector CSS
:defineddan:not(:defined), elemen yang terdefinisi dan belum terdefinisi bisa dibedakanDeclarative Shadow DOM (
<template shadowrootmode="open">) juga dengan cara yang sama membuat custom element yang belum terdefinisihiddenadalah atribut presentasional HTML (presentation attribute)Stylesheet UA diterapkan sama pada custom element, dan tidak ada aturan
[hidden]hiddenadalah contoh di mana atribut itu sendiri ditafsirkan sebagai style, sepertialign="right"-), integrasi namespace XML akan terasa lebih alamiMenyebut bahwa di nginx atau apache, titik dua pun bisa diubah menjadi tanda hubung
Menutup dengan nada nostalgia, “kita tidak bisa kembali ke tahun 1999”
Menunjukkan bahwa struktur nested
<div>pada contoh kode terlalu berlebihanMenyarankan bahwa memakai tag semantik seperti
<article>,<header>, dan<blockquote>akan lebih tepatClass bisa ada banyak dan tidak memiliki urutan, sedangkan custom element yang bersarang memaksakan urutan, sehingga sulit mengekspresikan hal yang sama
Itu masuk akal pada 1996, tetapi dinilai tidak lagi demikian sekarang
Membagikan pengalaman memakai custom element selama 3–4 tahun
Idenya cerdas, tetapi rumit dalam praktik
Jika terlalu banyak custom tag dipakai, keterbacaan menurun dan sulit membedakan blok dengan inline
Dengan pendekatan yang seimbang, tag bawaan tetap dipakai apa adanya, dan custom tag hanya digunakan untuk elemen berbentuk komponen seperti
<x-card>atau<x-hero>Subkomponen dibedakan lewat atribut slot, misalnya
<div slot="hero-blurb">Mereka lebih suka membatasi class hanya untuk modifikasi dan kustomisasi, sementara struktur diekspresikan lewat slot
Memperkenalkan Good.HTML buatannya, dan menjelaskan bahwa itu mendukung autohook, interpolasi berbasis template literal, dan struktur komponen yang tertata
Menambahkan bahwa custom element self-closing seperti
< !app-header />juga diimplementasikan dengan trik comment nodeslotdi CSS cukup menulis sepertidiv[slot="hero-blurb"]Secara default custom tag berperilaku seperti
<span>Jika perlu, perilakunya bisa didefinisikan melalui Custom Element API
Mereka merasa bagi kebanyakan pengguna, kombinasi HTML + custom element akan lebih baik daripada SPA
Membagikan contoh Hypalink buatan mereka, sambil menyoroti bahwa Web Components kurang dihargai
Memperkenalkan custom tag bernama
<yes-script>yang dibuat untuk menjalankan peran kebalikan dari<noscript>Saat JS dinonaktifkan, area tertentu bisa disembunyikan
Membagikan tautan proyek
@media (scripting)bisa memberi efek yang sama hanya dengan CSS murniMelampirkan tautan referensi dokumen MDN
Membagikan pengalaman pernah menciptakan ulang tag
<blink>yang dulu dihapus dari browserItu dibuat dengan jQuery dan manipulasi visibility, dan mereka terkejut mengetahui browser mengizinkan tag arbitrer
Karena kodenya hanya sekitar 10 baris, mereka tidak mempublikasikannya, tetapi menduga banyak percobaan serupa sudah ada
<blink>, dan hanya Firefox dan Opera yang mendukungnya sampai 2013<blink>juga bisa dibuat hanya dengan CSS, lalu membagikan contoh kodeJika memakai selector
blinkalih-alih.blink, efeknya akan diterapkan langsung ke tag<blink>punya makna yang terlalu besar untuk disediakan sebagai elemen HTML sederhana, jadi mereka senang fitur itu dihapusMenunjukkan bahwa contoh seperti
<main-article>dan<article-header>sebenarnya bisa diganti dengan tag HTML nyataMenggunakan
<article>,<header>, dan<blockquote>akan lebih tepatCustom tag pada dasarnya dirender inline seperti
<span>, tetapi properti display default bisa ditentukan lewat CSSDulu ini dihindari karena masalah namespace, tetapi setelah standar mengizinkan tanda hubung (
-), risiko bentrokan hilangIni juga bekerja baik dalam selector CSS, dan bisa diakses lewat
querySelectorTerasa bahwa bahkan tanpa framework seperti Vue, HTML modern saja sudah cukup ekspresif
Ini adalah desain agar saat di-upgrade di masa depan, rantai prototipe dapat diperluas secara alami
Jika ingin menetapkan style default untuk semua custom element, bisa dilakukan seperti berikut
Mengenang bahwa IE lama dulu tidak mengenali tag HTML5, jadi sekitar tahun 2010 mereka menyelesaikannya dengan skrip buatan sendiri
Begitu tag dibuat sekali lewat JS, IE akan mengenalinya, dan setelah itu tidak masalah meski dihapus
Dari situ mereka sadar bahwa tag arbitrer pun bisa dirender dengan cara ini
Mereka juga membagikan tulisan blog saat itu