CSS Untuk URL dan HTTP Header
Life

CSS Untuk URL dan HTTP Header

Beberapa hal telah berputar-putar di kepala saya:

  • Posting Chris Coyier tentang kilasan tema warna yang tidak akurat (FART) menjadi istilah resmi.
  • Postingan Jason Lengstorf tentang mencapai pengalih tema tanpa kilatan warna yang tidak akurat dengan menggunakan fungsi tepi Netlify.
  • Posting saya tentang permintaan ketergantungan npm dan sintaks pemilih khusus mereka, seperti :semver() kelas semu

Ini semua jadi berpikir…

Saat Anda melihat halaman web, yang Anda miliki di bawahnya adalah DOM:

Ups, salah DOM. Ini dia (gambar milik Wikipedia).

Bagaimana kita mendapatkan DOM? Browser mengetahui cara membuatnya dari permintaan HTTP yang terdiri dari URL, beberapa header, dan beberapa HTML. Misalnya, ini adalah representasi sederhana dari (awal) halaman web untuk www.jim-nielsen.com.

> GET / HTTP/2
> Host: www.jim-nielsen.com
> 
< HTTP/2 200 
< content-type: text/html; charset=UTF-8
< date: Tue, 15 Nov 2022 19:47:19 GMT
< content-length: 475979
< 
<!DOCTYPE html>
<html lang="en">
  <head>…</head>
  <body>…</body>
</html>

Perhatikan berbagai informasi yang terjerat dalam permintaan HTTP tersebut: URL, beberapa header, dan beberapa HTML. Peramban tahu cara mengambil semua informasi itu dan merendernya sebagai halaman web.

HTML biasanya adalah apa yang kita pikirkan ketika kita menggunakan CSS untuk menata halaman web (mis. “jika ada elemen dengan kelas .foo membuat teks color: red”). Namun, lebih dari sekadar informasi dalam HTML dapat bermanfaat saat menata halaman web. Permintaan HTTP memiliki informasi terkait, seperti URL dan header, yang tidak dapat kami kueri dan menerapkan gaya berdasarkan logika.

Saya kira Anda dapat melakukan ini hari ini, setidaknya sebagian kecil, dengan sesuatu seperti itu :target pseudo class yang memungkinkan Anda untuk menargetkan dan memberi gaya pada elemen tertentu di DOM berdasarkan nilai fragmen di URL (hati-hati: ini memiliki kebiasaan seperti history.pushState tidak memengaruhi :target gaya).

Maksud saya adalah: mungkin ada informasi penting untuk menata halaman web yang berada di luar HTML saja. Seluruh respons HTTP tetap tidak dapat diakses oleh CSS. Mengapa demikian? Bagaimana jika Anda dapat menulis pemilih berdasarkan informasi apa pun dalam respons HTTP?

Pemilih URL: Aturan @document

Ternyata, ada/dulu a @document at-rule — diusulkan dalam CSS3, ditangguhkan ke CSS4, tampaknya sudah tidak digunakan lagi sekarang? — yang memungkinkan Anda menulis gaya yang berlaku untuk URL tertentu. Ini akan luar biasa untuk menulis gaya pengguna khusus domain, tetapi juga (menurut saya) untuk gaya penulis.


@document url("https://blog.jim-nielsen.com/about/") 
  body

Sintaks yang diusulkan memungkinkan pencocokan aturan berdasarkan nilai, awalan, atau domain URL. Jika itu tidak cukup, ada cara untuk mencocokkan berdasarkan regex.


@document regexp("https:.*") 
  body

Regex memang bagus, tetapi saya bertanya-tanya seberapa mudahnya mereka diakses oleh banyak orang? Dan sementara ada yang diusulkan @document url-prefix() itu membuat Anda bertanya-tanya, “Bagaimana dengan @document url-suffix()?” Dan tidak ada yang pernah saya lihat menyentuh tentang cara menata gaya berdasarkan parameter kueri (saya kira untuk itulah regex itu?).

Sebagian dari diri saya bertanya-tanya apakah, alih-alih fungsi yang disebutkan ini (url(), url-prefix(), domain(), regex()) dapatkah kita memanfaatkan idiom pemilih atribut CSS yang ada? Saya tidak yakin seperti apa sintaksnya, tetapi bayangkan ini sebagai contoh:


@document[url="https://blog.jim-nielsen.com/about"] …


@document[url*="foo=bar"] …


@document[url^="https:"] …


@document[url$=".php"] …


@document[domain="jim-nielsen.com"] …


@document[domain="jim-nielsen.com"][url$=".html"] …

Memang saya meludah di sini, tapi untuk itulah posting blog.

Pemilih HTTP…?

Sejauh yang saya tahu, tidak ada yang meminta pemilih CSS yang dapat menanyakan header HTTP. Mungkin ada alasan untuk itu, tapi sekali lagi saya membayangkan.

Mengesampingkan kemungkinan terbuka yang mungkin diimpikan orang dengan non-standar X- header, bayangkan bisa mendeklarasikan beberapa gaya berdasarkan keberadaan cookie. Cookie menarik karena merupakan bagian dari status yang ditetapkan oleh server dan dikirim oleh klien pada setiap permintaan berikutnya — JavaScript tidak diperlukan!

Ini bisa sangat berguna untuk mendukung kasus penggunaan seperti mode gelap yang dapat dikonfigurasi pengguna tanpa FART pada host file statis. Anda mengirim pengguna ke URL yang sesuai, server menyetel cookie, dan sekarang Anda memiliki status yang dapat diminta oleh CSS. Tidak perlu penulisan ulang HTML fungsi tepi, tidak ada kilasan tema warna yang tidak akurat, dan tidak diperlukan JavaScript klien! Contoh CSS:




:root  background: #fff 


@media (prefers-color-scheme:dark) 
  :root  background: #000 


:http([set-cookie*="THEME=dark"]) 
  :root  background: #000 

Mungkin ada banyak alasan mengapa kami tidak dapat melakukan hal seperti ini — tetapi ini adalah blog saya dan di sinilah saya bermimpi!

Pengeluaran hk tercepat hari ini berasal dari web site togel Data SGP pools https://generationsremembered.com/ hasil keluaran hk terkini tiap hari. Dengan memakai rekapan bagan information hk prize, Pasti mempermudah bettor di dalam menyaksikan no pengeluaran SGP hari ini. Di mana tiap hasil pengeluaran hk https://goldenretrieverthevenet.com/ ini terkini senantiasa kami pembaharuan menjajaki result keluaran hongkong terkini berasal dari hongkongpools.com. Tujuannya sehingga para fans judi togel https://receptizakolace.net/ di Indonesia dapat bersama mudahnya mengenali hasil hk hari ini terkini serta benar-benar kilat.