cari
Rumahhujung hadapan webtutorial cssMenggunakan 'susunan' harta benda tersuai untuk menjinakkan lata

CSS Custom Properties: Cara Baru untuk Mengawal Cascading dan Warisan

Menggunakan harta tersuai

Sejak kelahiran CSS pada tahun 1994, cascading dan warisan telah menentukan bagaimana kami merancang di laman web. Kedua -duanya adalah ciri -ciri yang kuat, tetapi sebagai pemaju, kami mempunyai kawalan yang sangat terhad mengenai bagaimana mereka berinteraksi. Kekhususan pemilih dan pesanan kod sumber menyediakan beberapa kawalan "hierarki" yang minimum, tetapi tidak mempunyai nuansa - dan warisan memerlukan garis keturunan yang tidak terputus . Sekarang, CSS Custom Ciri -ciri membolehkan kami mengurus dan mengawal cascading dan warisan dengan cara yang baru.

Artikel ini akan menunjukkan cara menggunakan "timbunan" harta tersuai untuk menyelesaikan beberapa masalah biasa dalam cascading: dari gaya komponen scoped ke hierarki niat yang lebih jelas.

Cepat belajar mengenai sifat tersuai

Pelayar menggunakan awalan vendor (seperti -webkit- atau -moz-) untuk menentukan sifat baru dengan cara yang sama, dan kita boleh menggunakan awalan "kosong" untuk menentukan sifat tersuai kita sendiri. Seperti pembolehubah dalam SASS atau JavaScript, kita boleh menggunakannya untuk menamakan, menyimpan, dan mengambil nilai -tetapi seperti sifat -sifat lain dalam CSS, mereka dilancarkan dan diwarisi dengan DOM.

 <code>/* 定义自定义属性*/ html { --brand-color: rebeccapurple; }</code>

Untuk mengakses nilai -nilai yang ditangkap ini, kami menggunakan fungsi VAR (). Ia mempunyai dua bahagian: pertama nama harta tersuai, dan kemudian nilai sandaran apabila harta itu tidak ditakrifkan:

 <code>button { /* 如果可用,则使用--brand-color,否则回退到deeppink */ background: var(--brand-color, deeppink); }</code>

Ini bukan sandaran sokongan daripada pelayar yang lebih tua. Jika penyemak imbas tidak memahami sifat tersuai, ia mengabaikan keseluruhan perisytiharan VAR (). Sebaliknya, ini adalah cara terbina dalam untuk menangani pembolehubah yang tidak ditentukan, sama seperti timbunan fon yang mentakrifkan keluarga fon sandaran apabila fon tidak tersedia. Jika kita tidak memberikan nilai sandaran, lalai tidak ditetapkan.

Bina pemboleh ubah "timbunan"

Keupayaan untuk menentukan nilai sandaran adalah serupa dengan "stack font" yang digunakan dalam harta keluarga font. Jika siri pertama tidak tersedia, siri kedua akan digunakan, dan sebagainya. Fungsi var () hanya menerima nilai sandaran tunggal, tetapi kita boleh sarang fungsi var () untuk membuat atribut adat "stack" dari sebarang saiz:

 <code>button { /* 尝试Consolas,然后是Menlo,然后是Monaco,最后是monospace */ font-family: Consolas, Menlo, Monaco, monospace; /* 尝试--state,然后是--button-color,然后是--brand-color,最后是deeppink */ background: var(--state, var(--button-color, var(--brand-color, deeppink))); }</code>

Jika sintaks bersarang untuk menyusun sifat kelihatan besar, anda boleh menggunakan preprocessor seperti SASS untuk menjadikannya lebih padat.

Had nilai sandaran tunggal diperlukan untuk menyokong nilai sandaran yang mengandungi koma -seperti susunan fon atau imej latar belakang hierarki:

 <code>html { /* 后备值为"Helvetica, Arial, sans-serif" */ font-family: var(--my-font, Helvetica, Arial, sans-serif); }</code>

Tentukan "Skop"

Pemilih CSS membolehkan kita menyelam ke dalam pokok dan elemen gaya HTML di mana sahaja di halaman atau elemen dalam konteks bersarang tertentu.

 <code>/* 所有链接*/ a { color: slateblue; } /* section 内的链接*/ section a { color: rebeccapurple; } /* article 内的链接*/ article a { color: deeppink; }</code>

Ini berguna, tetapi ia tidak menangkap realiti gaya "modular" yang berorientasikan objek atau berasaskan komponen. Kami mungkin mempunyai banyak artikel dan selain bersarang dalam pelbagai konfigurasi. Kami memerlukan cara untuk menjelaskan konteks atau skop mana yang perlu diutamakan apabila mereka bertindih.

