Idea asas ialah kita boleh menentukan bekas dan kemudian memohon gaya yang bersesuaian dengan keturunannya berdasarkan gaya yang dikira.
@container <name>? <conditions> { /* conditional styles */ }
em, i, q { font-style: italic; /* default UA behavior */ } /* When the container's font-style is italic, remove italics from these elements. */ @container style(font-style: italic) { em, i, q { font-style: normal; } }
setiap elemen adalah bekas gaya
Jadi, anda melihat contoh di atas yang menghilangkan huruf miring? Perhatikan ia tidak mengenal pasti bekas. Ia melompat ke pertanyaan menggunakan fungsi gaya (). Jadi, apa bekas yang ditanya? Ia akan menjadi ibu bapa langsung dari unsur -unsur
menerima gaya yang digunakan. Dan jika tidak itu, maka itu bekas relatif terdekat yang terdekat yang perlu diutamakan. Saya suka itu. Ia sangat CSS-y untuk pertanyaan untuk mencari perlawanan, kemudian terus gelembung sehingga ia mendapati keadaan yang sepadan.
Sukar untuk otak kecil saya untuk memahami mengapa kita boleh lari dengan bekas tersirat berdasarkan gaya tetapi tidak begitu banyak apabila kita berurusan dengan pertanyaan dimensi, seperti saiz dan saiz inline. Miriam menerangkannya dengan baik:
Pertanyaan dimensi memerlukan CSS
pembendunganJika bekas dijumpai: syarat diselesaikan terhadap bekas itu.pada saiz, susun atur, dan gaya bekas untuk mengelakkan gelung susun atur. Pembendungan adalah perkara invasif untuk memohon secara meluas, jadi penting bahawa penulis mempunyai kawalan yang teliti terhadap unsur -unsur yang (atau tidak) saiz bekas.
Pertanyaan berasaskan gaya tidak mempunyai batasan yang sama. Tidak ada cara dalam CSS untuk gaya keturunan untuk memberi impak kepada gaya yang dikira sebagai nenek moyang. (penekanan lombong)
Semuanya datang kepada akibat - yang mana tidak ada sejauh mana semua yang menjadi bekas pertanyaan gaya keluar dari kotak.
Jika beberapa bekas yang sesuai: bekas relatif terdekat yang terdahulu.
Katakan kita mahu menentukan pertanyaan gaya tanpa nama kontena yang jelas:
semua elemen adalah bekas gaya
, tidak kira jenis kontena. Itulah yang membolehkan kita untuk membuat gaya secara tersirat dan bergantung pada perlawanan terdekat. Dan ini benar -benar baik kerana, sekali lagi, tidak ada kesan sampingan yang buruk apabila menubuhkan bekas gaya.@container <name>? <conditions> { /* conditional styles */ }
kita perlu menggunakan jenis kontena yang jelas untuk pertanyaan dimensi, tetapi tidak banyak untuk pertanyaan gaya kerana setiap elemen adalah pertanyaan gaya. Itu juga bermakna bekas ini adalah kedua -dua gaya dan pertanyaan dimensi:
tidak termasuk bekas daripada ditanya
Mungkin kita tidak mahu bekas untuk mengambil bahagian dalam proses yang sepadan. Di sinilah ia mungkin untuk menetapkan jenis kontena: tidak ada pada elemen.em, i, q { font-style: italic; /* default UA behavior */ } /* When the container's font-style is italic, remove italics from these elements. */ @container style(font-style: italic) { em, i, q { font-style: normal; } }
Jika, katakan, kami menulis pertanyaan gaya untuk padding, tidak ada cara yang boleh dipercayai untuk menentukan bekas yang sesuai, tanpa mengira sama ada kami bekerja dengan bekas yang dinamakan secara jelas atau ibu bapa langsung terdekat. Itu kerana padding bukan harta yang diwarisi.
@container style(font-style: italic) { em { font-style: normal; } }
oh, dan nama kontena menerima bilangan pilihan dan
nama yang boleh diguna semula untuk bekas! Itu lebih fleksibel ketika membantu penyemak imbas membuat pilihan ketika mencari pertandingan.
.card-container { container: card / inline-size; /* implictly a style query container as well */ }
Saya hairan jika itu juga dianggap sebagai "sandaran" sekiranya satu bekas diluluskan. pertanyaan gaya boleh digabungkan
.some-element { container-type: none; }
@container <name>? <conditions> { /* conditional styles */ }
Terdapat sedikit pertindihan antara pertanyaan gaya kontena dan kerja yang dilakukan untuk menentukan fungsi togol (). Sebagai contoh, kita boleh menembusi dua nilai gaya font, katakan italik dan normal:
em, i, q { font-style: italic; /* default UA behavior */ } /* When the container's font-style is italic, remove italics from these elements. */ @container style(font-style: italic) { em, i, q { font-style: normal; } }
sejuk. Tetapi cadangan untuk togol CSS menunjukkan bahawa fungsi togol () akan menjadi pendekatan yang lebih mudah:
@container style(font-style: italic) { em { font-style: normal; } }
Tetapi apa -apa di luar kes penggunaan binari seperti ini adalah di mana togol () kurang sesuai. Pertanyaan gaya, bagaimanapun, adalah baik untuk pergi. Miriam mengenal pasti tiga contoh di mana pertanyaan gaya lebih sesuai daripada togol ():
.card-container { container: card / inline-size; /* implictly a style query container as well */ }
Perhatikan bahawa pertanyaan gaya adalah penyelesaian rasmi untuk "CSS Custom Property Toggle Trick". Di sana, kami menetapkan harta tersuai kosong (--foo:;) dan gunakan kaedah sandaran yang dipisahkan koma untuk "togol" sifat dan dimatikan apabila harta tersuai ditetapkan kepada nilai sebenar.
.some-element { container-type: none; }
itu sangat sejuk, juga banyak kerja yang membuat pertanyaan kontena gaya menjadikan remeh.
Untuk kandungan yang dihasilkan yang dihasilkan oleh harta kandungan :: sebelum dan :: Selepas elemen pseudo, bekas yang sepadan adalah elemen di mana kandungan dihasilkan.
.card { container-name: card layout theme; }
kita boleh menentukan komponen web sebagai bekas dan menanyakannya dengan gaya. Pertama, kita mempunyai & lt; template & gt; daripada komponen:
.theme { container-name: theme; } .grid { container-name: layout; } .card { container-name: card layout theme; }
Kemudian kami menggunakan: Pseudo-Element Host sebagai bekas untuk menetapkan nama kontena, jenis kontena, dan beberapa atribut peringkat tinggi di atasnya:
@container bubble style(--arrow-position: start start) or style(--arrow-position: end start) { .bubble::after { border-block-end-color: inherit; inset-block-end: 100%; } } /* is the same as... */ @container bubble style(--arrow-position: start start) { /* etc. */ } @container bubble style(--arrow-position: end start) { /* etc. */ }
unsur-unsur di dalam & lt; media-host & gt; boleh menanyakan parameter & lt; media-host & gt; elemen:
em, i, q { font-style: italic; } @container style(font-style: italic) { em, i, q { font-style: normal; } }
Atas ialah kandungan terperinci Menggali lebih mendalam ke dalam pertanyaan gaya kontena. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!