Rumah >hujung hadapan web >tutorial css >Pengenalan kepada CSS ' s @Supports Rule (pertanyaan ciri)
Degradasi anggun memanfaatkan teknologi canggih untuk mereka bentuk untuk pengalaman dan fungsi pengguna yang canggih. Pengguna penyemak imbas yang kurang berkebolehan masih dapat mengakses laman web, tetapi akan menikmati tahap penurunan fungsi dan pengalaman melayari.
Dengan peningkatan progresif, pemaju menubuhkan garis dasar dengan merancang untuk tahap pengalaman pengguna yang kebanyakan pelayar dapat menyokong. Aplikasi mereka menyediakan pengesanan keupayaan penyemak imbas terbina dalam, yang mereka gunakan untuk menyediakan fungsi yang lebih maju dan pengalaman melayari yang lebih kaya dengan sewajarnya.
Alat yang paling banyak diterima pakai dalam pendekatan peningkatan progresif ialah Perpustakaan Modernizr JavaScript.
ModernIZR Memeriksa secara programatik jika penyemak imbas menyokong teknologi web generasi akan datang dan dengan itu mengembalikan benar atau palsu. Bersenjata dengan pengetahuan ini, anda boleh mengeksploitasi ciri -ciri baru dalam menyokong penyemak imbas, dan masih mempunyai cara yang boleh dipercayai untuk memenuhi penyemak imbas yang lebih tua atau tidak bersesuaian.
Sebaik sahaja bunyi ini, sesuatu yang lebih baik telah dibuat untuk beberapa waktu. Anda boleh melakukan pengesanan ciri menggunakan pertanyaan ciri CSS asli dengan peraturan @Supports.
Dalam jawatan ini saya akan menyelidiki lebih mendalam ke dalam @Supports dan API JavaScript yang berkaitan.
mengesan ciri penyemak imbas dengan peraturan @Supports
Semasa dengan pertanyaan media, anda dapat mengesan ciri paparan seperti lebar dan ketinggian viewport, @Supports membolehkan anda menyemak sokongan penyemak imbas untuk pasangan harta/nilai CSS.
Untuk mempertimbangkan contoh asas, katakan laman web anda memaparkan sekeping karya seni yang ingin anda tingkatkan menggunakan pengadunan CSS. Memang benar, mod campuran CSS merendahkan dengan anggun dalam penyemak imbas yang tidak menyokong. Walau bagaimanapun, bukannya penyemak imbas secara lalai dalam kes sedemikian, anda mungkin ingin menggembirakan pengguna penyemak imbas yang tidak menyokong dengan memaparkan sesuatu yang sama istimewa, jika tidak sama hebatnya. Ini adalah bagaimana anda akan melakukan cek untuk CSS campuran di lembaran styleshe anda dengan @Supports:
<span><span>@supports (mix-blend-mode: overlay)</span> { </span> <span><span>.example</span> { </span> <span>mix-blend-mode: overlay; </span> <span>} </span> <span>}</span>
Untuk memohon gaya yang berbeza untuk penyemak imbas yang tidak mempunyai sokongan mod campuran, anda akan menggunakan sintaks ini:
<span><span>@supports not(mix-blend-mode: overlay)</span> { </span> <span><span>.example</span> { </span> <span>/* alternative styles here */ </span> <span>} </span> <span>}</span>
Beberapa perkara yang perlu diperhatikan:
mari kita dapatkan contoh -contoh di atas dengan demo kecil. Pelayar dengan sokongan campuran-mod akan menggunakan gaya di dalam @Supports () {...} blok; Pelayar lain akan menggunakan gaya di dalam @supports tidak () {...} blok.
html:
<span><span><span><article</span> class<span>="artwork"</span>></span> </span> <span><span><span><img</span> src<span>="myimg.jpg"</span> alt<span>="cityscape"</span>></span> </span><span><span><span></article</span>></span></span>
CSS:
<span><span>@supports (mix-blend-mode: overlay)</span> { </span> <span><span>.artwork img</span> { </span> <span>mix-blend-mode: overlay; </span> <span>} </span> <span>} </span> <span><span>@supports not(mix-blend-mode: overlay)</span> { </span> <span><span>.artwork img</span> { </span> <span>opacity: 0.5; </span> <span>} </span> <span>}</span>
lihat demo di Codepen:
Lihat Demo Peraturan Pen @Supports oleh SitePoint (@SitePoint) pada codepen.
Apabila melakukan ujian ciri dengan @Supports, anda tidak terhad kepada satu keadaan ujian pada satu -satu masa. Menggabungkan pengendali logik seperti dan, atau, dan yang sudah disebutkan tidak pengendali membolehkan anda menguji pelbagai ciri sekaligus.
dan konjungsi ujian pengendali untuk kehadiran pelbagai yang diperlukan syarat:
<span><span>@supports (property1: value1) and (property2: value2)</span> { </span> <span>element { </span> <span>property1: value1; </span> <span>property2: value2; </span> <span>} </span><span>}</span>
Dengan menggunakan kata kunci
<span><span>@supports (property1: value1) or (-webkit-property1: value1)</span> { </span> <span>element { </span> <span>-webkit-property1: value1; </span> <span>property1: value1; </span> <span>} </span><span>}</span>anda juga boleh menggabungkan dan dengan atau, menguji keadaan dalam peraturan @supports yang sama:
<span><span>@supports (mix-blend-mode: overlay)</span> { </span> <span><span>.example</span> { </span> <span>mix-blend-mode: overlay; </span> <span>} </span> <span>}</span>
Apabila anda mengumpulkan beberapa syarat bersama -sama, penggunaan kurungan yang betul adalah penting. Mempunyai dan, atau, dan bukan kata kunci bercampur bersama tidak akan berfungsi. Juga, cara anda mengumpulkan syarat -syarat di dalam kurungan menetapkan perintah di mana mereka dapat dinilai. Dalam coretan di atas, keadaan yang tidak disengajakan atau keadaan dinilai terlebih dahulu, maka jawapan yang dihasilkan dinilai terhadap keadaan yang diperlukan selanjutnya yang diperkenalkan oleh kata kunci dan.
<span><span>@supports not(mix-blend-mode: overlay)</span> { </span> <span><span>.example</span> { </span> <span>/* alternative styles here */ </span> <span>} </span> <span>}</span>semua
syarat -syarat yang anda menafikan dengan kata kunci bukan di dalam kurungan. Inilah versi yang diperbetulkan dari coretan di atas:
Akhirnya, pastikan anda meninggalkan ruang putih selepas tidak dan di kedua -dua belah dan atau atau.<span><span><span><article</span> class<span>="artwork"</span>></span> </span> <span><span><span><img</span> src<span>="myimg.jpg"</span> alt<span>="cityscape"</span>></span> </span><span><span><span></article</span>></span></span>
pengendali dalam tindakan
Kerana beberapa pelayar Android yang lebih tua memerlukan awalan -webkit- untuk kecerunan linear, mari kita periksa sokongan penyemak imbas dengan memasukkan keadaan selanjutnya ke dalam blok @Supports:
<span><span>@supports (mix-blend-mode: overlay)</span> { </span> <span><span>.artwork img</span> { </span> <span>mix-blend-mode: overlay; </span> <span>} </span> <span>} </span> <span><span>@supports not(mix-blend-mode: overlay)</span> { </span> <span><span>.artwork img</span> { </span> <span>opacity: 0.5; </span> <span>} </span> <span>}</span>
Katakan laman web anda menggunakan mod campuran kilauan dan ketepuan yang, pada masa penulisan, tidak disokong di Safari. Anda masih ingin menyediakan gaya alternatif untuk penyemak imbas tersebut, jadi inilah caranya anda boleh menetapkan keadaan konjungtif yang sesuai dengan menggunakan @Supports tidak dengan dan:
<span><span>@supports (property1: value1) and (property2: value2)</span> { </span> <span>element { </span> <span>property1: value1; </span> <span>property2: value2; </span> <span>} </span><span>}</span>
Semua demo untuk bahagian ini boleh didapati di Codepen:
<span><span>@supports (property1: value1) or (-webkit-property1: value1)</span> { </span> <span>element { </span> <span>-webkit-property1: value1; </span> <span>property1: value1; </span> <span>} </span><span>}</span>
Lihat demo pen pada ujian pelbagai ciri dengan @Supports oleh SitePoint (@SitePoint) pada Codepen.
javascript dengan pertanyaan ciri CSS
Sintaks yang terdahulu dan paling banyak disokong mengambil dua argumen, iaitu,
hartanilai , dan mengembalikan nilai Boolean yang benar atau palsu: Pastikan anda meletakkan harta dan nilai yang sama di dalam sebut harga. Spesifikasi menjelaskan bahawa fungsi di atas kembali benar jika ia memenuhi dua syarat berikut:
oleh perlawanan literal Spesifikasi bermakna bahawa CSS melarikan diri tidak diproses dan ruang putih tidak dipangkas. Oleh itu, jangan melarikan diri dari watak atau meninggalkan ruang putih, jika tidak, ujian akan kembali palsu.
alternatif, sintaks yang lebih baru hanya mengambil satu hujah di dalam kurungan:
<span><span>@supports (mix-blend-mode: overlay)</span> { </span> <span><span>.example</span> { </span> <span>mix-blend-mode: overlay; </span> <span>} </span> <span>}</span>
menggunakan sintaks ini menjadikannya mudah untuk menguji pelbagai syarat dengan dan dan atau kata kunci.
Berikut adalah contoh yang cepat. Katakan anda ingin menguji jika penyemak imbas menyokong mod campuran kilauan. Sekiranya ia berlaku, JavaScript anda secara dinamik akan menambah kelas pencahayaan-blend ke elemen sasaran, jika tidak, ia akan menambah kelas noluminositi. CSS anda kemudian akan gaya elemen dengan sewajarnya.
Berikut adalah CSS:
<span><span>@supports not(mix-blend-mode: overlay)</span> { </span> <span><span>.example</span> { </span> <span>/* alternative styles here */ </span> <span>} </span> <span>}</span>
Jika anda mengikuti sintaks dua argumen, coretan JavaScript boleh seperti berikut:
<span><span><span><article</span> class<span>="artwork"</span>></span> </span> <span><span><span><img</span> src<span>="myimg.jpg"</span> alt<span>="cityscape"</span>></span> </span><span><span><span></article</span>></span></span>
Jika anda lebih suka sintaks yang terbaru, satu-argumen, hanya ganti baris kod yang sepadan di atas dengan yang di bawah:
<span><span>@supports (mix-blend-mode: overlay)</span> { </span> <span><span>.artwork img</span> { </span> <span>mix-blend-mode: overlay; </span> <span>} </span> <span>} </span> <span><span>@supports not(mix-blend-mode: overlay)</span> { </span> <span><span>.artwork img</span> { </span> <span>opacity: 0.5; </span> <span>} </span> <span>}</span>
Jangan ragu untuk menyemak demo:
Lihat API Pen JavaScript untuk pertanyaan ciri CSS oleh SitePoint (@SitePoint) pada codepen.
Semua versi terkini pelayar utama mempunyai sokongan untuk peraturan @Supports kecuali Internet Explorer 11 dan Opera Mini. Adakah @Supports bersedia untuk dunia nyata? Saya telah menemui jawapan terbaik untuk soalan ini dalam kata -kata Tiffany Brown:
... berhati-hati untuk menentukan gaya misi-kritikal dalam @Supports ...
Tentukan Gaya Pangkalan Anda - Gaya yang setiap satu daripada Sasaran Anda
Pelayar boleh mengendalikan. Kemudian gunakan @Supports ... untuk mengatasi dan menambah
Gaya tersebut dalam penyemak imbas yang boleh mengendalikan ciri -ciri yang lebih baru.CSS Master, p.303
Dalam artikel ini, saya meneroka pengesanan ciri pelayar CSS asli dengan peraturan @Supports (a.k.a pertanyaan ciri). Saya juga melalui API JavaScript yang sepadan, yang membolehkan anda menyemak keadaan penyemak imbas semasa untuk sifat CSS terkini menggunakan kaedah CSS.Ss.supports fleksibel ().
Sokongan penyemak imbas untuk pertanyaan ciri CSS adalah baik tetapi tidak meliputi semua pangkalan anda. Walau bagaimanapun, jika anda ingin menggunakan @Supports dalam projek anda, penempatan strategik gaya dalam dokumen CSS anda, seperti yang dicadangkan oleh Tiffany Brown, dan CSS-Supports.JS Polyfill oleh Han Lin Yap dapat membantu.Jika anda mencuba demo dalam artikel ini atau mempunyai pengalaman dunia nyata menggunakan @supports, saya suka mendengar daripada anda.
Ya, anda boleh menggunakan pelbagai syarat dalam peraturan CSS @Supports dengan menggunakan logik pengendali. Pengendali 'dan' membolehkan anda menyemak sama ada pelbagai ciri disokong, manakala pengendali 'atau' memeriksa jika sekurang -kurangnya satu ciri disokong. Pemeriksaan pengendali 'tidak' jika ciri tidak disokong. Sebagai contoh, @Supports (paparan: grid) dan (paparan: flex) { / * styles untuk memohon jika kedua -dua grid dan flex disokong * /}. Ciri CSS?
Apa yang berlaku jika penyemak imbas tidak menyokong peraturan @Supports? menyokong peraturan, ia akan mengabaikan keseluruhan peraturan, termasuk gaya di dalamnya. Ini bermakna anda boleh menggunakan @supports dengan selamat tanpa bimbang tentang memecahkan laman web anda pada pelayar yang lebih lama. Walau bagaimanapun, masih penting untuk menyediakan gaya sandaran untuk penyemak imbas yang tidak menyokong ciri -ciri yang anda uji dengan @Supports. @Supports peraturan, sama seperti anda boleh sarang peraturan CSS yang lain. Ini membolehkan anda menguji sokongan pelbagai ciri dengan cara yang lebih kompleks. Sebagai contoh, anda boleh menggunakan peraturan @supports bersarang untuk memohon gaya hanya jika penyemak imbas menyokong kedua -dua grid CSS dan flexbox. Menyokong Peraturan adalah kaedah yang boleh dipercayai untuk pengesanan ciri dalam CSS, tetapi ia tidak sempurna. Sesetengah pelayar yang lebih tua tidak menyokong @sokongan, dan beberapa pelayar boleh melaporkan positif atau negatif palsu. Adalah idea yang baik untuk menguji laman web anda dalam pelbagai pelayar untuk memastikan ia berfungsi seperti yang diharapkan. Sokongan ciri CSS dengan kaedah CSS.S.Supports (). Kaedah ini berfungsi sama dengan peraturan @Supports, tetapi membolehkan anda menguji sokongan ciri secara dinamik dalam kod JavaScript anda.
Atas ialah kandungan terperinci Pengenalan kepada CSS ' s @Supports Rule (pertanyaan ciri). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!