Skop jarak

Katakan kita mempunyai tema lampu dan tema .dark. Kita boleh menggunakan kelas-kelas ini pada elemen akar untuk menentukan nilai lalai di seluruh halaman, tetapi kita juga boleh menggunakannya kepada komponen tertentu yang bersarang dalam pelbagai cara:

Setiap kali kita menggunakan salah satu kelas corak warna, latar belakang dan sifat warna ditetapkan semula dan kemudian diwarisi oleh tajuk dan perenggan bersarang. Dalam konteks utama kami, warna mewarisi dari kelas., Manakala tajuk dan perenggan bersarang mewarisi dari kelas .dark. Warisan didasarkan pada garis keturunan langsung, jadi nenek moyang terdekat dengan nilai yang ditetapkan akan menjadi keutamaan. Kami memanggilnya berdekatan .

Jarak adalah penting untuk warisan, tetapi ia tidak memberi kesan kepada pemilih, yang bergantung kepada kekhususan. Ini menjadi masalah jika kita mahu gaya sesuatu di dalam bekas gelap atau cahaya.

Di sini saya cuba menentukan variasi butang cahaya dan gelap. Butang mod cahaya mestilah rebeccapurple dengan teks putih supaya mereka menonjol, sementara butang mod gelap harus plum dengan teks hitam. Kami secara langsung memilih butang berdasarkan konteks cahaya dan gelap, tetapi ini tidak berfungsi:

Sesetengah butang berada dalam kedua -dua konteks, dengan nenek moyang dan .dark. Dalam kes ini, apa yang kita mahu adalah untuk mengambil topik baru -baru ini (mewarisi tingkah laku jarak dekat ), tetapi apa yang kita dapat ialah pemilih kedua yang mengatasi pemilih pertama (kelakuan cascade). Oleh kerana kedua -dua pemilih ini mempunyai kekhususan yang sama, urutan kod sumber menentukan pemenang.

Sifat tersuai dan jarak dekat

Kami memerlukan cara untuk mewarisi sifat -sifat ini dari topik ini, tetapi hanya memohon kepada unsur -unsur kanak -kanak tertentu, seperti butang kami. Sifat tersuai menjadikan ini mungkin! Kita boleh menentukan nilai -nilai pada bekas cahaya dan gelap, tetapi hanya menggunakan nilai -nilai yang diwarisi pada unsur -unsur bersarang seperti butang kita.

Kami akan terlebih dahulu menetapkan butang untuk menggunakan sifat tersuai dan menggunakan nilai "lalai" sandaran sekiranya sifat -sifat tersebut tidak ditentukan:

 <code>button { background: var(--btn-color, rebeccapurple); color: var(--btn-contrast, white); }</code>

Sekarang kita dapat menetapkan nilai -nilai ini berdasarkan konteksnya, mereka akan skop kepada nenek moyang yang sesuai mengikut jarak dan warisan:

 <code>.dark { --btn-color: plum; --btn-contrast: black; } .light { --btn-color: rebeccapurple; --btn-contrast: white; }</code>

Sebagai bonus tambahan, kami menggunakan kurang kod secara keseluruhan, serta definisi butang bersatu:

Saya fikir ini adalah API untuk membuat parameter yang tersedia untuk komponen butang. Kedua -dua Sara Soueidan dan Lea Verou telah menutupi artikel -artikel baru -baru ini.

Pemilikan komponen

Kadang -kadang kedekatan tidak mencukupi untuk menentukan skop. Apabila rangka kerja JavaScript menjana "gaya skop", mereka menubuhkan pemilikan unsur -unsur objek tertentu. Komponen susun atur tab mempunyai tab itu sendiri, tetapi tidak mempunyai kandungan di belakang setiap tab. Ini juga apa yang cuba dikatakan oleh konvensyen BEM di kompleks. Block__element Names.

Nicole Sullivan mencipta istilah "skop donat" pada tahun 2011 untuk membincangkan isu ini. Walaupun saya percaya dia telah mengemas kini idea mengenai isu ini, masalah asas tidak berubah. Pemilih dan kekhususan sangat bagus untuk menerangkan bagaimana kita membina gaya terperinci di atas corak yang luas, tetapi mereka tidak menyampaikan rasa pemilikan yang jelas.

Kami boleh menggunakan timbunan harta tersuai untuk membantu menyelesaikan masalah ini. Kami terlebih dahulu akan mencipta sifat "global" pada elemen, yang digunakan untuk warna lalai kami:

 <code>html { --background--global: white; --color--global: black; --btn-color--global: rebeccapurple; --btn-contrast--global: white; }</code>

Sekarang kita boleh menggunakannya di mana sahaja kita mahu merujuknya. Kami akan menggunakan harta tema data untuk memohon warna latar depan dan latar belakang kami. Kami mahu nilai global memberikan nilai sandaran lalai, tetapi kami juga mahu pilihan untuk menulis ganti dengan topik tertentu. Di sinilah "timbunan" masuk:

 <code>[data-theme] { /* 如果没有组件值,则使用全局值*/ background: var(--background--component, var(--background--global)); color: var(--color--component, var(--color--global)); }</code>

Sekarang kita dapat menentukan komponen terbalik dengan menetapkan *-harta komponen ke belakang harta global:

 <code>[data-theme='invert'] { --background--component: var(--color--global); --color--component: var(--background--global); }</code>

Tetapi kami tidak mahu tetapan ini mewarisi dari donat pemilikan, jadi kami menetapkan semula nilai -nilai ini kepada awal (tidak ditentukan) pada setiap topik. Kita perlu melakukan ini dalam kekhususan yang lebih rendah atau urutan kod sumber yang lebih awal supaya ia memberikan nilai lalai yang setiap topik dapat menimpa:

 <code>[data-theme] { --background--component: initial; --color--component: initial; }</code>

Kata kunci awal mempunyai makna yang istimewa apabila digunakan untuk sifat tersuai, membalikkannya ke keadaan yang terjamin. Ini bermakna ia tidak akan diluluskan untuk menetapkan latar belakang: permulaan atau warna: awal, harta tersuai akan menjadi tidak jelas, dan kami akan kembali kepada nilai seterusnya dalam timbunan, iaitu tetapan global.

Kita boleh melakukan perkara yang sama dengan butang dan kemudian pastikan bahawa tema data digunakan untuk setiap komponen. Jika tiada topik tertentu diberikan, setiap komponen akan gagal untuk topik global:

Tentukan "Sumber"

Cascade CSS adalah satu siri lapisan penapisan yang digunakan untuk menentukan nilai mana yang lebih disukai apabila menentukan pelbagai nilai pada harta yang sama. Kami paling sering berinteraksi dengan lapisan tertentu , atau hierarki akhir berdasarkan urutan kod sumber -tetapi lapisan pertama lata adalah "sumber" gaya. Sumber menerangkan sumber gaya -biasanya penyemak imbas (lalai), pengguna (keutamaan), atau pengarang (AS).

Secara lalai, gaya pengarang mengatasi keutamaan pengguna dan keutamaan pengguna mengatasi lalai penyemak imbas. Perubahan ini apabila ada !important terpakai !important Terdapat beberapa sumber lain, tetapi kami tidak akan pergi ke butiran di sini.

Apabila kita membuat "timbunan" harta tersuai, kita sedang membina tingkah laku yang sangat serupa. Jika kita mahu mewakili sumber sedia ada sebagai timbunan harta tersuai, ia akan kelihatan seperti ini:

 <code>.origins-as-custom-properties { color: var(--browser-important, var(--user-important, var(--author-important, var(--author, var(--user, var(--browser)))))); }</code>

Lapisan ini sudah wujud, jadi tidak ada sebab untuk mencipta semula mereka. Tetapi apabila kita meletakkan gaya "global" dan "komponen" kami di atas, kami melakukan sesuatu yang serupa - mewujudkan lapisan sumber "komponen" yang menimpa lapisan "global" kami. Kaedah yang sama boleh digunakan untuk menyelesaikan pelbagai masalah hierarki dalam CSS, yang tidak boleh selalu digambarkan dengan kekhususan:

  • Mengatasi »Komponen» Tema »Nilai lalai
  • Topik »Reka bentuk sistem atau kerangka
  • Status »Jenis» Nilai lalai

Mari kita lihat beberapa butang lagi. Kami memerlukan gaya butang lalai, keadaan kurang upaya dan pelbagai jenis "butang" seperti bahaya, primer, dan menengah. Kami mahu keadaan kurang upaya sentiasa menimpa varian jenis, tetapi pemilih tidak dapat menangkap perbezaan ini:

Tetapi kita boleh menentukan timbunan yang menyediakan lapisan "Jenis" dan "Negeri" mengikut urutan yang kita mahu mengutamakan:

 <code>button { background: var(--btn-state, var(--btn-type, var(--btn-default))); }</code>

Sekarang, apabila kita menetapkan dua pembolehubah, negara akan selalu diutamakan:

Saya telah mencipta kerangka warna cascading menggunakan teknik ini yang membolehkan tetapan tema tersuai berdasarkan lapisan:

  • Sifat topik yang telah ditetapkan dalam html
  • Keutamaan warna pengguna
  • Mod cahaya dan gelap
  • Default Tema Global

Campurkan dan padan

Kaedah ini boleh menjadi melampau, tetapi kebanyakan kes penggunaan harian boleh diproses menggunakan dua atau tiga nilai dalam timbunan, biasanya menggunakan teknik di atas:

  • Tentukan timbunan pemboleh ubah lapisan
  • Warisan menetapkan mereka berdasarkan jarak dekat dan skop
  • Gunakan nilai awal dengan teliti untuk menghapuskan elemen bersarang dari skop

Kami telah menggunakan sifat -sifat tersuai ini "timbunan" dalam projek Oddbird kami. Kami masih meneroka, tetapi mereka telah membantu kami menyelesaikan masalah yang sukar diselesaikan dengan hanya pemilih dan kekhususan. Dengan sifat tersuai, kita tidak perlu melawan cascade atau warisan. Kami boleh menangkap dan menggunakannya seperti yang diharapkan dan mempunyai kawalan yang lebih baik ke atas bagaimana ia digunakan dalam setiap contoh. Bagi saya, ini adalah kemenangan besar untuk CSS - terutamanya apabila membangunkan kerangka gaya, alat dan sistem .

Atas ialah kandungan terperinci Menggunakan 'susunan' harta benda tersuai untuk menjinakkan lata. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
@KeyFrames CSS: Trik yang paling banyak digunakan@KeyFrames CSS: Trik yang paling banyak digunakanMay 08, 2025 am 12:13 AM

@keyframesispopularduetoitsversatilityAndPowerIncreatingSmoothcsSanimations.KeyTrickSinclude: 1) definisiMoothTransitionSbetweenStates, 2) AnimatingMultiplePropertiSti

Kaunter CSS: Panduan Komprehensif untuk Penomboran AutomatikKaunter CSS: Panduan Komprehensif untuk Penomboran AutomatikMay 07, 2025 pm 03:45 PM

Csscountersareusedtomanageautomaticnumberinginwebdesigns.1) mereka yang boleh dimanfaatkan, listitems, andcustomnumbering.2) AdvancedusesIndenestedNumberingsystems.3) cabaran yang terkandung di dalam cabaran

Bayang-bayang tatal moden menggunakan animasi yang didorong oleh tatalBayang-bayang tatal moden menggunakan animasi yang didorong oleh tatalMay 07, 2025 am 10:34 AM

Menggunakan bayang -bayang skrol, terutamanya untuk peranti mudah alih, adalah sedikit UX yang telah diliputi oleh Chris sebelum ini. Geoff merangkumi pendekatan yang lebih baru yang menggunakan harta animasi-masa. Berikut adalah satu lagi cara.

Mengkaji semula peta imejMengkaji semula peta imejMay 07, 2025 am 09:40 AM

Mari kita lari melalui penyegaran cepat. Peta imej tarikh kembali ke HTML 3.2, di mana, pertama, peta sisi pelayan dan kemudian peta sisi klien yang ditakrifkan di atas imej menggunakan elemen peta dan kawasan.

Negeri Devs: Tinjauan untuk Setiap PemajuNegeri Devs: Tinjauan untuk Setiap PemajuMay 07, 2025 am 09:30 AM

Kajian Negeri Devs kini dibuka untuk penyertaan, dan tidak seperti tinjauan sebelumnya ia meliputi segala -galanya kecuali kod: kerjaya, tempat kerja, tetapi juga kesihatan, hobi, dan banyak lagi. 

Apakah grid CSS?Apakah grid CSS?Apr 30, 2025 pm 03:21 PM

CSS Grid adalah alat yang berkuasa untuk mewujudkan susun atur web yang rumit dan responsif. Ia memudahkan reka bentuk, meningkatkan kebolehcapaian, dan menawarkan lebih banyak kawalan daripada kaedah yang lebih lama.

Apakah CSS Flexbox?Apakah CSS Flexbox?Apr 30, 2025 pm 03:20 PM

Artikel membincangkan CSS Flexbox, kaedah susun atur untuk penjajaran yang cekap dan pengedaran ruang dalam reka bentuk responsif. Ia menerangkan penggunaan Flexbox, membandingkannya dengan grid CSS, dan butiran sokongan penyemak imbas.

Bagaimanakah kita boleh membuat laman web kami responsif menggunakan CSS?Bagaimanakah kita boleh membuat laman web kami responsif menggunakan CSS?Apr 30, 2025 pm 03:19 PM

Artikel ini membincangkan teknik untuk membuat laman web responsif menggunakan CSS, termasuk tag Meta Viewport, grid fleksibel, media cecair, pertanyaan media, dan unit relatif. Ia juga meliputi menggunakan grid CSS dan Flexbox bersama -sama dan mengesyorkan rangka kerja CSS

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular